联合元素验证 XML 架构
Union element validation XML Schema
在使用 this 在线验证器验证我的文件时,我收到以下错误消息:
cvc-datatype-valid.1.2.3: 'Gomorra 20140506' is not a valid value of
union type '#AnonType_alternatywny_tekstzdjecie'.
cvc-type.3.1.3: The value 'Gomorra 20140506' of element
'alternatywny_tekst' is not valid.
我按照 w3schools 示例中的格式格式化了我的代码。谁能告诉我我的代码有什么问题吗?
<xs:element name="zdjecie">
<xs:complexType>
<xs:sequence>
<xs:element name="wysokosc" type="xs:decimal"/>
<xs:element name="szerokosc" type="xs:decimal"/>
<xs:element ref="zrodlo"/>
<xs:element name="alternatywny_tekst">
<xs:simpleType>
<xs:union memberTypes="tekst_1 tekst_2"/>
</xs:simpleType>
</xs:element>
</xs:sequence>
<xs:attribute ref="kod"/>
</xs:complexType>
</xs:element>
<xs:simpleType name="tekst_1">
<xs:restriction base="xs:string">
<xs:enumeration value="Gomorra"/>
<xs:enumeration value="Grand Budapest Hotel"/>
<xs:enumeration value="Fargo"/>
<xs:enumeration value="Wściekłe psy"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="tekst_2">
<xs:restriction base="xs:integer">
<xs:maxExclusive value="20161130"/>
</xs:restriction>
</xs:simpleType>
XML
<zdjecie kod="GO.2014.001">
<wysokosc>735</wysokosc>
<szerokosc>500</szerokosc>
<zrodlo>Obrazki/gomorra.jpg</zrodlo>
<alternatywny_tekst>Gomorra 20140506</alternatywny_tekst>
</zdjecie>
xs:union
的值 space 是其成员类型的并集,但单独它不允许存在多个成员。从您的 XML 来看,您似乎想要允许多个成员。您可以通过 xs:list
:
实现
<xs:element name="alternatywny_tekst">
<xs:simpleType>
<xs:list>
<xs:simpleType>
<xs:union memberTypes="tekst_1 tekst_2"/>
</xs:simpleType>
</xs:list>
</xs:simpleType>
</xs:element>
请注意,这允许组合来自 tekst_1
和 tekst_2
允许的值的并集 - 不一定是 tekst_1
后跟 tekst_2
。
这是在完整 XSD 上下文中的上述声明,它将成功验证您的 XML:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="zdjecie">
<xs:complexType>
<xs:sequence>
<xs:element name="wysokosc" type="xs:decimal"/>
<xs:element name="szerokosc" type="xs:decimal"/>
<xs:element name="zrodlo" type="xs:string"/>
<xs:element name="alternatywny_tekst">
<xs:simpleType>
<xs:list>
<xs:simpleType>
<xs:union memberTypes="tekst_1 tekst_2"/>
</xs:simpleType>
</xs:list>
</xs:simpleType>
</xs:element>
</xs:sequence>
<xs:attribute name="kod" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:simpleType name="tekst_1">
<xs:restriction base="xs:string">
<xs:enumeration value="Gomorra"/>
<xs:enumeration value="Grand Budapest Hotel"/>
<xs:enumeration value="Fargo"/>
<xs:enumeration value="Wściekłe psy"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="tekst_2">
<xs:restriction base="xs:integer">
<xs:maxExclusive value="20161130"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
在使用 this 在线验证器验证我的文件时,我收到以下错误消息:
cvc-datatype-valid.1.2.3: 'Gomorra 20140506' is not a valid value of union type '#AnonType_alternatywny_tekstzdjecie'.
cvc-type.3.1.3: The value 'Gomorra 20140506' of element 'alternatywny_tekst' is not valid.
我按照 w3schools 示例中的格式格式化了我的代码。谁能告诉我我的代码有什么问题吗?
<xs:element name="zdjecie">
<xs:complexType>
<xs:sequence>
<xs:element name="wysokosc" type="xs:decimal"/>
<xs:element name="szerokosc" type="xs:decimal"/>
<xs:element ref="zrodlo"/>
<xs:element name="alternatywny_tekst">
<xs:simpleType>
<xs:union memberTypes="tekst_1 tekst_2"/>
</xs:simpleType>
</xs:element>
</xs:sequence>
<xs:attribute ref="kod"/>
</xs:complexType>
</xs:element>
<xs:simpleType name="tekst_1">
<xs:restriction base="xs:string">
<xs:enumeration value="Gomorra"/>
<xs:enumeration value="Grand Budapest Hotel"/>
<xs:enumeration value="Fargo"/>
<xs:enumeration value="Wściekłe psy"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="tekst_2">
<xs:restriction base="xs:integer">
<xs:maxExclusive value="20161130"/>
</xs:restriction>
</xs:simpleType>
XML
<zdjecie kod="GO.2014.001">
<wysokosc>735</wysokosc>
<szerokosc>500</szerokosc>
<zrodlo>Obrazki/gomorra.jpg</zrodlo>
<alternatywny_tekst>Gomorra 20140506</alternatywny_tekst>
</zdjecie>
xs:union
的值 space 是其成员类型的并集,但单独它不允许存在多个成员。从您的 XML 来看,您似乎想要允许多个成员。您可以通过 xs:list
:
<xs:element name="alternatywny_tekst">
<xs:simpleType>
<xs:list>
<xs:simpleType>
<xs:union memberTypes="tekst_1 tekst_2"/>
</xs:simpleType>
</xs:list>
</xs:simpleType>
</xs:element>
请注意,这允许组合来自 tekst_1
和 tekst_2
允许的值的并集 - 不一定是 tekst_1
后跟 tekst_2
。
这是在完整 XSD 上下文中的上述声明,它将成功验证您的 XML:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="zdjecie">
<xs:complexType>
<xs:sequence>
<xs:element name="wysokosc" type="xs:decimal"/>
<xs:element name="szerokosc" type="xs:decimal"/>
<xs:element name="zrodlo" type="xs:string"/>
<xs:element name="alternatywny_tekst">
<xs:simpleType>
<xs:list>
<xs:simpleType>
<xs:union memberTypes="tekst_1 tekst_2"/>
</xs:simpleType>
</xs:list>
</xs:simpleType>
</xs:element>
</xs:sequence>
<xs:attribute name="kod" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:simpleType name="tekst_1">
<xs:restriction base="xs:string">
<xs:enumeration value="Gomorra"/>
<xs:enumeration value="Grand Budapest Hotel"/>
<xs:enumeration value="Fargo"/>
<xs:enumeration value="Wściekłe psy"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="tekst_2">
<xs:restriction base="xs:integer">
<xs:maxExclusive value="20161130"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>