华恩JAVA班第35天
XML名称空间
XML名称空间表示XML名称的使用范围,因为XML可自定义元素标签,所以有不同XML应用间XML名称重名的机会是很大的。如果没有一种方法来区分不应用的名称,就会造成混乱。XML名称空间就是为了解决这个问题而设计的。通过XML名称空间,我们可以区分来自不同的XML应用的具有相同名称的元素和属性。可以将来自单一XML应用的相关元素和属性集合在一起,方便软件识别和处理。
名称空间由前缀和本地部分组成,中间用冒号分隔。前缀标识元素或属性的所在名称空间,本地部分标识名称空间中的某个元素或属性。整个名称也称为限定名称(qualified name)。前缀可以用除XML(大小写任意组合)三个字母外的任何合法的XML名称字符组成。每个限定名称中的前缀都必须与唯一的一个URI关联。带有相同URI关联的前缀的名称属于同一名称空间。
http://www.w3.org/TR/REC-rdf-syntax#"> http://www.example.com/test.xml"> linuxsir ... 上例rdf:RDF元素的xmlns:rdf属性将前缀rdf绑定到名称空间http://www.w3.org/TR/REC-rdf-syntax#。属性xmlns:rdf为rdf:RDF元素及其子元素声明了前缀rdf。RDF处理器将把rdf:RDF和rdf:Description作为RDF元素,因为两个元素都具有与RDF规范定义的某个URI相绑定的前缀。处理器不会认为title,author等元素为RDF元素,因为它没有绑定到相同URI的rdf前缀。
前缀一般在使用该前缀的最上层元素中定义。在下层元素中也可定义不同的前缀:
http://www.w3.org/TR/REC-rdf-syntax#"> http://www.w3.org/dc/" about="http://www.example.com/test.xml"> example linuxsir ... 不带前缀的属性,如about,不属于任何的名称空间。如xlink:type和xlink:href属性属于xlink名称空间,当然,前提是你要先把xlink绑定到一个URI。URI不必须是一定存在的http链接,它只是一种表示的方法,以区分不同的名称空间。
通过将无前缀的xmlns属性附加到根元素中,可以指定不带前缀的元素及所有不带前缀的子元素属于某个名称空间。
http://www.w3.org/2000/svg"> 这里,虽然所有元素都没有前缀,但它都同属一个名称空间。但属性属不同名称空间,因为默认名称空间只应用于元素。默认名称空间在子元素中也用相同的方法重新设置。
如果名称空间只用来识别来自某种XML应用的元素和属性,而不是用来区分具有相同名称的不同元素,则可在DTD的元素中定义一个固定的xmlns属性,而不需要文档中定义。定义方法如下:
http://www.w3.org/svg/"> 在定义DTD时,需要使用名称空间前缀的在定义时也要把前缀写到DTD定义里,如:
使用参数实体引用来定义名称空间前缀可方便DTD文档的维护,如:
接着,利用该参数实体名称定义更多的参数实体引用,如:
这样,如果需更改前缀,只需修改一个地方就可以了,不用整篇文档修改。
不能在ATTLIST和ELEMENT声明中直接使用%prefix;和%colon;,因为在另一个实体的外部使用这些参数实体时,XML解析器会在实体替换文本的两边添加额外的空格。
XHTML
XHTML是W3C推荐的一种标准,它定义了一种与XML兼容的HTML版本。XHTML文档是一个有效的XML文档,所以编写格式比HTML严格。如果需从HTML文档转换成XHTML文档,需作以下更改:
在XHTML中不允许省略结束标签,所以需补齐缺少的标签。
元素需按正确的顺序嵌套。
所有元素和属性的名称都采用小写。
属性值需添加引号,如
。
所有属性都需有属性值。
采用&和<等的实体形式表示这些字符。
确保文档有单一根元素,最好用html。
像
注释应由的形式改成。
文档编码应采用UTF-8或UTF-16,或者添加XML声明指定文档的编码方式。
需去掉非标准的元素。如:marguee。
添加一个DOCTYPE声明,用PUBLIC来指向XHTML的三种DTD中的一种。分别是Strict、Transitional和Frameset,一般使用Strict。
Strict(严格型),W3C推荐的XHTML形式。不包括一些非标准的元素和属性,如applet和center等。声明方式如下:
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> Transitional(过渡型),一种不太严格的XHTML格式,可使用一些非标准的元素和属性,如applet和bgcolor等。声明方式如下:
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> Frameset(框架型),与过渡型DTD类似,允许使用与框架相关的元素,如frameset和iframe。声明方式如下:
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> 文档的根元素必须具有xmlns属性,标识缺省的名称空间提http://www.w3.org/1999/xhtml。
下面是一个标准的XHTML文档的示例:
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> http://www.w3.org/1999/xhtml">
... 由HTML转到XHTML是一种枯燥而乏味的工作,现在有一种叫tidy的开源工具可帮我们完成大部份的工作,它是一个C程序,使用方法如下:% tidy --output-xhtml yes test.html test.xml XHTML 1.1把XHTML的三种DTD分成独立模块。我们可根据实际情况包含或省去某些模块。这些模块是:
Structure Module(结构模块)--->%xhtml-struct.module;,包含HTML文档主要的元素,如:html、head、title和body。
Text Module(文本模块)--->%xhtml-text.module;,包含文本的基本元素和其内联元素,如:h1、h2、...、strong、span等。
Hypertext Module(超链接模块)--->%xhtml-hypertext.module;,包含用于链接的元素,如:a元素。
List Module(列表模块)--->%xhtml-list.module;,包含用于列表的元素,如:dl、dt、dd、ul、ol和li。
Applet Module(applet模块)--->%xhtml-applet.module;,Java所需要元素,如:applet和param。
Presentation Module(表示模块)--->%xhtml-pres.module;,面向表示的标记:b、big、hr、I、small、sub、sup和tt。
Edit Module(编辑模块)--->%xhtml-edit.module;,用于修正的元素,如:del和ins。
Bidirectional Text Module(文本方向模块)--->%xhtml-bdo.module;,用于指定文本阅读的方向,如bdo元素。
Basic Forms Module(基本表单模块)--->%xhtml-basic-form.module;,用于HTML 3.2的表单元素,如:form、input、select、option和textarea。
Forms Module(表单模块)--->%xhtml-form.module;,用于HTML 4.0的表单元素,如:form、input、select、option、textarea、button、fieldset、label、legend和optgroup。
Basic Tables Module(基本表格模块)--->%xhtml-basic-table.module;,基本的表格元素,如:table、caption、th、tr和td。
Table Module(表格模块)--->%xhtml-table.module;,安全功能的表格支持,如:table、caption、th、tr、td、col、colgroup、tbody、thead和tfoot。
Image Module(图像模块)--->%xhtml-image.module;,包含img元素。
Client-side Image Map Module(客户端图像映像模块)--->%xhtml-csismap.module;,包含map和area元素以及支持客户端图像映像所需要的元素的属性。
Server-side-Image Map Module(服务器端图像映像模块)--->%xhtml-ssismap.module;,该模块没有添加新元素,但对img元素添加了一个ismap属性。
Object Module(对象模块)--->%xhtml-object.module;,用于在网页中嵌入可执行内容,如:java程序。
Param Module(参数模块)--->%xhtml-param.module;,网页中可执行内容中传递参数的param元素。
Frames Module(框架模块)--->%xhtml-frames.module;,包含实现框架所需的元素,如:frame、frameset和noframes。
Iframe Module(内联框架模块)--->%xhtml-iframe.module;,包含内联框架的iframe元素。
Intrinsic Events(固有事件模块)--->%xhtml-events.module;,支持如onSubmit和onFocus等脚本的属性。
Meta-information Module(元信息模块)--->%xhtml-meta.module;,包含meta元素。
Scripting Module(脚本模块)--->%xhtml-script.module;,支持JavaScript等脚本。
Stylesheet Module(样式表模块)--->%xhtml-style.module;,用于定义CSS的style元素。
Link Module(链接模块)--->%xhtml-link.module;,指定外部文件,如样式表、库等关系的link元素。
Base Modue(基模块)--->%xhtml-base.module;,包含base元素,指定解析相对URL所参照的基URL。
Target Module(目标模块)--->%xhtml-target.module;,用于指定目标框架或框架中某个窗口的target属性。
Style Attribute Module(样式属性模块)--->%xhtml-inlstyle.module;,将CSS样式应用于文档中单个元素的style属性。
Name Identification Module(名称标识模块)--->%xhtml-nameident.module;,name属性是id属性的早期版本,现在不推荐使用。
Legacy Module(传统模块)--->%xhtml-legacy.module;,不推荐使用的元素和属性,如:basefont、center、fonts、strike和u元素。
Ruby Module(Ruby模块)--->%xhtml-ruby.module;,东亚文本中用于将少量文本放于正文文本旁边的ruby、rbc、rtc、rb、rt和rp元素,一般用来指示发音。
更多信息可以参见同学富晓磊的博客:http://blog.sina.com.cn/u/1798827371