gpt4 book ai didi

parsing - 你能在 yang 模式中有一个自定义属性吗?

转载 作者:行者123 更新时间:2023-12-04 02:20:15 25 4
gpt4 key购买 nike

我想知道我们是否可以在叶、列表等元素之一中定义自定义字段或属性。例如:这可能吗?如果可能,我们如何定义此类字段。

model Animal{

leaf amphibian{
type String;
custom "Frog"; // Custom field which has a value "Frog"
}
}

最佳答案

“新 YANG 关键字”中的“属性”

如果您通过“属性”指的是一个新的 YANG 关键字,它对您有特殊意义,那么是的。 YANG 支持扩展。来自 RFC6020 :

The "extension" statement allows the definition of new statementswithin the YANG language. This new statement definition can beimported and used by other modules.

The statement's argument is an identifier that is the new keyword forthe extension and must be followed by a block of substatements thatholds detailed extension information. The purpose of the "extension"statement is to define a keyword, so that it can be imported and usedby other modules.

The extension can be used like a normal YANG statement, with thestatement name followed by an argument if one is defined by theextension, and an optional block of substatements. The statement'sname is created by combining the prefix of the module in which theextension was defined, a colon (":"), and the extension's keyword,with no interleaving whitespace.

extension custom {
argument object;
description "A new YANG keyword that carries special semantics.";
}

prefix:custom "Frog"; // usage of an extension

上例中的 argument 关键字是 extension 关键字的可选子语句,用于指示新关键字采用(强制)参数(字符串,例如“ Frog ”)。

The "argument" statement, which is optional, takes as an argument astring that is the name of the argument to the keyword. If noargument statement is present, the keyword expects no argument whenit is used.7.17.2

为什么需要为 new 关键字命名参数? YANG 可以映射到 YIN,YIN 是表示为 XML 的替代语法,这就是这个名称变得重要的地方。

The argument's name is used in the YIN mapping, where it is used asan XML attribute or element name, depending on the argument's "yin-element" statement.7.17.2

你不能限制这个参数本身的值空间 - YANG 编译器总是将它识别为一个字符串。但是没有什么可以阻止您要求实现期望某些值 - 毕竟您正在定义 new 关键字的含义。

extension custom {
argument value;
description
"The value of "custom" statement's argument MUST be an integer
in the range from 1 to 5.";
}

prefix:custom 3;

描述语句包含规范文本,因此如果您的扩展包含一个 description 子语句,声明“此语句参数的值必须是一个整数”,那么实现将必须遵守此文本。

“属性”如“XML 属性”(或等效的 JSON)

如果您指的是使用 YANG 建模的实例文档(XML、JSON 等)中的“属性”,那么答案是否定的——在大多数情况下。 Pure YANG 不支持建模属性。

但是,有一个已发布的 YANG 扩展规范允许定义此类属性。您可以阅读更多相关信息 here (RFC7952)。该扩展名为 annotation,用于定义 YANG 元数据,即用于扩充可能已使用 YANG 建模的数据的附加信息。这是一个例子:

module using-annotation {
namespace "org:example:using-annotation";
prefix "ua";

import ietf-yang-metadata {
prefix "md";
}

md:annotation my-annotation {
type string;
description "This is my annotation.";
}

container top {
leaf some-leaf {
type string;
}
}
}

根据上述模型,这将是一个有效的 XML 实例:

  <ua:top xmlns:ua="org:example:using-annotation">
<ua:some-leaf ua:my-annotation="Yay!">foo</ua:some-leaf>
</ua:top>

它允许 XML 属性几乎在任何地方都有效。

阅读 RFC7952 也可能有助于了解 extension 语句的实际工作方式以及如何正确定义 YANG 扩展

关于parsing - 你能在 yang 模式中有一个自定义属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30920415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com