2016-11-29 62 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>