【问题标题】:XML Schema transformationXML 模式转换
【发布时间】:2015-08-11 13:43:34
【问题描述】:

我正在开发一个客户端应用程序(嵌入式系统),它使用 XML 格式与服务器交换数据和配置。

我想在 XML 模式中添加一些额外的信息,关于 XML 数据的处理(例如处理程序或任何自定义操作),而不会对服务器端产生任何副作用。

例如,

<xs:element name="ethernet">
    <xs:complexType>
        <xs:sequence>
        <!-- <handler>set_ethernet_address</handler> -->
            <xs:element name="ip" type="ipType"/>
            <xs:element name="net_mask" type="ipType"/>
            <xs:element name="gateway" type="ipType"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

在上面的例子中,注释表示元素 ethernet 有一个处理程序 set_ethernet_address。此信息与服务器端用户完全无关。此外,这个 handler 元素不是目标 XML 文件的一部分。将来我计划开发一个源代码生成器,它从模式中生成客户端应用程序代码。

所以我的问题是,

  1. 我可以在 XML 模式中添加额外的“处理指令”而不是注释格式吗?
  2. 此外,我能否通过删除客户端特定的“处理指令”将该 XML 架构转换为服务器的新 XML 架构文件。

谢谢, 南德基肖尔。

【问题讨论】:

    标签: xml xslt schema


    【解决方案1】:

    推荐的方法是使用 xs:annotation 元素:

    <xs:element name="ethernet">
        <xs:annotation>
         <xs:appInfo source="http://stackoverflow.com/users/2857369/nandkishor-biradar">
           <hander>set_ethernet_address</handler>
         </xs:appInfo>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element name="ip" type="ipType"/>
                <xs:element name="net_mask" type="ipType"/>
                <xs:element name="gateway" type="ipType"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    

    【讨论】:

    • 谢谢,这真的很有用。还有一个问题,我可以使用 XSLT 来架构文件吗?在传递给客户之前,我需要从架构文件中删除这些注释。
    • 是的,XSD 是 XML,因此您当然可以使用 XSLT 剥离 xs:annotation 元素。
    猜你喜欢
    • 2012-09-24
    • 1970-01-01
    • 2010-12-12
    • 2017-01-06
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多