6.4.1. XPath上下文

所有YANG XPath表达式共享以下XPath上下文定义:

  • 命名空间声明的集合是指定了XPath表达式的模块中的所有“import”语句的前缀和名称空间对的集合,以及“namespace”语句的URI的“prefix”语句的前缀。

  • 没有名称空间前缀的名称与当前节点的标识符属于同一个名称空间。在一个分组中,这个名字空间受到分组的使用位置的影响(见第7.13节)。在typedef中,该名称空间受到引用typedef的位置的影响。如果在分组中定义并引用typedef,则命名空间将受到分组使用位置的影响(请参见第7.13节)。

  • 函数库是[XPATH]中定义的核心函数库和第10节定义的函数。

  • 变量绑定的集合是空的。

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.17.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>
//可能还有其他顶级节点

results matching ""

    No results matching ""