XML Schema V1.0可以通过没有单个根节点定义的事实为实例指定备用根节点:
https://stackoverflow.com/a/8857777/8254682
因此可以利用它来提供一种"文档类型选择"不使用XSD V1.1。,基于在实例中使用几个全局声明的元素中的哪一个作为根节点,对吗?
但可以"替代根节点"在不同的命名空间中,只要这些命名空间被正确声明?在这种情况下,元素和属性资格是否重要?
答案 0 :(得分:0)
任何根元素(非抽象)都可以用作XML文档中根元素的定义。
此外,您可以使用XML文档中的xsi:type属性保留相同的根元素名称并更改元素的类型(使用的类型必须基于RootElm中定义的类型)。
<?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>