2012-03-20 131 views
0

我發現這個問題有點幫助,但並不完全。如何以任意順序製作XSD

XSD - how to allow elements in any order any number of times?

我有以下的XML我想驗證對XSD。 XSD是有效的,但我得到XML錯誤。它說Unexpected element FirmAgent in element <element>. No further element expected

我的要求是:

  • <element>可以出現多次內部<element>
  • 元素可以有的多次出現,有些是可選的,但都應該按任何順序

我盡我所能地做到了這一點。 這裏是XML:

<?xml version="1.0" encoding="UTF-8"?> 
<archive-elements xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="update1.xsd"> 
    <element type="1"> 
     <AdminDistrict>Tes4tveien</AdminDistrict> 
     <FirmAgent>Testv12eien</FirmAgent> 
     <UpdateByPersNum>Te5stveien</UpdateByPersNum> 
     <AttachedFilesListNameInsurance>Test67veien</AttachedFilesListNameInsurance> 
     <AttachedFilesListURLInsurance>Testv2ien</AttachedFilesListURLInsurance> 
     <Saksnummer>asdf</Saksnummer> 
     <StatusSign>asdf</StatusSign> 
     <Status>asdf</Status> 
     <LocationNr>3</LocationNr> 
     <LineNr>01</LineNr> 
     <TariffNr>501</TariffNr> 
     <CompanyName>Test Person</CompanyName> 
     <OrganizationNr>12345678901</OrganizationNr> 
     <Email>[email protected]</Email> 
     <UpdateDate>09/30/2011 22:09</UpdateDate> 
     <ArchiveType>Godt voksen</ArchiveType> 
     <ArchiveApplyFor>Godt voksen Med sykdom</ArchiveApplyFor> 
     <TypeOfUpdate>1</TypeOfUpdate> 
     <DocID>CF26F4222B84991DC125791B006F333E</DocID> 
     <PolicyNr>4664735</PolicyNr> 
     <Form>Update1</Form> 
     <UpdatedBy>12345678901</UpdatedBy> 
     <Status>Effektuert</Status> 
     <BehandletKde> </BehandletKde> 
     <Status>Effektuert</Status> 
     <BehandletKde> sdf</BehandletKde> 
     <LabourCosts>123</LabourCosts> 
     <SumInsured>asdf</SumInsured> 
     <oldSumInsured>50.000</oldSumInsured> 
     <OtherChanges>Bla bla</OtherChanges> 
     <Coverage>asdf</Coverage> 
     <oldCoverage>yrke med lav risiko</oldCoverage> 
     <ValidFrom>01.10.11</ValidFrom> 
     <County>asdf</County> 
     <oldCounty>aasdf</oldCounty> 
     <LocatioName>asdf</LocatioName> 
     <oldLocatioName>Testveien 1</oldLocatioName> 
     <Question1>asdf</Question1> 
     <LabourCosts>asdf</LabourCosts> 
     <RefNum>asdf</RefNum> 
     <RegisterDate>sadf</RegisterDate> 
     <OpplastDat>asdf</OpplastDat> 
     <SumInsuredInHundred>asdf</SumInsuredInHundred> 
     <FraTms>asdf</FraTms> 
     <ValidFromType>sadfas2</ValidFromType> 
     <Transkode>asdf</Transkode> 
     <Period>asdf</Period> 
     <BehandlerSign>FCO</BehandlerSign> 
    </element> 
    <element type="1"> 
     <AdminDistrict>Tes4tveien</AdminDistrict> 
     <FirmAgent>Testv12eien</FirmAgent> 
     <UpdateByPersNum>Te5stveien</UpdateByPersNum> 
     <AttachedFilesListNameInsurance>Test67veien</AttachedFilesListNameInsurance> 
     <AttachedFilesListURLInsurance>Testv2ien</AttachedFilesListURLInsurance> 
     <Saksnummer>asdf</Saksnummer> 
     <StatusSign>asdf</StatusSign> 
     <Status>asdf</Status> 
     <LocationNr>3</LocationNr> 
     <LineNr>01</LineNr> 
     <TariffNr>501</TariffNr> 
     <CompanyName>Test Person</CompanyName> 
     <OrganizationNr>12345678901</OrganizationNr> 
     <Email>[email protected]</Email> 
     <UpdateDate>09/30/2011 22:09</UpdateDate> 
     <ArchiveType>Godt voksen</ArchiveType> 
     <ArchiveApplyFor>Godt voksen Med sykdom</ArchiveApplyFor> 
     <TypeOfUpdate>1</TypeOfUpdate> 
     <DocID>CF26F4222B84991DC125791B006F333E</DocID> 
     <PolicyNr>4664735</PolicyNr> 
     <Form>Update1</Form> 
     <UpdatedBy>12345678901</UpdatedBy> 
     <LabourCosts>123</LabourCosts> 
     <SumInsured>asdf</SumInsured> 
     <oldSumInsured>50.000</oldSumInsured> 
     <OtherChanges>Bla bla</OtherChanges> 
     <Coverage>asdf</Coverage> 
     <oldCoverage>yrke med lav risiko</oldCoverage> 
     <ValidFrom>01.10.11</ValidFrom> 
     <County>asdf</County> 
     <oldCounty>aasdf</oldCounty> 
     <LocatioName>asdf</LocatioName> 
     <oldLocatioName>Testveien 1</oldLocatioName> 
     <Question1>asdf</Question1> 
     <LabourCosts>asdf</LabourCosts> 
     <RefNum>asdf</RefNum> 
     <RegisterDate>sadf</RegisterDate> 
     <OpplastDat>asdf</OpplastDat> 
     <SumInsuredInHundred>asdf</SumInsuredInHundred> 
     <FraTms>asdf</FraTms> 
     <ValidFromType>sadfas2</ValidFromType> 
     <Transkode>asdf</Transkode> 
     <Period>asdf</Period> 
     <BehandlerSign>FCO</BehandlerSign> 
    </element> 
</archive-elements> 

這裏是XSD

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="archive-elements"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="element" maxOccurs="unbounded"> 
        <xs:complexType> 
         <xs:choice> 
          <xs:element name="AdminDistrict" type="xs:string"/> 
          <xs:element name="FirmAgent" type="xs:string"/> 
          <xs:element name="UpdateByPersNum" type="xs:string"/> 
          <xs:element name="AttachedFilesListNameInsurance" type="xs:string"/> 
          <xs:element name="AttachedFilesListURLInsurance" type="xs:string"/> 
          <xs:element name="Saksnummer" type="xs:string"/> 
          <xs:element name="StatusSign" type="xs:string"/> 
          <xs:element name="LocationNr" type="xs:string" /> 
          <xs:element name="LineNr" type="xs:string"/> 
          <xs:element name="TariffNr" type="xs:string"/> 
          <xs:element name="CompanyName" type="xs:string"/> 
          <xs:element name="OrganizationNr" type="xs:string"/> 
          <xs:element name="Email" type="xs:string"/> 
          <xs:element name="UpdateDate" type="xs:string"/> 
          <xs:element name="ArchiveType" type="xs:string"/> 
          <xs:element name="ArchiveApplyFor" type="xs:string"/> 
          <xs:element name="TypeOfUpdate"> 
           <xs:simpleType> 
            <xs:restriction base="xs:string"> 
             <xs:enumeration value="1"/> 
            </xs:restriction> 
           </xs:simpleType> 
          </xs:element> 
          <xs:element name="DocID" type="xs:string"/> 
          <xs:element name="PolicyNr" type="xs:string"/> 
          <xs:element name="Form"> 
           <xs:simpleType> 
            <xs:restriction base="xs:string"> 
             <xs:enumeration value="Update1"/> 
            </xs:restriction> 
           </xs:simpleType> 
          </xs:element> 
          <xs:element name="UpdatedBy" type="xs:string"/> 
          <xs:element name="Status" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> 
          <xs:element name="BehandletKde" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> 
          <xs:element name="SumInsured" type="xs:string"/> 
          <xs:element name="oldSumInsured" type="xs:string"/> 
          <xs:element name="OtherChanges" type="xs:string"/> 
          <xs:element name="Coverage" type="xs:string"/> 
          <xs:element name="oldCoverage" type="xs:string"/> 
          <xs:element name="ValidFrom" type="xs:string"/> 
          <xs:element name="County" type="xs:string"/> 
          <xs:element name="oldCounty" type="xs:string"/> 
          <xs:element name="LocatioName" type="xs:string"/> 
          <xs:element name="oldLocatioName" type="xs:string"/> 
          <xs:element name="Question1" type="xs:string"/> 
          <xs:element name="LabourCosts" type="xs:string" minOccurs="0"/> 
          <xs:element name="RefNum" type="xs:string" minOccurs="0"/> 
          <xs:element name="RegisterDate" type="xs:string" minOccurs="0"/> 
          <xs:element name="OpplastDat" type="xs:string" minOccurs="0"/> 
          <xs:element name="SumInsuredInHundred" type="xs:string" minOccurs="0"/> 
          <xs:element name="FraTms" type="xs:string" minOccurs="0"/> 
          <xs:element name="ValidFromType" type="xs:string" minOccurs="0"/> 
          <xs:element name="Transkode" type="xs:string" minOccurs="0"/> 
          <xs:element name="Period" type="xs:string" minOccurs="0"/> 
          <xs:element name="BehandlerSign" type="xs:string" minOccurs="0"/> 
         </xs:choice> 
         <xs:attribute name="type" use="required"> 
          <xs:simpleType> 
           <xs:restriction base="xs:string"> 
            <xs:enumeration value="1"/> 
           </xs:restriction> 
          </xs:simpleType> 
         </xs:attribute> 
        </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

回答

0

面臨這個問題,並在你的問題本質上是你說的,我想要的東西的XSD與旁邊沒有結構...

如果你使用xs:all,那麼你可以有任何順序的內部元素,0到1次。 (在0或1處使用minOccurs作爲強制/可選)。 如果你想要一個重複的元素,那麼你需要一個節點來綁定它們,例如訂單和訂單,但在您的示例中看不到一個。

xs:選擇問題,因爲它解決了許多問題,它很脆弱,常常是解析git。

我會認真思考一下你想要描述的xml的合理化,你要走的路是隱藏的。

你可以在推送時使用xs:any來讓你離開,並開始努力鞏固一切。

+0

但'xs:any'允許任何東西?我希望它只是從我指定的列表中允許? – 2012-03-21 15:47:23

+0

xs:所有人都會這樣做,但不能重複。我沒有制定我在這裏工作的規則...... – 2012-03-21 21:49:15