XML 1.1 中 xs:alternative 的正确用法
Correct usage of xs:alternative in XML 1.1
这就是我用替代类型定义元素的方式。
alternative.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
elementFormDefault="qualified"
vc:minVersion="1.1">
<xs:complexType name="DefaultType">
<xs:sequence>
<xs:element name="string" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="OtherType">
<xs:sequence>
<xs:element name="number" type="xs:integer"/>
</xs:sequence>
</xs:complexType>
<xs:element name="root">
<xs:alternative test="@switchTo = 'OtherType'" type="OtherType"/>
<xs:alternative type = "DefaultType"/>
</xs:element>
</xs:schema>
sampleA.xml
<?xml version="1.1" encoding="UTF-8"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="alternative.xsd">
<string>
Sample
</string>
</root>
sampleB.xml
<?xml version="1.1" encoding="UTF-8"?>
<root switchTo="OtherType"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="alternative.xsd">
<number>
23571113
</number>
</root>
我的第一个 none 验证者支持它,所以我切换到 Oxygen XML 进行评估。它验证所有内容,并且类型解析和验证适用于每个替代方案,但我收到错误:
Attribute 'switchTo' is not allowed to appear in element 'apply'.
我知道没有为元素'root'定义属性,但我也不知道应该在哪里定义它!我以探索的方式尝试了各个地方,但没有运气。谢谢你的时间。
如果您为元素设置了不同的复杂类型,那么您的复杂类型需要声明您要赋予元素的属性:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
elementFormDefault="qualified"
vc:minVersion="1.1">
<xs:complexType name="DefaultType">
<xs:sequence>
<xs:element name="string" type="xs:string"/>
</xs:sequence>
<xs:attribute name="switchTo" type="xs:string"/>
</xs:complexType>
<xs:complexType name="OtherType">
<xs:sequence>
<xs:element name="number" type="xs:integer"/>
</xs:sequence>
<xs:attribute name="switchTo" type="xs:string"/>
</xs:complexType>
<xs:element name="root">
<xs:alternative test="@switchTo = 'OtherType'" type="OtherType"/>
<xs:alternative type = "DefaultType"/>
</xs:element>
</xs:schema>
这就是我用替代类型定义元素的方式。
alternative.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
elementFormDefault="qualified"
vc:minVersion="1.1">
<xs:complexType name="DefaultType">
<xs:sequence>
<xs:element name="string" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="OtherType">
<xs:sequence>
<xs:element name="number" type="xs:integer"/>
</xs:sequence>
</xs:complexType>
<xs:element name="root">
<xs:alternative test="@switchTo = 'OtherType'" type="OtherType"/>
<xs:alternative type = "DefaultType"/>
</xs:element>
</xs:schema>
sampleA.xml
<?xml version="1.1" encoding="UTF-8"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="alternative.xsd">
<string>
Sample
</string>
</root>
sampleB.xml
<?xml version="1.1" encoding="UTF-8"?>
<root switchTo="OtherType"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="alternative.xsd">
<number>
23571113
</number>
</root>
我的第一个 none 验证者支持它,所以我切换到 Oxygen XML 进行评估。它验证所有内容,并且类型解析和验证适用于每个替代方案,但我收到错误:
Attribute 'switchTo' is not allowed to appear in element 'apply'.
我知道没有为元素'root'定义属性,但我也不知道应该在哪里定义它!我以探索的方式尝试了各个地方,但没有运气。谢谢你的时间。
如果您为元素设置了不同的复杂类型,那么您的复杂类型需要声明您要赋予元素的属性:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
elementFormDefault="qualified"
vc:minVersion="1.1">
<xs:complexType name="DefaultType">
<xs:sequence>
<xs:element name="string" type="xs:string"/>
</xs:sequence>
<xs:attribute name="switchTo" type="xs:string"/>
</xs:complexType>
<xs:complexType name="OtherType">
<xs:sequence>
<xs:element name="number" type="xs:integer"/>
</xs:sequence>
<xs:attribute name="switchTo" type="xs:string"/>
</xs:complexType>
<xs:element name="root">
<xs:alternative test="@switchTo = 'OtherType'" type="OtherType"/>
<xs:alternative type = "DefaultType"/>
</xs:element>
</xs:schema>