2016-11-29 64 views
1

在验证使用this在线验证我的文件,我得到以下错误消息:联盟元素验证XML模式

CVC-数据类型-valid.1.2.3:“Gomorra 20140506”不是 工会的有效值键入'#AnonType_alternatywny_tekstzdjecie'。

cvc-type.3.1.3:元素 'alternatywny_tekst'的值'Gomorra 20140506'无效。

我在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> 

回答

1

一个xs:union的值空间是其成员类型的联合,但单独它不允许多个成员存在。从你的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_1tekst_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>