【问题标题】:Yang : How to convert yang schema to XML杨:如何将 yang 模式转换为 XML
【发布时间】:2019-01-29 20:48:45
【问题描述】:

我有一个 Yang 文件,我想使用 yang 模式以 xml 格式发送数据,我该怎么做。

假设我有下面这样的 yang 文件

module jtest {
    namespace "jtest";
    prefix jtest;

    container jtest {
        container mycontainer1 {
            leaf myleaf1 {
                type string;
            }
        }

        container mycontainer2 {
            container innercontainer {
                leaf myleaf2 {
                    type string;
                }
            }
            leaf myleaf3 {
                type string;
            }
        }
        container mycontainer3 {
            leaf myleaf1 {
                type string;
            }
        }

    }
}

我想按照 yang 模式发送 xml 格式的数据,如何将 yang 序列化或转换为 xml。

【问题讨论】:

  • 您可能想问如何根据您的 YANG 模块生成示例 XML 实例文档。您可以为此使用工具。我相信pyang 能够为各种 XML 有效负载生成骨架。
  • Predi,我确实将 pyang 与 sample-xml-skeleton 一起使用,它确实创建了 xml。但我真正想要的是将 yang 序列化为 xml 并将其发送到接收端,然后在接收端进行反序列化。
  • “将 yang 序列化为 xml”是什么意思? yang 是模式或模板 - xml 是符合模式的实际有效负载数据的一种可能表示形式。
  • 如果是这样,那么您可以简单地将 YANG 模块的内容作为文本值发送到 RPC 回复中。无需将语句序列化为 YIN。也许看看ietf-netconf-monitoring 和它的get-schema 操作,看看我的意思。

标签: opendaylight ietf-netmod-yang


【解决方案1】:

假设(根据@predi 评论)您可能在询问如何创建符合 YANG 模式的 XML 实例:

我不能 100% 确定您是指以编程方式(通过代码)还是作为最终用户,以及您是否使用 OpenDaylight (ODL),但以防万一,ODL 中的 DAEXIM 项目从与 JSON 之间的 ODL 数据存储,所以您可能对此感兴趣?如果您是最终用户,那么Data Export/Import User Guide 可能对您有用。如果您是开发人员,请查看 ExportTask 类以了解它如何编写 JSON - 然后您应该能够使用 ODL yangtools 的 XmlCodecFactory 类似于 DAEXIM 如何使用 JSONCodecFactory 编写 XML 而不是JSON。

如果您想将 YANG 模式本身转换为 XML,这就是 YIN 的用途(但我认为这不是您要问的)。

【讨论】:

  • vorburger,我想使用 ODL,我查看了 yang-xml-codec,但我在测试用例中看到的只是他们已经为 yang 生成了 xml。我想要的是以编程方式生成带有数据的 yang 序列化 xml,然后可以将其反序列化。
  • 我自己没有尝试过,但我的理解是你应该能够使用 NormalizedNodeWriter.forStreamWriter() 就像你可以看到 DAEXIM 的 ExportTask 一样,并使用 XmlCodecFactory 而不是 JSONCodecFactory。如果这没有帮助,最好将更具体的 API 使用问题发布到 lists.opendaylight.org/mailman/listinfo/yangtools-dev 邮件列表。
  • 部分链接已不存在
【解决方案2】:

你可以使用pyang从yang文件生成xml文件:

$ pyang -h
Usage: pyang [options] [<filename>...]
 
  -f FORMAT, --format=FORMAT
                        Convert to FORMAT.  Supported formats are: yang, yin,
                        dsdl, capability, depend, jsonxsl, jstree, jtox, name,
                        omni, sample-xml-skeleton, tree, uml
 
  Sample-xml-skeleton output specific options:
    --sample-xml-skeleton-doctype=DOCTYPE
                        Type of sample XML document (data or config).
    --sample-xml-skeleton-defaults
                        Insert leafs with defaults values.
    --sample-xml-skeleton-annotations
                        Add annotations as XML comments.
    --sample-xml-skeleton-path=SAMPLE_PATH
                        Subtree to print

像这样:

pyang -f sample-xml-skeleton --sample-xml-skeleton-defaults -o output.xml input.yang

【讨论】:

    猜你喜欢
    • 2023-04-10
    • 2022-07-31
    • 1970-01-01
    • 2015-08-10
    • 2019-12-13
    • 1970-01-01
    • 2010-12-12
    • 2014-07-04
    • 2017-01-06
    相关资源
    最近更新 更多