XML 概述
可扩展标记语言 (XML) 是一种用于定义一组标记(称为标记)的语言,这些 标记应用于数据集或文档,用于描述各个元素的功能并编码它们之间的分层关系。XML 标记看起来很像超文本标记语言 (HTML) 标记,但 XML 实际上是一个金属组织,用于定义最适合所标记数据的标记类型。
有关 XML 的详细信息,请参阅 http://www.xml.com/pub/a/98/10/guide0.html XML 技术简介和 http://www.xml.com 站点上的附加参考材料。万维网联盟 (W3C) 的官方 XML 规范(可扩展标记语言 (XML) 1.0 http://www.w3.org/TR/REC-xml。
以下部分讨论 XML 的常规方面:
标记元素
XML 有三种类型的标记:打开标记、结束标记和空标记。XML 标记名称括在尖括号中,区分大小写。兼容 XML 的文档或数据集中的项目始终包含在配对的开始和结束标记中,并且标记必须正确嵌套。也就是说,您必须按照打开标记的顺序关闭标记。在这方面,XML 比 HTML 更严格,HTML 有时仅使用开放标记。以下示例显示了用一个值括起来的配对的开始标记和结束标记。结束标记由标记名称开始时的正斜杠表示。
<interface-state>enabled</interface-state> <input-bytes>25378</input-bytes>
标记 元素 一词是指三部分集:打开标记、内容和结束标记。内容可以是上述示例中的字母数字字符串,也可以本身是 容器 标记元素,其中包含其他标记元素。为简单起见, 标记 一词通常与 标记元素 或 元素互换使用。
如果标记元素为 空(没有内容),则可以表示为无内容配对的开始和结束标记,也可以表示为标记名称后带有正斜杠的单个标记。例如,符号 <snmp-trap-flag/>
等同于 <snmp-trap-flag></snmp-trap-flag>
。
如前面的示例所示,括号将标记元素的名称括起来。这是一个 XML 约定,括号是完整标记元素名称的必需部分。它们不应与用于表示 Junos OS CLI 命令字符串可选部分的瞻博网络文档中使用的尖括号混淆。
Junos XML 标记元素遵循 XML 约定,即标记元素名称表示标记附带的信息类型。例如,Junos XML <interface-state>
标记元素的名称表示它包含设备上接口的当前状态的描述,而标记元素的名称<input-bytes>
则表示其内容指定接收的字节数。
在讨论文本中的标记元素时,本文档通常仅使用打开标记来表示完整的标记元素(打开标记、内容和结束标记)。例如,文档指的是用于 <input-bytes>
指示整个 <input-bytes>number-of-bytes</input-bytes>
标记元素的标记。
属性
XML 元素可以属性的形式包含关联 属性,用于指定有关元素的附加信息。属性显示在元素的开始标记中,由属性名称和值对组成。属性语法由属性名称后跟等号组成,然后是用引号括起来的属性值。一个 XML 元素可以有多个属性。多个属性由空格分隔,可以按任意顺序出现。
在以下示例中,该 configuration
元素有两个属性, junos:changed-seconds
和 junos:changed-localtime
。
<configuration junos:changed-seconds="1279908006" junos:changed-localtime="2010-07-23 11:00:06 PDT">
属性的 junos:changed-seconds
值为“1279908006”,而属性的值 junos:changed-localtime
为“2010-07-23 11:00:06 PDT”。
命名 空间
命名空间 允许 XML 文档包含相同的标记、属性或函数名称,以用于不同目的,并避免名称冲突。例如,许多命名空间可以定义一个 print
功能,并且每个名称空间都可能表现出不同的功能。要使用在一个特定命名空间中定义的功能,必须将该函数与定义所需功能的命名空间相关联。
要引用已定义的命名空间中的标记、属性或函数,必须先在样式表声明中提供命名空间 统一资源标识符 (URI)。然后,您可以使用 URI 来验证命名空间中的标记、属性或函数。由于 URI 通常冗长,因此通常会将较短的前缀映射到 URI。
在以下示例中,前缀 jcs
映射到由 URI http://xml.juniper.net/junos/commit-scripts/1.0
标识的命名空间,URI 定义在提交、操作、事件和 SNMP 脚本中使用的扩展功能。然后,将 jcs
前缀前置到 output
该命名空间中定义的函数中。
<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:jcs="http://xml.juniper.net/junos/commit-scripts/1.0"> ... <xsl:value-of select="jcs:output('The VPN is up.')"/> </xsl: stylesheet>
在处理期间,前缀会扩展到 URI 参考中。虽然定义元素或函数的命名空间可能有多个, output
但使用“ jcs:output
定义”显式定义使用哪个 output
函数。您可以选择任何前缀来引用命名空间中的内容,但 XML 文档中必须有一个现有声明,用于将前缀绑定到关联的 URI。
文档类型定义
XML 标记的文档或数据集是 结构化的,因为一组规则指定其中项目的排序和相互关系。规则定义了每个标记项都可以(在某些情况下必须)发生的上下文。称为 文档类型定义( DTD)的文件会列出文档或数据集中可能出现的每个标记元素,定义标记之间的父子关系,并指定其他标记特征。同一 DTD 可以应用于许多 XML 文档或数据集。