XSD用于来自不同命名空间的备用根元素?

时间:2017-07-24 13:21:50

标签: xml xsd xsd-validation root-node

XML Schema V1.0可以通过没有单个根节点定义的事实为实例指定备用根节点:

https://stackoverflow.com/a/8857777/8254682

因此可以利用它来提供一种"文档类型选择"不使用XSD V1.1。,基于在实例中使用几个全局声明的元素中的哪一个作为根节点,对吗?

但可以"替代根节点"在不同的命名空间中,只要这些命名空间被正确声明?在这种情况下,元素和属性资格是否重要?

1 个答案:

答案 0 :(得分:0)

任何根元素(非抽象)都可以用作XML文档中根元素的定义。

此外,您可以使用XML文档中的xsi:type属性保留相同的根元素名称并更改元素的类型(使用的类型必须基于RootElm中定义的类型)。

enter image description here

<?xml version="1.0" encoding="utf-8" ?>
<!--Created with Liquid Studio 2018 (https://www.liquid-technologies.com)-->
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="RootElm" type="RootType" />
    <xs:complexType name="RootType">
        <xs:sequence>
            <xs:element name="A" />
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="RootType1">
        <xs:complexContent>
            <xs:extension base="RootType">
                <xs:sequence>
                    <xs:element name="B" />
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="RootType2">
        <xs:complexContent>
            <xs:extension base="RootType">
                <xs:sequence>
                    <xs:element name="C" />
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
</xs:schema>

示例XML Doc 1

<?xml version="1.0" encoding="utf-8"?>
<!-- Created with Liquid Studio 2018 (https://www.liquid-technologies.com) -->
<RootElm xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:noNamespaceSchemaLocation="C:\Temp\XSDFile1.xsd">
    <A />
</RootElm>

示例XML Doc 2

<?xml version="1.0" encoding="utf-8"?>
<!-- Created with Liquid Studio 2018 (https://www.liquid-technologies.com) -->
<RootElm xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:noNamespaceSchemaLocation="C:\Temp\XSDFile1.xsd" 
         xsi:type="RootType1">
    <A />
    <B></B>
</RootElm>

示例XML Doc 3

<?xml version="1.0" encoding="utf-8"?>
<!-- Created with Liquid Studio 2018 (https://www.liquid-technologies.com) -->
<RootElm xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:noNamespaceSchemaLocation="C:\Temp\XSDFile1.xsd" 
         xsi:type="RootType2">
    <A />
    <C />
</RootElm>