6.4.1. XPath
上下文
所有YANG
XPath
表达式共享以下XPath
上下文定义:
命名空间声明的集合是指定了
XPath
表达式的模块中的所有“import
”语句的前缀和名称空间对的集合,以及“namespace
”语句的URI
的“prefix
”语句的前缀。没有名称空间前缀的名称与当前节点的标识符属于同一个名称空间。在一个分组中,这个名字空间受到分组的使用位置的影响(见第7.13节)。在
typedef
中,该名称空间受到引用typedef
的位置的影响。如果在分组中定义并引用typedef
,则命名空间将受到分组使用位置的影响(请参见第7.13节)。变量绑定的集合是空的。
XPath 2.0
[XPATH2.0]采用了处理前缀名的机制,有助于简化YANG
中的XPath
表达式。由于YANG
节点标识符总是具有非空名称空间URI
的限定名称,所以不会出现任何歧义。
可访问树取决于具有
XPath
表达式的语句的定义位置:如果
XPath
表达式在子状态中定义为表示配置的数据节点,则可访问树是上下文节点所在数据存储区中的数据。根节点将所有模块中的所有顶级配置数据节点作为子节点。如果在子状态中将
XPath
表达式定义为表示状态数据的数据节点,则可访问树是服务器中的所有状态数据,以及正在运行的配置数据存储区。根节点将所有模块中的所有顶级数据节点都作为子节点。如果
XPath
表达式在子语句中定义为“notification
”语句,则可访问树是通知实例,服务器中的所有状态数据以及正在运行的配置数据存储区。如果在模块顶层定义通知,则根节点将表示通知的节点定义为所有模块中的顶级数据节点,并将其作为子节点。否则,根节点将所有模块中的所有顶级数据节点都视为子节点。如果
XPath
表达式在子语句中定义为“rpc
”或“action
”语句中的“input
”语句,则可访问的树是RPC
或操作操作(action
)实例,服务器中的所有状态数据以及正在运行的配置数据存储区。根节点在所有模块中都有作为子节点的顶级数据节点。此外,对于RPC
,根节点也具有代表RPC
操作的节点被定义为子节点。表示正在定义的操作的节点具有操作的输入参数作为子节点。如果
XPath
表达式在子语句中定义为“rpc
”或“action
”语句中的“output
”语句,则可访问的树是RPC
或操作(action
)实例,服务器中的所有状态数据以及正在运行的配置数据存储区。根节点在所有模块中都有作为子节点的顶级数据节点。此外,对于RPC
,根节点也具有代表RPC
操作的节点被定义为子节点。表示正在定义的操作的节点具有操作的输出参数作为子节点。
在可访问的树中,存在所有使用默认值的叶子和叶子列表(参见7.6.1和7.7.2节)。
如果存在于可访问树中的节点具有不存在容器作为子节点,则不存在容器也存在于可访问树中。
上下文节点随着YANG
XPath
表达式而变化,并且在定义了具有XPath
表达式的YANG
语句的地方被指定。
6.4.1.1. 例子
鉴于以下模块:
module example-a {
yang-version 1.1;
namespace urn:example:a;
prefix a;
container a {
list b {
key id;
leaf id {
type string;
}
notification down {
leaf reason {
type string;
}
}
action reset {
input {
leaf delay {
type uint32;
}
}
output {
leaf result {
type string;
}
}
}
}
}
notification failure {
leaf b-ref {
type leafref {
path "/a/b/id";
}
}
}
}
并给出了以XML
格式指定的以下数据树:
<a xmlns="urn:example:a">
<b>
<id>1</id>
</b>
<b>
<id>2</id>
</b>
</a>
通知“down
” 在 /a/b[id ="2"]
的可访问树是:
<a xmlns="urn:example:a">
<b>
<id>1</id>
</b>
<b>
<id>2</id>
<down>
<reason>error</reason>
</down>
</b>
</a>
//可能还有其他顶级节点
在“when
”参数设置为“10
”时,对/a/b[id="1"]
上的“reset
”动作调用的可访问树将是:
<a xmlns="urn:example:a">
<b>
<id>1</id>
<reset>
<delay>10</delay>
</reset>
</b>
<b>
<id>2</id>
</b>
</a>
//可能还有其他顶级节点
这个动作输出的可访问树是:
<a xmlns="urn:example:a">
<b>
<id>1</id>
<reset>
<result>ok</result>
</reset>
</b>
<b>
<id>2</id>
</b>
</a>
//可能还有其他顶级节点
通知“failure
”的可访问树可以是:
<a xmlns="urn:example:a">
<b>
<id>1</id>
</b>
<b>
<id>2</id>
</b>
</a>
<failure>
<b-ref>2</b-ref>
</failure>
//可能还有其他顶级节点