9.10. Identityref
内置类型
identityref
内置类型用于引用现有标识(请参阅第7.18节)。
9.10.1. 限制
identityref
不能被限制。
9.10.2. identityref
的“base
”声明
如果类型是“identityref
”,则必须至少存在一次“base
”语句,即“type
”语句的子语句。 参数是由“identityref
”声明定义的身份的名称。 如果标识名称上存在前缀,则它指的是使用该前缀导入的模块中定义的标识。 否则,必须在当前模块或包含的子模块中定义具有匹配名称的标识。
identityref
的有效值是从所有identityref
的基本身份派生的任何身份。 在特定的服务器上,有效值进一步限制在由服务器实现的模块中定义的一组身份。
9.10.3. 词汇表示
identityref
在词法上表示为[XML-NAMES]中定义的被引用的标识的限定名称。如果前缀不存在,则identityref
的名称空间是对包含identityref
值的元素有效的默认名称空间。
当使用“default
”语句给identityref
赋予默认值时,默认值中的标识名可以有一个前缀。如果身份名称中存在前缀,则表示在该模块中使用该前缀导入的身份,或者在当前模块或其子模块中定义了身份的前提下,使用当前模块的前缀。否则,必须在当前模块或其子模块中定义具有匹配名称的标识。
“must
”或“when
”XPath
表达式中“identityref
”类型的节点的字符串值是带有前缀的引用标识的限定名。如果引用的标识是在导入的模块中定义的,则字符串值中的前缀是在相应的“import
”语句中定义的前缀。否则,字符串值中的前缀是当前模块的前缀。
9.10.4. 规范形式
由于词法形式依赖于值出现的XML
上下文,所以这种类型不具有规范形式。
9.10.5. 使用示例
使用7.18.3节中的身份定义和以下模块:
module example-my-crypto {
yang-version 1.1;
namespace "urn:example:my-crypto";
prefix mc;
import "example-crypto-base" {
prefix "crypto";
}
identity aes {
base "crypto:crypto-alg";
}
leaf crypto {
type identityref {
base "crypto:crypto-alg";
}
}
container aes-parameters {
when "../crypto = 'mc:aes'";
...
}
}
以下是如何将叶片“crypto
”编码的例子,如果该值是在“des
”模块中定义的“des3
”身份:
<crypto xmlns:des="urn:example:des">des:des3</crypto>
编码中使用的任何前缀对于每个实例编码都是本地的。 这意味着相同的identityref
可以通过不同的实现进行不同的编码。 例如,下面的例子就像上面一样编码相同的叶子:
<crypto xmlns:x="urn:example:des">x:des3</crypto>
如果在“example-my-crypto
”模块中定义的“crypto
”叶的值是“aes
”,则它可以被编码为:
<crypto xmlns:mc="urn:example:my-crypto">mc:aes</crypto>
或者,使用默认名称空间:
<crypto>aes</crypto>