9.13. 实例标识符内置类型

实例标识内置类型用于唯一标识数据树中的特定实例节点。

实例标识符的语法是XPath缩写语法的子集,由第14节中的“instance-identifier”规则正式定义。它用于唯一标识数据树中的节点。谓词仅用于指定列表项的关键节点的值,叶列表项的值或不包含键的列表的位置索引。为了用键标识列表条目,每个谓词由每个键的一个相等性测试组成,每个键必须有一个相应的谓词。如果某个键的类型为“empty”,则表示为零长度字符串(“”)。

如果具有实例标识符类型的叶代表配置数据,并且“require-instance”属性(第9.9.3节)为“true”,则它引用的节点也必须表示配置。这样的一个页面对有效数据进行约束。所有这样的叶子节点必须引用现有的节点或叶节点或叶节点节点,使用它们的默认值(见7.6.1节7.7.2节)以使数据有效。这个约束是根据第8节中的规则执行的。

除了第6.4.1节中的定义之外,“instance-identifier”XPath表达式在以下上下文中概念性地被评估:

  • 上下文节点是可访问树中的根节点。

9.13.1. 限制

实例标识符可以用“require-instance”语句来限制(见第9.9.3节)。

9.13.2. 词汇表示

实例标识符值从词法上表示为一个字符串。 实例标识符值中的所有节点名必须使用明确的名称空间前缀限定,这些前缀必须在实例标识符的XML元素中的XML名称空间范围内声明。

编码中使用的任何前缀对于每个实例编码都是本地的。 这意味着相同的实例标识符可以通过不同的实现被不同地编码。

9.13.3. 规范形式

由于词法形式依赖于值出现的XML上下文,所以这种类型不具有规范形式。

9.13.4. 使用示例

以下是实例标识符的示例:

  1. /* instance-identifier for a container */
  2. /ex:system/ex:services/ex:ssh
  3. /* instance-identifier for a leaf */
  4. /ex:system/ex:services/ex:ssh/ex:port
  5. /* instance-identifier for a list entry */
  6. /ex:system/ex:user[ex:name='fred']
  7. /* instance-identifier for a leaf in a list entry */
  8. /ex:system/ex:user[ex:name='fred']/ex:type
  9. /* instance-identifier for a list entry with two keys */
  10. /ex:system/ex:server[ex:ip='192.0.2.1'][ex:port='80']
  11. /* instance-identifier for a list entry where the second
  12. key ("enabled") is of type "empty" */
  13. /ex:system/ex:service[ex:name='foo'][ex:enabled='']
  14. /* instance-identifier for a leaf-list entry */
  15. /ex:system/ex:services/ex:ssh/ex:cipher[.='blowfish-cbc']
  16. /* instance-identifier for a list entry without keys */
  17. /ex:stats/ex:port[3]