2012-03-20 11 views
0

この質問はどのような助けがあったが、それほどではないことがわかった。任意の順序でXSDを作成する方法

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

私はXSDに対して検証する次のXMLを持っています。 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をしたい、と言っているされて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

です...

xs:allを使用すると、0から1の任意の順序で内部要素を持つことができます。 (必須/オプションの場合はminOccursを0または1で使用します)。 繰り返し要素が必要な場合は、ノードをバインドするノードが必要です。注文と注文は、あなたの例では1つを見ることはできません。

xs:選択肢は多くの問題を解決するもので、壊れやすいものであり、しばしば解析するgitです。

私はあなたが説明しようとしているXMLを合理化することについて真剣に考えているでしょう、あなたが行く方法は何にも隠れています。

xs:anyを使用すると、あなたを逃がしてくれることがあります。

+0

しかし、 'xs:any'は何でも許可しますか?指定したリストから許可するだけですか? –

+0

xs:allはそれを行いますが、繰り返しません。私はここで働いているルールを作り上げなかった... –

関連する問題