W3C中国

» 如何阅读W3C规范(高博翻译版)

 

J. David Eisenberg, 2001928

 高博 翻译

原文网址:http://alistapart.com/article/readspec

    Web上的所有技术的规格都由万维网联盟(W3C)负责管理。作为一名前端工程师的您,可能访问过该联盟的网站(w3.org)来寻找XHTML的某个问题的答案,或是想要了解诸如XSL格式化对象(XSL Formatting Objects)或可伸缩矢量图形(Scalable Vector Graphics)这样的新技术。

    就这样,您接触到了规格,但几乎立刻被吓得落荒而逃。您一定会觉得,“什么嘛,这完全不是给人读的。”实际上,它给人读的,前提是您预先了解一些关键信息。

 

规格不是用户手册

圣经写出来不是为了给人读,而是为了给人解的。 

佚名

    如果您想要寻找某个问题的答案,实际上就是在寻找的是一本用户手册,或一篇用户指南;换言之,您想要了解的是该技术的用法。然而,这却并不符合W3C规格的创作意图。所谓“规格”,它意在告知负责实现该技术的程序员,有哪些特性是必须提供的,以及它们应该如何实现。

    这就是您的爱车的用户手册和维修手册之间的差异。用户手册只会告诉您更换雨刷片时的做法。如果您翻开维修手册,上面只会列出雨刷片的详细尺寸,还有将它们彼此连接的部件票意图,您只能利用这样的信息来拼凑出如何更换雨刷片的知识。

    如果您采用的是最新技术,可能还根本没有任何用户参考资料,唯一能找到的就是规格。在这种情况下,学习如何阅读规格就成了必要的工作,而非可有可无了。

 

规格的结构

    正如维修手册中可能会列出一篇指南,来说明各种缩写和图表中采用的图例的意义一样,大多数W3C规格都配有一节来对文档本身进行解释工作。例如,HTMLCSS规格的第一节就都提供了相当详尽的信息,来说明相应规格的组织方式,以及如何阅读。

 

智者必识

我讨厌定义。

Benjamin Disraeli

    维修手册在语言风格上注重精确性,这一点和语调轻松、行文随意的谈话作品相当不同。同样地,W3C规格的语言风格也仿佛日本歌舞伎剧那样一丝不苟。以下是一些您在阅读规格时会常常遇到的字词。

 

规范

    如果您看到“本节是规范性的(normative”,则指出该节的内容会指定实现者应该遵循的细节。而提示性(informative章节则不然,它们通常是一些示例和解释。

 

用户代理

    这个有点儿故弄玄虚的术语,意思其实是指这样的程序:用户需要凭借它才能和某项技术打上交道。对于HTML而言,它的用户代理就是浏览器。对于可缩放矢量图形而言,它的用户代理可能是一个查看器,如Batik;又或是一个插件,如Adobe SVG Viewer

 

RFC

    Request For Comment的缩写,意思是该文档代表某个互联网标准(草案)。

 

助动

    如果某个规格中写道,它遵循RFC2119 ,那么接下来文中出现的特定助动词就会带有正式的对应含义。 必须must)的意义是:某定义是绝对要求的; 绝不must not)的意义是:某定义是绝对禁止的; 应该should)的意义是:某个特性可以实现也可以不实现,但如果不实现的话,最好有个很好的理由; 不应该should not)的意义是:如果确实需要在实现里包括某个特性,则最好有个很好的理由。

 

略读

亲爱的Martha阿姨:谢谢您那本讲大象的书。它告诉我关于大象的知识,比我想知道的还要多。

一个孩子的感谢信

    如果您发现自己在读的文字没有明显的标记,只有大量的冗词,读起来既像法律术语,又像是计算机科学讲座,或两者兼似的话,也许仅仅粗粗看一眼就够了。

 

    像在XSL:FO规格里如下面一节的文字,就是很可以跳过的。(事实上​​,在那篇规格里,第六章之前的内容都不是给用户这个级别的人读的。

4.2.5 堆叠约束

    本节定义了块堆叠约束和涉及领域的内联堆叠约束。它们被定义为有序关系,也就是说,如果AB间存在一个堆叠约束,并不一定意味着……

嘿,略读时间到!

    另一方面,有时您却应该放慢阅读速度。当您看到一张示意图时,请看看它的题注和标注。这些通常都会指向重要信息。当您看到一节中包含有一个或数个示例时,请放慢速度,仔细阅读。

 

命名空间

    在XML的语境下,名字空间是可以让您在同一文档中混合使用不同标记的机制。例如,如果我想把数学标记语言(Math Markup Language)放置到HTML文档里面,就必须在我文档的最顶层元素里加一些额外的声明,我的做法是用ml为前缀来标记数学元素:

<p>Here is Einstein’s famous equation: <ml:math> <ml:mrow> <ml:mi>e</ml:mi> <ml:mo>=</ml:mo> <ml:mi>m</ml:mi> <ml:mi>c</ml:mi> <ml:msup>2</ml:msup> </ml:mrow> </ml:math> with which we <i>all</i> are familiar.</p>

    最好的办法就是照用您在示例文档所见的任何名字空间前缀。在大多数情况下,如果您遇到一大篇讨论,且主题是关于某项XML技术多么有“名字空间感知”,那您应该可以直接跳过这篇讨论也没问题。

 

学习阅读BNF

    BNFBackus Naur FormBackus Normal Form的缩写。它是一种用来表示计算机语言语法的紧凑形式,它实际上无处不在。不同的规格使用不同风格的BNF,但它们的共同之处是都把大段的自然语言描述变换成了符号形式。下面是一个说明了三明治成分的例子:

    三明治由以下成分构成:一块面包下切片,还有芥茉或蛋黄酱;生菜可放可不放;西红柿切片可放可不放;二至四块红肠、腊肠或火腿以任意方式组合的切片;一块或多块芝士切片;还有一块面包上切片。

    其变换形式为:

三明治 ::= 面包下切片 [ 芥茉 | 蛋黄酱 ] 生菜西红柿? [红肠 | 腊肠 | 火腿 ] {2,4} 芝士面包上切片

    定义的各成分按顺序列出,以空格分隔。各项目以方括号分组,组内选择以竖线分隔。

如果项目后面跟着一个问号,意思是“一个或没有”;如果后面跟着一个加号,意思是“一个或多个”;如果后面跟着一个星号,意思是“零个或多个”;如果后面跟着一个里面有数字的花括号,数字就代表着项目允许出现次数的上下限。

    小括号,或更多的方括号,用来给更复杂的定义中的项目分组。有时候,也会用尖括号括起某项目表示这是一个通用项目(如“颜色”),或用引号括起某项目表示这是一个守恒项目。

 

学习阅读文档类型定义

Grolier在线百科全书®Jeopardy智力大挑战游戏®上所有问题和答案的权威来源。

引自某电视游戏提示

    您真的了解吗?那些放入文档中的<!DOCTYPE ...>声明,是告知浏览器正在使用的HTMLXHTML版本用的。这些声明指向一个文档类型定义,简称DTD,它是一个用来定义元素的何种组合为合法的文档。

虽然学习阅读DTD是一项困难的任务,但也不是不可能完成的。而且,这种学习是值得的,因为DTD是判定特定的标记语言是否在语法上具备正确性的最终权威依据。

    要完整地解释如何阅读DTD,这远远超出了本文的范围。欲知详情,请参阅Elizabeth Castro的《XML for the World Wide Web可视化快速入门》(XML for the World Wide Web Visual Quickstart Guide),或Erik RayXML入门》Learning XML)。下面仅举一个您可能会在DTD中看到的简单示例:

<!ENTITY %fontstyle "(tt | i | b)"> <!ENTITY %inline "(#PCDATA | %fontstyle;)"> <!ELEMENT div (p | %inline;)+> <!ATTLIST div align (left | right | center) #IMPLIED>

    下面用自然语言来表述一下以上这段描述是什么意思:

字体样式元素包括<tt><i><b>。内联元素由平凡文本和字体样式元素组成。一个<div>可以以任意顺序包含一个或多个<p>或内联元素。<div>有一个可选的align属性,其值可以是leftrightcenter。

 

忘掉IDL,拥抱绑定

    有一些XML技术,如SVGSMIL,允许用户编写程序来对文档实施动态控制,正如JavaScript允许您控制HTML文档一样。其规格必然含有描述如何脚本来操作文档对象模型(Document Object Model)的章节。这些章节会使用接口定义语言(Interface Definition Language),简称IDL,来给出接口。

    IDL是一种通用记法,它用于描述用户代理如何访问编程环境的各种信息。IDL不是一种编程语言,它只是一种记法,是用来描述这些接口的一种紧凑形式。尽管这种记法信息量大,但它几乎肯定不是您要找的东西。

什么才是您要找的东西呢?这取决于您选择的程序设计语言。您要找的可能是Java绑定(bindings),也可能是ECMAscript绑定。

    绑定是一个故弄玄虚的术语,它其实就是指您使用的脚本所能够使用的一切对象,属性和方法。说到ECMAScript,它是欧洲计算机制造商协会(European Computer Manufacturer's Association)标准版本JavaScript的意思。

    如果您使用的是其他语言,比如PerlPython,那就必须从像Perl综合档案网Comprehensive Perl Archive Network)或Python XML特别兴趣小组Python XML Special Interest Group)这样的地方去寻找相应的库了。

 

小结

1. 建立明确的意识:规格是写给实现者,而非最终用户看的;

2. 许多规格都包含一个专门章节,以说明其组织方式,以及应该如何阅读;

3. 熟知规格专用词汇;

4. 务请记住,您不必阅读逐字阅读规格。学会跳读,集中阅读有意义的部分;

5. 跳过名字空间相关讨论章节;

6. 学习阅读BNF,很多地方都在使用它;

7. 学会阅读DTD,并从中找到语法问题的答案;

8. 如果某项技术涉及可编程脚本,该信息就包含在绑定中。

只要耐心有加、坚持不懈,您一定会为从W3C规格中获取的海量信息而感到惊喜。

 

 

关于作者

         J. David Eisenberg现在居住在加利福尼亚州圣何塞,是一名程序员兼教师,有两只猫,分别叫Marco PoloBig Tony出版过一本关于可伸缩矢量图形的著作。他的兴趣还包括OpenDocument文件格式,以及外语研习

 

本翻译获得A List Apart授权并遵循以下条款:

1. Your publication must be freely available. You may not sell ALA content that you have translated.
2. You must faithfully translate the article as written. Except for minor issues of vernacular, you may not alter the author’s meaning.
3. You must link to the original web page at A List Apart in which the article appeared, and must credit the magazine and the original author[s].
4. You must not reproduce the illustration at the top of the article. Custom illustrations by Kevin Cornell are licensed solely for use on A List Apa.

 

更多W3C及Web相关的技术资料,请参阅 W3C技术资料

评论已关闭

站内搜索

万维网联盟(World Wide Web Consortium, W3C)是Web领域的国际标准化组织,致力开发开放Web标准确保Web的长期发展,实现“尽展Web无限潜能”的使命。

更多内容>>

近期活动

更多内容>>

W3Cx 开放课程

W3C技术标准

查看Web技术标准
- 所有标准
■ Web与产业融合 ■
- 汽车 | 数字出版 | Web与电信
- 娱乐与广播电视 | Web支付 | Web数据
- 物联万维网(WoT) | Web安全
■ Web For All ■
- Web无障碍 | 国际化 | 索引(A to Z)
■ 社区组与商务组 ■
- 所有社区组 | 新建社区组
■ 标准工作组 ■
- 所有标准小组 | 参与指南

更多内容>>

W3C标准翻译

欢迎您加入W3C翻译计划,了解W3C标准和文档翻译情况,帮助提供不同语言的W3C标准规范及文档的志愿者翻译及W3C授权翻译,惠及全球技术社区。

更多内容>>

贡献榜

我们通过贡献榜,感谢您积极参与W3C的标准制定及审阅工作、提供标准及技术文章的中文翻译、参与各类技术研讨会。

更多内容>>

W3C 中文开发者社区

W3C中国目前正在不断加大全球W3C工作的参与力度,并推动了一系列以了解中国行业需求、引导标准制定为主要目的的工作组(WG)、兴趣组(IG)和社区组(CG)。
Web中文兴趣组 | MiniApps工作组 | MiniApps生态社区组 | 弹幕特别任务组 | 中国信息无障碍社区组 | 中文数字出版社区组 | 数据可视化社区组 | 中文文字布局需求特别任务组

更多内容>>

会员链接

相关资源需要使用 W3C账号登录后使用

首页 | 加入工作组 | 申请W3C账号 | 最新会员消息

开发者资源

合作伙伴

  • 北京航空航天大学
  • 北航计算机学院
  • w3ctech