MENU

XML相关知识(三)

December 18, 2018 • 编程开发

XML 命名空间(XML Namespaces)

XML 命名空间提供避免元素命名冲突的方法。

1. 命名冲突

在 XML 中,元素名称是由开发者定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突。

2. 使用前缀来避免命名冲突

此文档带有某个表格中的信息:

<h:table>
   <h:tr>
   <h:td>Apples</h:td>
   <h:td>Bananas</h:td>
   </h:tr>
</h:table>

此 XML 文档携带着有关一件家具的信息:

<f:table>
   <f:name>African Coffee Table</f:name>
   <f:width>80</f:width>
   <f:length>120</f:length>
</f:table>

现在,命名冲突不存在了,这是由于两个文档都使用了不同的名称来命名它们的 <table> 元素 (<h:table> 和 <f:table>)。

通过使用前缀,我们创建了两种不同类型的 <table> 元素。

3. 使用命名空间(Namespaces)

注意观察如下两个XML的不同:

<h:table xmlns:h="http://www.w3.org/TR/html4/">
   <h:tr>
   <h:td>Apples</h:td>
   <h:td>Bananas</h:td>
   </h:tr>
</h:table>

<f:table xmlns:f="http://www.w3school.com.cn/furniture">
   <f:name>African Coffee Table</f:name>
   <f:width>80</f:width>
   <f:length>120</f:length>
</f:table>

与仅仅使用前缀不同,我们为 <table> 标签添加了一个 xmlns 属性,这样就为前缀赋予了一个与某个命名空间相关联的限定名称。

4. XML Namespace (xmlns) 属性

XML 命名空间属性被放置于元素的开始标签之中,并使用以下的语法:

xmlns:namespace-prefix="namespaceURI"

当命名空间被定义在元素的开始标签中时,所有带有相同前缀的子元素都会与同一个命名空间相关联。

注释:用于标示命名空间的地址不会被解析器用于查找信息。其惟一的作用是赋予命名空间一个惟一的名称。不过,很多公司常常会作为指针来使用命名空间指向实际存在的网页,这个网页包含关于命名空间的信息。

5. 默认的命名空间(Default Namespaces)

为元素定义默认的命名空间可以让我们省去在所有的子元素中使用前缀的工作。

请使用下面的语法:xmlns="namespaceURI"

6. 命名空间的实际应用

当开始使用 XSL 时,您不久就会看到实际使用中的命名空间。XSL 样式表用于将 XML 文档转换为其他格式,比如 HTML。

如果您仔细观察下面的这个 XSL 文档,就会看到大多数的标签是HTML标签。非 HTML 的标签都有前缀 xsl,并由此命名空间标示:"http://www.w3.org/1999/XSL/Transform":

<?xml version="1.0" encoding="ISO-8859-1"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<html>
<body>
  <h2>My CD Collection</h2>
  <table border="1">
    <tr>
      <th align="left">Title</th>
      <th align="left">Artist</th>
    </tr>
    <xsl:for-each select="catalog/cd">
    <tr>
      <td><xsl:value-of select="title"/></td>
      <td><xsl:value-of select="artist"/></td>
    </tr>
    </xsl:for-each>
  </table>
</body>
</html>
</xsl:template>

</xsl:stylesheet>

XML CDATA

所有 XML 文档中的文本均会被解析器解析。只有 CDATA 区段(CDATA section)中的文本会被解析器忽略。

1. PCDATA

PCDATA 指的是被解析的字符数据(Parsed Character Data)。

XML 解析器通常会解析 XML 文档中所有的文本。当某个 XML 元素被解析时,其标签之间的文本也会被解析:

<message>此文本也会被解析</message>

解析器之所以这么做是因为 XML 元素可包含其他元素,就像这个例子中,其中的 <name> 元素包含着另外的两个元素(first 和 last):

<name><first>Bill</first><last>Gates</last></name>

而解析器会把它分解为像这样的子元素:

<name>
   <first>Bill</first>
   <last>Gates</last>
</name>

2. 转义字符

非法的 XML 字符必须被替换为实体引用(entity reference)。
假如您在 XML 文档中放置了一个类似 "<" 字符,那么这个文档会产生一个错误,这是因为解析器会把它解释为新元素的开始。

为了避免此类错误,需要把字符 "<" 替换为实体引用,就像这样:

<message>if salary &lt; 1000 then</message>

在 XML 中有 5 个预定义的实体引用:

实体符号含义
&lt;<小于
&gt;>大于
&amp;&和号
&apos;'省略号
&quot;"引号

注释:严格地讲,在 XML 中仅有字符 "<"和"&" 是非法的。省略号、引号和大于号是合法的,但是把它们替换为实体引用是个好的习惯。

3. CDATA

术语 CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data)。

在 XML 元素中,"<" 和 "&" 是非法的。"<" 会产生错误,因为解析器会把该字符解释为新元素的开始。"&" 也会产生错误,因为解析器会把该字符解释为字符实体的开始。

某些文本,比如 JavaScript 代码,包含大量 "<" 或 "&" 字符。为了避免错误,可以将脚本代码定义为 CDATA。

CDATA 部分中的所有内容都会被解析器忽略。

CDATA 部分格式: <![CDATA[ ]]>

<script>
<![CDATA[
function matchwo(a,b){
    if (a < b && a < 0) then{
      return 1;
    } else  {
      return 0;
    }
}
]]>
</script>

在上面的例子中,解析器会忽略 CDATA 部分中的所有内容。

CDATA 部分不能包含字符串 "]]>"。也不允许嵌套的 CDATA 部分。标记 CDATA 部分结尾的 "]]>" 不能包含空格或折行。

XML 编码

XML 文档可以包含非 ASCII 字符,比如法语。为了避免错误,需要规定 XML 编码,或者将 XML 文档存为 Unicode。

编码属性应当被指定为文档被保存时所使用的编码。

服务器上的 XML

XML 文件是类似 HTML 文件的纯文本文件。能够通过标准的 web 服务器轻松地存储和生成 XML。

XML 文件在 Internet 服务器上进行存储的方式与 HTML 文件完全相同。

通过 PHP 生成 XML

如需使用 PHP 在服务器上生成 XML 响应,请使用下面的代码:

<?php
header("Content-type:text/xml");
echo "<?xml version='1.0' encoding='ISO-8859-1'?>";
echo "<note>";
echo "<from>John</from>";
echo "<to>George</to>";
echo "<message>Don't forget the meeting!</message>";
echo "</note>";
?>

请注意,响应头部的内容类型必须设置为 "text/xml"。

XML 的相关技术

下面是一个与 XML 相关的技术的列表。

  • XHTML
    更严格更纯净的基于 XML 的 HTML 版本。
  • XML DOM
    访问和操作 XML 的标准文档模型。
  • XSLT
    XSL 包含三个部分:

    • XSLT - 把 XML 转换为其他格式,比如 HTML
    • XSL-FO - 用于格式化 XML 文档的语言
    • XPah - 用于在 XML 文档中导航的语言
  • XQuery
    基于 XML 的用于查询 XML 数据的语言。
  • DTD
    用于定义 XML 文档中的合法元素的标准
  • XSD XML Schema
    基于 XML 的 DTD 替代物。
  • XLink
    在 XML 文档中创建超级链接的语言。
  • XPointer
    允许 XLink 超级链接指向 XML 文档中更多具体的部分。
  • XForms
    使用 XML 定义表单数据。
  • SOAP
    允许应用程序在 HTTP 之上交换信息的基于 XML 的协议。
  • WSDL
    用于描述网络服务的基于 XML 的语言。
  • RDF
    用于描述网络资源的基于 XML 的语言。
  • RSS
    聚合新闻以及类新闻站点内容的格式。
  • WAP
    用于在无线设备上(比如移动电话)显示内容的一种基于 XML 的语言。
  • SMIL
    描述视听呈现的语言。
  • SVG
    使用 XML 格式定义图形。
Tags: XML
Archives QR Code
QR Code for this page
Tipping QR Code