W3C中国

» 如何阅读W3C规范(王晓轩翻译版)

 

J.David Eisenberg2001928 

发布在CSSHTML栏目

王晓轩 翻译

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

 

    万维网联盟(World Wide Web ConsortiumW3C)是所有Web技术标准的所有者。作为一名Web设计师,你也许为了搜寻关于XHTML问题的解决方案,或为了进一步了解如XSL FormattingScalable Vector Graphics这样的新技术,访问过他们的网站(w3.org,中文网站 www.chinaw3c.org)。

    如果你读了规范,差不多立刻就会打退堂鼓。“这个”,你心理话说,“完全不知所云。”实际上,如果你掌握了其中法门的话,就会豁然开朗。

 

规范不是用户手册

圣经不是用来读的,而是用来解释的

—无名氏

 

    当你寻找答案的时候,你会查找用户手册或用户参考指南;因为你是真正要使用这项技术。但这不是W3C规范的目的。一项“规范“的目的是要告诉要实施这项技术的程序员此项技术所具备的功能,以及如何去使用它们。

    正如车主手册与维修手册之间存在着差别。车主手册会告诉你如何更换雨刷器。如果你看过维修手册的话,还会告诉你雨刷器的尺寸以及显示与其相关的零部件;你需要用到的是这样信息才能知道如何将零部件组装在一起。

    如果你正使用的是最新的技术,可能根本没有任何用户参考材料可用;唯一能找到的文档就是规范。在这样的情况下,学习阅读规范是必须的,而非值得炫耀的事。

 

规范的结构

    正如维修手册会有一份缩略语和对图形中用到的图例指南一样,大多数的W3C规范也会有一节用于解释文档本身。例如HTMLCSS规范的第一节,就各个章节之间的关系以及如何阅读规范提供了详细的说明。

 

约定俗成(Words for the Wise 

我讨厌定义

Benjamin Disraeli

 

    需要记住的是,读者所读的维修手册中使用的是明确的而非模糊或非正式的语言。类似的是,W3C规范所用到的遣词造句就像日本歌舞伎剧目中所规定的仪式化形式一样严谨。下面的一些词是你在阅读一份规范时会遇到的。

 

规范的(normative

    “此节是规范的”,这句话意味着你将要读到的细节是要求实施者严格遵守的。另一方面,信息量大的章节,通常会包含几个例子和讲解。 

用户代理(user agent

    这个词指的是用户用来访问某项技术的程序。对于HTML来说,会是浏览器。对于Scalable Vector GraphicsSVG),可能会是如Batik一类的查看程序或是如Adobes SVG viewer一类的插件。

RFC

    Request For Comment,指的是一份收录了互联网标准的文档。

助动词

    如果一份规范称其遵守了RFC2119,接下来会用一些助动词具体说明正式的意思。必须(must意味着某项定义是必要条件;不可以(must not意味着某项定义是被绝对禁止的;应该(should意味着某项功能可以也可以不被执行,但是你最后有一个充分的理由说明为何不执行;不应该(should not意味着你最好为要用到某项功能准备了充分的解释。

 

略读(Skim

亲爱的玛莎姑姑:谢谢你有关大象的书,从中我学到了比我想要知道的还要多的知识。

 

—一个孩子的感谢信

 

    你不必逐字阅读规范。如果你发现自己所读到的文字没有任何说明的话,周围却充斥着听起来如法律名词、计算机术语或两者兼而有之的冗长词汇时,略读也许是必要的。

    下面XSL:FO规范中的某些章节内容就是完全可以跳过的。(实际上,在这份规范中,作为一名使用者需要的内容最早会出现在第六章。)

 

    4.2.5 堆栈约束

        此节定义了块堆栈约束和内联堆栈约束所包含的区域。这些都被以顺序关系所定义,如:如果AB具     有某种堆栈约束,那不必意味着……

 

        好吧,还要再都读下去吗?!

 

    然而有些时候你需要慢下来。如果你看到图的话,注意一下标签和/或编号。它们通常用于标识重要的信息。当你读到带有一个或多个例子的章节时,请慢慢地地仔细阅读。

 

命名空间(Namespaces

    在XML的世界中,名字空间是一种可以让你混合不同标记在同一文档中的机制。举例来说,如果我打算把Math Markup Language嵌入在HTML文档中,我需要在文档的最顶层元素中加入一些额外的声明,然后通过在数学元素前加上ml的前缀标记来标记它们:

    下面是爱因斯坦著名的公式:

        E=MC2

    使用了名字空间后就会一目了然了

 

    你的最佳做法就是遵守在同样文档中所看到的任何名字空间前缀。在大多数情况下,如果你遇到了关于XML技术是“名字空间敏感”的冗长讨论的话,可以放心地无视。

 

学习阅读BNF

       BNF意为“巴科斯-诺尔范式”(Backus Naur FormBackus Normal Form)。这是一种通过简洁的符号集描述计算机语言的语法的方式,它的广泛使用至少目前还没有出其右者。不同的规范使用不同的BNF变种,但是它们都将长长的英语描述转换为符号形式。以下面这个三明治配料为例:

 A sandwich consists of a lower slice of bread, mustard or mayonnaise; optional lettuce, an optional slice of tomato; two to four slices of either bologna, salami, or ham (in any combination); one or more slices of cheese, and a top slice of bread.

    会转化为:

sandwich ::=    lower_slice     [ mustard | mayonnaise ]    lettuce? tomato?    [ bologna | salami | ham ] {2,4}    cheese+    top_slice 

 

    一个定义的组成部分是按照次序列出来的,并以空格相隔开。具体的内容项(item括以用方括号包围;一组中的选项用竖线相隔开。

         如果一个内容项后面有一个问号,那意味着“一个或什么也没有;”如果后面跟着一个加号,那意味着“一个或更多;”如果后面是一个星号,则意味着“零或更多;”如果后面跟着的是花括号中的数字,其限定了一个内容项所出现的下限和上限次数。

         圆括号,或更多的方括号被用来将内容项组合成更复杂的定义。有时候一个类属项(如“color”)使用尖括号(<>),或对固定的内容项使用引号。

 

学习阅读文档类型定义

 Grolier百科全书》是“危险边缘”节目中所出现问题和答案的权威出处。

TV游戏展上对其的赞誉

 

    你知道那些放在文档中的声明,是要告诉浏览器你正在使用的是哪个版本的HTMLXHTML吗?那些声明指的是文档类型定义(Document Type DefinitionDTD),它们决定了文档中元素的何种组合方式是合乎规定的。

         然而学习阅读DTD并不是一件轻松的事,但也不是一件不可能的任务。对其的学习是值得的,因为DTD是判定某种标记语言在语法构成上是否正确的终极权威。

         对如何阅读DTD的全面讲解已超出了本文的范围,但是你可以在Elizabeth Castro的《XML for the World Wide Web Visual Quickstart Guide》或Erik Ray的《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。


IDLE PAST IDL, BE BOUND BY BINDINGs

    一些XML技术,如SVG和SMIL,允许用户编辑程序从而动态地控制文档,这与使用JavaScript可以让你控制HTML文档差不多。它们的规范中各个章节描述了脚本是如何使用文档对象模型(Document Object Model)的。这些章节还会说明在接口定义语言(Interface Definition Language,IDL)中的各种接口。

    IDL是一种通用标记,用于描述用户代理访问到某种编程环境的信息种类。IDL并非某种编程语言;而是以一种简洁的方式描述这些接口的标记符号。尽管其提供的信息量丰富,但IDL接口定义并非你所需要的。

    你需要的取决于你所选择的编程语言,可能是与Java绑定的或是与ECMAScript绑定的。

    绑定(Bindings)对于在你的脚本中可以使用的一系列对象,属性和方法来说是个时髦的词。ECMAScript是欧洲计算机制造商协会(European Computer Manufacturer’s Association)对JavaScript的标准化版本。如果你正在使用其它的语言,如Perl或Python,你需要从“Perl综合档案网” (Comprehensive Perl Archive Network)或“Python XML特别兴趣组”(Python XML Special Interest Group)这样的地方寻找相应的库文件。

 

总结

1. 要知道W3C规范是写给实施者而非最终用户的。

2. 许多规范中有一节用来讲它们的内容概况以及应该如何阅读。

3. 熟悉规范所使用的词汇。

4. 记住,你不必阅读逐字逐句地阅读。可以直接跳到需要用到的部分。

5. 避免在名字空间上的喋喋不休的争论。

6. 学习阅读DTD,可为语法问题找到答案。

7. 如果一项技术是脚本化的,其信息就在绑定的语言中。

 

耐心地坚持下去,你会对自己从W3C规范中所汲取的信息量而感到吃惊。

 

关于作者

 

J. David Eisenberg

他是一个程序员兼教师,和他的两头猫Marco Polo以及Big Tony现居住在加州的圣何塞。他著有一本关于Scalable Vector Graphics的书。他还对OpenDocument Format和外语学习感兴趣。

 

本翻译获得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