XML 和 Junos XML 管理协议约定概述
客户端应用程序必须遵守 XML 和 Junos XML 管理协议约定。来自客户端应用的每个请求都必须是 格式正确的 XML 文档;也就是说,它必须遵守在 Junos XML 协议和 Junos XML 文档类型定义 (DTD) 中定义的结构规则,才能在请求中编码的信息类型。客户端应用程序必须按所需顺序且仅在法律环境中发出标记元素。如果 Junos OS 或 Junos XML 协议发生变化,合规的应用程序更易于维护。
同样,来自 Junos XML 协议服务器的每个响应都会构成一个格式正确的 XML 文档(Junos XML 协议服务器遵循 XML 和 Junos XML 管理协议约定)。
以下部分介绍了 Junos XML 管理协议约定:
请求和响应标记元素
请求标记元素是由客户端应用程序生成的一个元素,用于请求有关设备当前状态或配置的信息,或者用于更改配置。请求标记元素与 CLI 操作或配置命令对应。它只能在标记<rpc>
中发生。有关该元素的信息<rpc>
,请参阅向 Junos XML 协议服务器发送请求。
响应标记元素表示 Junos XML 协议服务器对请求标记元素的回复,并且仅在标记中<rpc-reply>
出现。有关<rpc-reply>
元素的信息,请参阅解析 Junos XML 协议服务器响应。
以下示例表示一个交换,其中,客户端应用程序发出 <get-interface-information>
带有 <extensive/>
标志的请求标记,而 Junos XML 协议服务器返回 <interface-information>
响应元素。

与本指南中的所有其他示例一样,此示例在客户端应用程序和 Junos XML 协议服务器发出的标记流中,将每个标记元素分别显示在一行中。实际上,客户端应用程序不需要在标记元素之间包括新行字符,因为服务器会自动丢弃此类空格。有关进一步讨论,请参阅 空格、新行字符和其他空格。
有关打开rpc-reply
标记中属性的信息,请参阅分析 Junos XML 协议服务器响应。有关打开标记中属性的信息,请参阅使用 Junos XML 协议请求操作信息。<interface-information>
xmlns
Request 标记元素的子标记元素
某些请求标记元素包含子标记元素。对于配置请求,每个子标记元素表示一个配置元素(层次结构级别或配置对象)。对于操作请求,每个子标记元素表示在发出等效 CLI 命令时在命令行上提供的一个选项。
某些请求具有必需的子标记元素。要成功发出请求,客户端应用程序必须在请求标记元素的开始和结束标记中发出必需的标记元素。如果任何子级本身都是容器标记元素,则每个子项的打开标记必须先于它包含的任何标记元素,而结束标记必须发生在其他标记元素的层级的打开标记之前。
在大多数情况下,客户端应用程序可以按任意顺序在容器标记元素内发出同一级别的子事件。重要的例外是具有 标识符标记元素的配置元素,用于将配置元素与其类型中的其他元素区分开来。标识符标记元素必须是容器标记元素中的第一个子标记元素。通常,标识符标记元素会指定配置元素的名称,称为 <name>
。
响应标记元素的子标记元素
响应标记元素的子标记元素表示 Junos XML 协议服务器为特定请求返回的各个数据项。子元素可以是单个标记元素(空标记或标记元素三元组),也可以是容器标记元素,用于将自己的子标记元素括起来。对于某些容器标记元素,Junos XML 协议服务器会按字母顺序返回子项。对于其他 元素,子元素会按在配置中的 创建顺序显示。
在响应中或容器标记元素中可能发生的子标记元素集,在更高版本的 Junos XML API 中可能会发生变化。客户端应用程序不得依赖于 Junos XML 协议服务器输出中是否存在特定标记元素,也不得依赖于响应标记元素中子标记元素的排序。要实现最稳健的操作,可以在客户端应用程序中包括逻辑,以尽可能平滑地处理预期标记元素的缺失或出现意外标记元素的情况。
空格、新行字符和其他空格
按照 XML 规范的规定,Junos XML 协议服务器会忽略在客户端应用程序生成的标记流中的标记元素之间出现的空格(空格、制表符、新行字符和其他表示空格的字符)。客户端应用程序可以在标记元素之间包括空格,但不需要。但是,它们不得在开头或结束标记中插入空格。如果标记元素的内容中包含空格,将其作为对候选配置的更改提交,Junos XML 协议服务器将保留配置数据库中的空格。
在响应中,Junos XML 协议服务器在标记元素之间包括空格,以提高保存在文件中的响应的可读性:它使用换行符将每个标记元素放在自己的行上,并使用空格将其子标记元素向右缩进,与父元素相比。客户端应用程序可以忽略或丢弃空格,尤其是当它不存储响应供人类用户日后查看时。但是,解析标记流时,不能依赖于任何特定位置是否有空格。
有关 XML 文档中的空白的详细信息,请参阅来自万维网联盟 (W3C) 的 XML 规范, 可扩展标记语言 (XML) 1.0, http://www.w3.org/TR/REC-xml/ 。
XML 注释
客户端应用程序和 Junos XML 协议服务器可以在它们生成的标记流中的标记元素之间的任何点插入 XML 注释,但不能在标记元素中插入 XML 注释。客户端应用程序必须正常处理 Junos XML 协议服务器输出中的注释,但不能依赖于其内容。客户端应用程序也不能使用注释将信息传送到 Junos XML 协议服务器,因为服务器会自动丢弃它收到的任何注释。
XML 注释包含在字符串 <!--
中, -->
不能包含字符串 - -
(两个连字符)。有关注释的详细信息,请参阅 http://www.w3.org/TR/REC-xml/ 中的 XML 规格。
以下是 XML 注释的示例:
<!-- This is a comment. Please ignore it. -->
XML 处理指令
XML 处理指令 (PI) 包含与特定协议相关的信息,形式如下:
<?PI-name attributes?>
Junos XML 协议会话期间发出的某些 API 包括客户端应用程序需要正确操作的信息。一个突出的例子是该 <?xml?>
元素,客户端应用程序和 Junos XML 协议服务器在每个 Junos XML 协议会话开始时都会发出该元素,以指定它们使用的 XML 版本和字符编码方案。有关更多信息,请参阅 启动 Junos XML 协议会话。
Junos XML 协议服务器还可以发出客户端应用程序不需要解释的 API(例如,用于 CLI 的 API)。如果客户端应用不了解 PI,则必须将 PI 视为注释,而不是退出或生成错误消息。
预定义实体参考
根据 XML 约定,有两种上下文中某些字符不能以常规形式出现:
在开始标记和结束标记之间显示的字符串中(标记元素的内容)
在分配给打开标记属性的字符串值中
当在任一上下文中包含不允许的字符时,客户端应用程序必须替换等效 的预定义实体引用,该引用是表示不允许字符的字符串。由于 Junos XML 协议服务器在其响应标记元素中使用相同的预定义实体引用,因此在处理响应标记元素时,客户端应用程序必须能够将其转换为实际字符。
表 1 汇总了标记元素的开始标记和结束标记之间出现的不允许字符与预定义实体引用之间的映射。
不允许字符 |
预定义实体参考 |
---|---|
|
|
|
|
|
|
表 2 汇总了不允许的字符与属性值预定义实体引用之间的映射。
不允许字符 |
预定义实体参考 |
---|---|
|
|
|
|
|
|
|
|
|
|
例如,假设以下字符串是元素中包含的 <condition>
值:
if (a<b && b>c) return "Peer’s not responding"
元素 <condition>
如下所示(仅为了可读性 而出现在两行上):
<condition>if (a<b && b>c) return "Peer’s not \ responding"</condition>
同样,如果元素heading
属性的值<example>
为Peer’s "age" <> 40
,则开始标记如下所示:
<example heading="Peer's "age" <> 40">