为啥 netconf 不使用 XML 作为数据建模语言?

Posted

技术标签:

【中文标题】为啥 netconf 不使用 XML 作为数据建模语言?【英文标题】:Why netconf is not using XML as data modeling language?为什么 netconf 不使用 XML 作为数据建模语言? 【发布时间】:2021-09-24 00:24:20 【问题描述】:

我们知道 Netconf 使用 yang 作为数据建模语言。它还包含 XML。 为什么 XML 本身不用作建模语言?是什么阻止了 XML 作为数据建模语言?

【问题讨论】:

【参考方案1】:

请注意,NETCONF 协议相关的 RFC 不强制要求任何特定的数据模型。

数据建模和内容问题超出了 NETCONF 的范围 协议。假设设备的数据模型是 应用程序众所周知并且双方都知道 诸如布局、遏制、键控、查找、替换等问题, 和数据管理,以及施加的任何其他限制 由数据模型决定。

NETCONF 在元素内部携带配置数据 特定于设备的数据模型。该协议处理 该元素的内容作为不透明数据。该设备使用 宣布设备的数据模型集的能力 实现。能力定义详细说明了操作和 数据模型施加的约束。

设备和管理器可以支持多种数据模型,包括两者 标准和专有数据模型。

RFC6241, Section 5.2

您还应该注意,YANG 有一种基于 XML 的格式,称为 YIN,因此从技术上讲,它也可以被视为一种基于 XML 的数据建模语言。

一个 YANG 模块可以被翻译成另一种基于 XML 的语法 叫殷。翻译后的模块称为 YIN 模块。这 部分描述了两者之间的双向映射规则 格式。

YANG 和 YIN 格式包含使用相同的信息 不同的符号。 YIN 符号使开发人员能够 用 XML 表示 YANG 数据模型,因此使用丰富的 基于 XML 的数据过滤和验证工具,自动化 生成代码和文档,以及其他任务。像这样的工具 可以使用 XSLT 或 XML 验证器。

YANG 和 YIN 的映射不修改信息 模型的内容。不会保留注释和空格。

RFC7950, Section 13

然而,YANG 最初设计时考虑到了 NETCONF,并且是目前在 NETCONF 会话中对节点交换的数据进行建模的首选方式。

为什么不使用现有的基于 XML 的数据模型,例如 XML Schema (XSD) 和 RelaxNG?

当时的一个论点是可读性。人类的可读性是 YANG 的一个高优先级目标——你应该能够通过硬编码所有内容来实现一个模块,有些模块实际上需要你通过节点​​描述中的规范文本来实现。除了机器之外,基于 XML 的数据模型的可读性不是很好。我会让你判断 YANG 是否比 XML 更具可读性,因为这完全是主观的(你可以通过并排阅读 YANG 和 YIN 格式的模块来测试这一点)。

使用更具体的语言(YANG)在同行之间实现最大的互操作性(换句话说,标准化)也容易得多。想象一下使用抽象 XML 语言(如 XSD)的每个人的混乱。就 XSD 而言,一切都只是元素和属性——您无法立即判断定义是表示通知、rpc、操作还是只是简单的数据节点。你必须依靠 cmets 来做这些事情。当然,其他人可能会为此使用处理指令。或任何其他 XML 构造...

【讨论】:

以上是关于为啥 netconf 不使用 XML 作为数据建模语言?的主要内容,如果未能解决你的问题,请参考以下文章

有人可以解释一下YANG,NETCONF,RESTCONF,XML之间的关系吗

为啥我的自定义 XML RPC 获取配置不起作用?

瞻博网络 NETCONF RPC - 未返回数据

yang学习

NetDevOps — NETCONF/YANG 协议

为啥每次建模时间我在 Weka 收到的拍摄时间都不一样?