XSD用于来自不同名称空间的备用根元素吗?
问题描述:
XML架构V1.0可以通过的事实,那就是没有一个根节点定义的方式指定实例替代根节点:XSD用于来自不同名称空间的备用根元素吗?
https://*.com/a/8857777/8254682
因此有可能利用此提供一种“文件类型选择“,而不使用XSD V1.1。,根据在实例中使用哪个全局声明的元素作为根节点,对吗?
但是,只要这些命名空间被正确声明,“替代根节点”可以在不同的命名空间中吗?在这种情况下做元素和属性资格问题吗?
答
任何根元素(不是抽象的)都可以用作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文档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文档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文档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>