说到NameSpaces我们很快会联想到.Net的命名空间。是的,XML是可扩展的是由开发者定义的,所以相同的标记会有不同的含义。如果将这些标记混合在一起,XmlParser无法去识别他们之间的区别。我们尝试从不同的XML应用读取XML时也会引起混乱。
解决的直接的思路是使用一个前缀。可以在每个标记前面加一个前缀作区分。而当我们使用前缀的时候,我们必须为前缀做一个Namespaces的声明调用。Namespaces是作为一个xmlns的Attribute调用的。语法如下xmlns:prefix="URI"。例子:
为一个元素定义了Namespace则它的所有的子元素都会使用相同的Namespace。因此Namespace可以定义在root元素中。
一般我们使用URL作为NameSpace。但是Parser并不会从中读取任何信息。使用URL只是为了NameSpace的唯一性。当然,人们可以通过URL提供的网址寻找相关的信息。
为了简化前缀,我们可以定义默认的命名空间(Default Namespaces)。语法是:xmlns="namespaceURI"。例子:
一个说明Namespaces的最好例子是XSLT。XSLT是一种XML语言。XSLT用来把XML文件转换成另一种格式,如HTML。下面是一个XSLT文件,你可以看到大部分是HTML标记,而同时有一部分标记使用xsl为前缀的标记。
在XML文档中的所有Text都会被Parser进行分析,除了在CDATA中的文本。
PCDATA:Parsed Character Data,是能够被Parser分析的XML文本数据。
CDATA:(Unparsed)Character Data,是不为Parser所分析的XML文本数据。
在CDATA可以包含一些可能会引起错误的符号。例如如果一个Element包含有“<”和“>”将会引起Parser的错误。因此可以将它包含在CDATA中。CDATA以“<![CDATA[”开始;以“]]>”结束。
下面是一个例子:
注意:
CDATA的文本中不能包含有“]]>”字符串。而结束标记“]]>”符号之间不能包含有空格。
XML文档可以包含非ASCII的字符。例如挪威语、法语之中的符号。这时为了避免错误,应该指定XML文档的编码,并且以Unicode的方式保存XML文档。同时应该在XML文档中使用“encoding”属性予以说明。
<?xml version="1.0" encoding="UTF-16"?>
XML编码错误(Encoding Errors):在加载XML文档的时候,常见的XML编码错误有两种:
“An invalid character was found in text content.”
产生原因:XML文档包括了非ASCII字符,并且文件以单字节(single-byte)ANSI或ASCII方式保存,而且没有在XML中指定编码编码。
“Switch from current encoding to specified encoding not supported”
产生原因1:XML文档以双字节(double-byte)Unicode或UTF-16的方式保存,但是却制定了单字节的编码方式(如Windows-1252, ISO-8859-1, UTF-8等)。
产生原因2:以单字节的ANSI或ASCII的方式保存文档,但却在XML文件中指定编码方式为UTF-16。
Windows记事本: 很多时,我们会用WindowsNotepad编辑XML文档。这里要注意的是: WindowsNotepad默认将文档以单字节ANSI(ASCII)的方式保存。 如果要保存为双字节的Unicode(UTF-16),则要使用“另存为”保存。
为了避免错误,关于XML Encoding的建议是:
和HTML一样XML文件是纯文本。一个标准的Web服务器和以很方便的存储和生成XML文件。所以很多的Web服务器都有提供操作XML的API。具体各种不同的技术是如何实现的,就不能在这里说明了。
详细的DOM学习还是要参考XML DOM指南和手册。这里列出常见的操作。
获取元素的值
获取属性的值
改变元素的值
改变属性的值
创建一个元素
移除一个元素
Internet Explorer XML Data Islands
What is it?
这是一种将XML数据嵌入到HTML页面的技术。
Why avoid it?
因为这时IE的特有技术,其他的Browser不支持。
What to use instead?
应该使用JavaScript和XML DOM在HTML中展示XML数据。
Internet Explorer Behaviors
What is it?
IE5引入了动作的概念(Behaviors)。Behaviors是结合CSS为XML(或HTML)元素添加动作样式的技术。
Why avoid it?
只有IE支持
What to use instead?
同样应该使用JavaScript和XML DOM进行实现。
因为指南已经叫我们避免使用这两种技术,就没必要深入了解他们了。
下面的连接中列出了XML相关的技术。http://www.w3schools.com/xml/xml_technologies.asp
XML News
XMLNews是一种交换新闻和信息的规范。
XML Weather Service
National Oceanic and Atmospheric Administration是其中一个天气服务的例子。
XML是纯文本的,所以使用一般的文本编辑器就可以编辑XML了。但是使用一个专业的XML编辑器,比使用记事本(Notepad)有更多的优点。
为什么不用Notepad?是的大多数的OS都有Notepad。很容易使用它来进行HTML、XML、CSS的编辑。但是请尽量不要使用Notepad,因为Notepad并不知道你在编辑的是HTML、XML或CSS文件,它也无法,不会提供帮助。
为什么使用XML编辑器?专业的XML编辑器可以更好的保证无错的文档。可以根据DTD或Schema,保证XML的有效性(Validate)。我们应该使用提供以下功能的专业XML编辑器:
下一步的学习应该是XML DOM和XSLT。如果你比较关心XML的有效性验证,那么可以学习DTD和Schema。