2016-03-29 44 views
0

請在下面找到我正在使用的XSD。我希望至少有一個或兩個元素:STYPE1STYPE2要存在。XSD驗證 - 一個或兩個

獲得的錯誤:元素'元素'無效,放錯位置或發生頻率過高。

這裏是我的xsd:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
 
    <xs:element name="root"> 
 
    <xs:complexType> 
 
     <xs:sequence> 
 
     <xs:element name="table"> 
 
      <xs:complexType> 
 
      <xs:sequence> 
 
       <xs:element name="rows"> 
 
       <xs:complexType> 
 
        <xs:sequence> 
 
        <xs:element name="row" maxOccurs="unbounded" minOccurs="0"> 
 
         <xs:complexType mixed="true"> 
 
         <xs:element name="SNO" type="xs:string"/> \t \t 
 
          <xs:choice minOccurs="1" maxOccurs="2"> 
 
          <xs:element name="STYPE1" type="Type1"/> \t \t \t \t \t \t 
 
          <xs:element name="STYPE2" type="Type2"/> \t 
 
          <xs:choice> 
 
         </xs:complexType> 
 
        </xs:element> 
 
        </xs:sequence> 
 
       </xs:complexType> 
 
       </xs:element> 
 
      </xs:sequence> 
 
      </xs:complexType> 
 
     </xs:element> 
 
     </xs:sequence> 
 
    </xs:complexType> 
 
    </xs:element> 
 
    
 
    <!-- Start with either A or B followed by 8 characters --> 
 
    <xs:simpleType name="Type1"> 
 
    <xs:restriction base="xs:string"> 
 
     <xs:pattern value="(A|B)([a-zA-Z0-9])*"/> 
 
\t <xs:length value="9"/> 
 
    </xs:restriction> 
 
    </xs:simpleType> 
 
    
 
    <!-- Start with either C or D followed by 6 characters --> 
 
    <xs:simpleType name="Type2"> 
 
    <xs:restriction base="xs:string"> 
 
     <xs:pattern value="(C|D)([a-zA-Z0-9])*"/> 
 
\t <xs:length value="7"/> 
 
    </xs:restriction> 
 
    </xs:simpleType> 
 
</xs:schema>

這裏是我的xml文件:

<root> 
 
    <table> 
 
    <rows> 
 
     <row> 
 
      <SNO>1</SNO> 
 
      <STYPE1>A12345678</STYPE1> 
 
      <STYPE2>C654321</STYPE2> 
 
     </row> \t 
 
\t \t <row> 
 
      <SNO>2</SNO> 
 
      <STYPE1>B12345678</STYPE1> 
 
      <STYPE2>D654321</STYPE2> 
 
     </row>   
 
    </rows> 
 
    </table> 
 
</root>

任何幫助將不勝感激。

回答

0

該模式無效,因爲在SNO元素聲明和xs:choice元素周圍缺少xs:sequence元素。

<xs:complexType mixed="true"> 
    <xs:sequence> 
    <xs:element name="SNO" type="xs:string"/>  
    <xs:choice minOccurs="1" maxOccurs="2"> 
     <xs:element name="STYPE1" type="Type1"/>       
     <xs:element name="STYPE2" type="Type2"/> 
    </xs:choice> 
    </xs:sequence> 
</xs:complexType> 

了完整的模式將是:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema 
    attributeFormDefault="unqualified" 
    elementFormDefault="qualified" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="root"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="table"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="rows"> 
       <xs:complexType> 
        <xs:sequence> 
        <xs:element name="row" maxOccurs="unbounded" minOccurs="0"> 
         <xs:complexType mixed="true"> 
         <xs:sequence> 
          <xs:element name="SNO" type="xs:string"/> 
          <xs:choice minOccurs="1" maxOccurs="2"> 
          <xs:element name="STYPE1" type="Type1"/> 
          <xs:element name="STYPE2" type="Type2"/> 
          </xs:choice> 
         </xs:sequence> 
         </xs:complexType> 
        </xs:element> 
        </xs:sequence> 
       </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 

    <!-- Start with either A or B followed by 8 characters --> 
    <xs:simpleType name="Type1"> 
    <xs:restriction base="xs:string"> 
     <xs:pattern value="(A|B)([a-zA-Z0-9])*"/> 
     <xs:length value="9"/> 
    </xs:restriction> 
    </xs:simpleType> 

<!-- Start with either C or D followed by 6 characters --> 
    <xs:simpleType name="Type2"> 
    <xs:restriction base="xs:string"> 
     <xs:pattern value="(C|D)([a-zA-Z0-9])*"/> 
     <xs:length value="7"/> 
    </xs:restriction> 
    </xs:simpleType> 
</xs:schema> 
+0

感謝您的幫助。事實上,XML元素(SNO,STYPE1,STYPE2)可以以任意順序排列。如果我添加xs:序列,這將不再可能。但是,如果您沒有指出xs:sequence,那麼xs:choice不起作用。任何想法如何解決這個問題? – Original16