验证xml.violate“唯一粒子归属”

问题描述:

我有验证问题。验证xml.violate“唯一粒子归属”

我有简单的XML:

<AppData xmlns="http://smev.gosuslugi.ru/rev120315"> 
    <Data> 
     <RelocationType>1</RelocationType> 
     <DocNumber>RU/2013/2-68</DocNumber> 
     <IssueDate>2013-01-31T00:00:00</IssueDate> 
     <Format>1</Format> 
    </Data> 
</AppData> 

,我有XSD方案:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:ns1="http://smev.gosuslugi.ru/rev120315" xmlns:ns2="http://www.w3.org/2004/08/xop/include" 
    targetNamespace="http://smev.gosuslugi.ru/rev120315" elementFormDefault="qualified"> 
    <xsd:group name="group1"> 
     <xsd:sequence> 
      <xsd:sequence> 
       <xsd:element name="RelocationType" type="xsd:int" minOccurs="1" maxOccurs="1"/> 
       <xsd:element name="DocNumber" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
       <xsd:element name="IssueDate" type="xsd:dateTime" minOccurs="1" maxOccurs="1"/> 
       <xsd:element name="Format" type="xsd:int" minOccurs="1" maxOccurs="1"/> 
      </xsd:sequence> 
     </xsd:sequence> 
    </xsd:group> 
    <xsd:group name="group2"> 
     <xsd:sequence> 
      <xsd:element name="Certificate" type="ns1:Certificate" minOccurs="0" maxOccurs="1"/> 
     </xsd:sequence> 
    </xsd:group> 
    <xsd:group name="group3"> 
     <xsd:sequence> 
      <xsd:element name="RelocationType" type="xsd:int" minOccurs="1" maxOccurs="1"/> 
      <xsd:element name="Category" type="xsd:int" nillable="true" minOccurs="1" maxOccurs="1"/> 
      <xsd:element name="LastUpdate" type="xsd:dateTime" nillable="true" minOccurs="1" maxOccurs="1"/> 
     </xsd:sequence> 
    </xsd:group> 
    <xsd:group name="group4"> 
     <xsd:sequence> 
      <xsd:element name="Certificates" type="ns1:ArrayOfCertificate" minOccurs="0" maxOccurs="1"/> 
     </xsd:sequence> 
    </xsd:group> 
    <xsd:group name="group5"> 
     <xsd:sequence> </xsd:sequence> 
    </xsd:group> 
    <xsd:group name="group6"> 
     <xsd:sequence> 
      <xsd:element name="Items" type="ns1:ArrayOfCategoryItem" minOccurs="0" maxOccurs="1"/> 
     </xsd:sequence> 
    </xsd:group> 
    <xsd:element name="AppData" type="ns1:AppDataType"/> 
    <xsd:complexType name="AppDataType"> 
     <xsd:sequence> 
      <xsd:element name="Data" type="ns1:DataType"/> 
     </xsd:sequence> 
    </xsd:complexType> 
    <xsd:complexType name="DataType"> 
      <xsd:choice maxOccurs="unbounded" minOccurs="0"> 
       <xsd:group ref="ns1:group1"/> 
       <xsd:group ref="ns1:group2"/> 
       <xsd:group ref="ns1:group3"/> 
       <xsd:group ref="ns1:group4"/> 
       <xsd:group ref="ns1:group5"/> 
       <xsd:group ref="ns1:group6"/> 
      </xsd:choice> 
    </xsd:complexType> 
    <xsd:complexType name="Certificate"> 
     <xsd:sequence> 
      <xsd:element name="RelocationType" type="xsd:int" minOccurs="1" maxOccurs="1"/> 
      <xsd:element name="DocNumber" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="IssueDate" type="xsd:dateTime" minOccurs="1" maxOccurs="1"/> 
      <xsd:element name="IssuedByOrg" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="IssuedByPerson" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="IsTemporary" type="xsd:boolean" minOccurs="1" maxOccurs="1"/> 
      <xsd:element name="Period" type="ns1:Period" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="Items" type="ns1:ArrayOfItem" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="ExportData" type="ns1:ExportData" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="ImportData" type="ns1:ImportData" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="Country" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="HasImage" type="xsd:boolean" minOccurs="1" maxOccurs="1"/> 
      <xsd:element name="LastUpdate" type="xsd:dateTime" minOccurs="1" maxOccurs="1"/> 
     </xsd:sequence> 
    </xsd:complexType> 
    <xsd:complexType name="Period"> 
     <xsd:sequence> 
      <xsd:element name="From" type="xsd:dateTime" minOccurs="1" maxOccurs="1"/> 
      <xsd:element name="To" type="xsd:dateTime" minOccurs="1" maxOccurs="1"/> 
     </xsd:sequence> 
    </xsd:complexType> 
    <xsd:complexType name="ArrayOfItem"> 
     <xsd:sequence> 
      <xsd:element name="Item" type="ns1:Item" nillable="true" minOccurs="0" maxOccurs="unbounded"/> 
     </xsd:sequence> 
    </xsd:complexType> 
    <xsd:complexType name="ExportData"> 
     <xsd:sequence> 
      <xsd:element name="DocOwnerName" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="DocOwnerAddress" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="Purpose" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="Reason" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
     </xsd:sequence> 
    </xsd:complexType> 
    <xsd:complexType name="ImportData"> 
     <xsd:sequence> 
      <xsd:element name="DocOwnerName" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="DocOwnerAddress" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="DocOwnerInn" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="ReceiverName" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="ReceiverAddress" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="ReceiverInn" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="ContractNumber" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="ContractDate" type="xsd:dateTime" nillable="true" minOccurs="1" maxOccurs="1"/> 
      <xsd:element name="AgreementSection" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
     </xsd:sequence> 
    </xsd:complexType> 
    <xsd:complexType name="Item"> 
     <xsd:sequence> 
      <xsd:element name="Category" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="Description" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="Quantity" type="xsd:float" minOccurs="1" maxOccurs="1"/> 
      <xsd:element name="MeasureUnitId" type="xsd:int" minOccurs="1" maxOccurs="1"/> 
     </xsd:sequence> 
    </xsd:complexType> 
    <xsd:complexType name="ArrayOfCertificate"> 
     <xsd:sequence> 
      <xsd:element name="Certificate" type="ns1:Certificate" nillable="true" minOccurs="0" maxOccurs="unbounded"/> 
     </xsd:sequence> 
    </xsd:complexType> 
    <xsd:complexType name="GetCategoriesRequestAppData"/> 
    <xsd:complexType name="ArrayOfCategoryItem"> 
     <xsd:sequence> 
      <xsd:element name="CategoryItem" type="ns1:CategoryItem" nillable="true" minOccurs="0" maxOccurs="unbounded"/> 
     </xsd:sequence> 
    </xsd:complexType> 
    <xsd:complexType name="CategoryItem"> 
     <xsd:sequence> 
      <xsd:element name="CategoryId" type="xsd:int" minOccurs="1" maxOccurs="1"/> 
      <xsd:element name="Name" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="ParentId" type="xsd:int" nillable="true" minOccurs="1" maxOccurs="1"/> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:schema> 

,但验证后,我有错误:

XML可以在不同的组的标签,但只有“group1”或“group2”之一等。

我解决了这个问题。稍微重新安排了XSD模式,错误消失了,以及XML已经验证。 谢谢在这里写下评论然后删除它的人,但它帮助了我。 :)

XSD:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns1="http://smev.gosuslugi.ru/rev120315" xmlns:ns2="http://www.w3.org/2004/08/xop/include" targetNamespace="http://smev.gosuslugi.ru/rev120315" elementFormDefault="qualified"> 
    <xsd:element name="AppData" type="ns1:AppDataType"/> 
    <xsd:complexType name="AppDataType"> 
     <xsd:sequence> 
      <xsd:element name="Data" type="ns1:DataType"/> 
     </xsd:sequence> 
    </xsd:complexType> 
    <xsd:complexType name="DataType"> 
     <xsd:choice maxOccurs="1" minOccurs="1"> 
      <xsd:sequence> 
       <xsd:element name="RelocationType" type="xsd:int" minOccurs="1" maxOccurs="1"/> 
       <xsd:choice> 
        <xsd:sequence> 
         <xsd:element name="DocNumber" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
         <xsd:element name="IssueDate" type="xsd:dateTime" minOccurs="1" maxOccurs="1"/> 
         <xsd:element name="Format" type="xsd:int" minOccurs="1" maxOccurs="1"/> 
        </xsd:sequence> 
        <xsd:sequence> 
         <xsd:element name="Category" type="xsd:int" nillable="true" minOccurs="1" maxOccurs="1"/> 
         <xsd:element name="LastUpdate" type="xsd:dateTime" nillable="true" minOccurs="1" maxOccurs="1"/> 
        </xsd:sequence> 
       </xsd:choice> 
      </xsd:sequence> 
      <xsd:sequence> 
       <xsd:element name="Certificate" type="ns1:Certificate" minOccurs="0" maxOccurs="1"/> 
      </xsd:sequence> 
      <xsd:sequence> 
       <xsd:element name="Certificates" type="ns1:ArrayOfCertificate" minOccurs="0" maxOccurs="1"/> 
      </xsd:sequence> 
      <xsd:sequence> </xsd:sequence> 
      <xsd:sequence> 
       <xsd:element name="Items" type="ns1:ArrayOfCategoryItem" minOccurs="0" maxOccurs="1"/> 
      </xsd:sequence> 
     </xsd:choice> 
    </xsd:complexType> 
    <xsd:complexType name="Certificate"> 
     <xsd:sequence> 
      <xsd:element name="RelocationType" type="xsd:int" minOccurs="1" maxOccurs="1"/> 
      <xsd:element name="DocNumber" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="IssueDate" type="xsd:dateTime" minOccurs="1" maxOccurs="1"/> 
      <xsd:element name="IssuedByOrg" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="IssuedByPerson" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="IsTemporary" type="xsd:boolean" minOccurs="1" maxOccurs="1"/> 
      <xsd:element name="Period" type="ns1:Period" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="Items" type="ns1:ArrayOfItem" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="ExportData" type="ns1:ExportData" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="ImportData" type="ns1:ImportData" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="Country" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="HasImage" type="xsd:boolean" minOccurs="1" maxOccurs="1"/> 
      <xsd:element name="LastUpdate" type="xsd:dateTime" minOccurs="1" maxOccurs="1"/> 
     </xsd:sequence> 
    </xsd:complexType> 
    <xsd:complexType name="Period"> 
     <xsd:sequence> 
      <xsd:element name="From" type="xsd:dateTime" minOccurs="1" maxOccurs="1"/> 
      <xsd:element name="To" type="xsd:dateTime" minOccurs="1" maxOccurs="1"/> 
     </xsd:sequence> 
    </xsd:complexType> 
    <xsd:complexType name="ArrayOfItem"> 
     <xsd:sequence> 
      <xsd:element name="Item" type="ns1:Item" nillable="true" minOccurs="0" maxOccurs="unbounded"/> 
     </xsd:sequence> 
    </xsd:complexType> 
    <xsd:complexType name="ExportData"> 
     <xsd:sequence> 
      <xsd:element name="DocOwnerName" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="DocOwnerAddress" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="Purpose" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="Reason" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
     </xsd:sequence> 
    </xsd:complexType> 
    <xsd:complexType name="ImportData"> 
     <xsd:sequence> 
      <xsd:element name="DocOwnerName" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="DocOwnerAddress" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="DocOwnerInn" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="ReceiverName" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="ReceiverAddress" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="ReceiverInn" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="ContractNumber" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="ContractDate" type="xsd:dateTime" nillable="true" minOccurs="1" maxOccurs="1"/> 
      <xsd:element name="AgreementSection" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
     </xsd:sequence> 
    </xsd:complexType> 
    <xsd:complexType name="Item"> 
     <xsd:sequence> 
      <xsd:element name="Category" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="Description" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="Quantity" type="xsd:float" minOccurs="1" maxOccurs="1"/> 
      <xsd:element name="MeasureUnitId" type="xsd:int" minOccurs="1" maxOccurs="1"/> 
     </xsd:sequence> 
    </xsd:complexType> 
    <xsd:complexType name="ArrayOfCertificate"> 
     <xsd:sequence> 
      <xsd:element name="Certificate" type="ns1:Certificate" nillable="true" minOccurs="0" maxOccurs="unbounded"/> 
     </xsd:sequence> 
    </xsd:complexType> 
    <xsd:complexType name="GetCategoriesRequestAppData"/> 
    <xsd:complexType name="ArrayOfCategoryItem"> 
     <xsd:sequence> 
      <xsd:element name="CategoryItem" type="ns1:CategoryItem" nillable="true" minOccurs="0" maxOccurs="unbounded"/> 
     </xsd:sequence> 
    </xsd:complexType> 
    <xsd:complexType name="CategoryItem"> 
     <xsd:sequence> 
      <xsd:element name="CategoryId" type="xsd:int" minOccurs="1" maxOccurs="1"/> 
      <xsd:element name="Name" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="ParentId" type="xsd:int" nillable="true" minOccurs="1" maxOccurs="1"/> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:schema>