2009-11-10 144 views
1

我有我創建的XSD。一個事務頭可以有一個或多個事務項。這個XSD將只允許一個XML文件中的一個事務標題和多個事務項目。我正在尋找MULTIPLE Transaction Headers與它有關的多個Transaction-Items。 XSD中缺少什麼來允許我這樣做?謝謝。XSD父子關係

<?xml version="1.0" encoding="UTF-8"?> 
<!--W3C Schema generated by XMLSpy v2010 (http://www.altova.com)--> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="transaction-item"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element ref="StartDate"/> 
       <xs:element ref="EndDate"/> 
       <xs:element ref="Amount"/> 
       <xs:element ref="BusinessPartnerID"/> 
       <xs:element ref="Description"/> 
      </xs:sequence> 
      <xs:attribute name="type" use="required"> 
       <xs:simpleType> 
        <xs:restriction base="xs:string"> 
         <xs:enumeration value="Production or Import"/> 
         <xs:enumeration value="Transfer: Release Obligation"/> 
         <xs:enumeration value="Transfer: Retain Obligation"/> 
         <xs:enumeration value="Acquire: Without Obligation"/> 
         <xs:enumeration value="Acquire: With Obligation"/> 
        </xs:restriction> 
       </xs:simpleType> 
      </xs:attribute> 
     </xs:complexType> 
    </xs:element> 
    <xs:element name="Amount"> 
     <xs:simpleType> 
      <xs:restriction base="xs:positiveInteger"/> 
     </xs:simpleType> 
    </xs:element> 
    <xs:element name="Year"> 
     <xs:simpleType> 
      <xs:restriction base="xs:short"/> 
     </xs:simpleType> 
    </xs:element> 
    <xs:element name="TransactionHeader"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element ref="Quarter"/> 
       <xs:element ref="Year"/> 
       <xs:element ref="FuelPathwayCode"/> 
       <xs:element ref="PhysicalPathwayCode"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    <xs:element name="StartDate"> 
     <xs:simpleType> 
      <xs:restriction base="xs:date"/> 
     </xs:simpleType> 
    </xs:element> 
    <xs:element name="Quarter"> 
     <xs:simpleType> 
      <xs:restriction base="xs:byte"/> 
     </xs:simpleType> 
    </xs:element> 
    <xs:element name="PhysicalPathwayCode"> 
     <xs:simpleType> 
      <xs:restriction base="xs:string"> 
       <xs:enumeration value="PP001"/> 
       <xs:enumeration value="PP002"/> 
       <xs:enumeration value="PP003"/> 
       <xs:enumeration value="PP004"/> 
       <xs:enumeration value="PP005"/> 
       <xs:enumeration value="PP006"/> 
       <xs:enumeration value="PP007"/> 
      </xs:restriction> 
     </xs:simpleType> 
    </xs:element> 
    <xs:element name="LCFS-report"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element ref="TransactionHeader"/> 
       <xs:element ref="transaction-item" maxOccurs="unbounded"/> 
      </xs:sequence> 
      <xs:attribute name="total-sum" use="required"> 
       <xs:simpleType> 
        <xs:restriction base="xs:byte"/> 
       </xs:simpleType> 
      </xs:attribute> 
      <xs:attribute name="detailed" type="xs:boolean" use="required"/> 
      <xs:attribute name="currency" use="required"> 
       <xs:simpleType> 
        <xs:restriction base="xs:string"> 
         <xs:enumeration value="USD"/> 
        </xs:restriction> 
       </xs:simpleType> 
      </xs:attribute> 
     </xs:complexType> 
    </xs:element> 
    <xs:element name="FuelPathwayCode"> 
     <xs:simpleType> 
      <xs:restriction base="xs:string"> 
       <xs:enumeration value="CARBOB001"/> 
       <xs:enumeration value="CARBOB002-HIGH"/> 
       <xs:enumeration value="CARBOB002-INC"/> 
       <xs:enumeration value="Ethanol001"/> 
       <xs:enumeration value="Ethanol002"/> 
       <xs:enumeration value="Ethanol003"/> 
       <xs:enumeration value="Ethanol004"/> 
       <xs:enumeration value="Ethanol005"/> 
       <xs:enumeration value="Ethanol006"/> 
       <xs:enumeration value="Ethanol007"/> 
       <xs:enumeration value="Ethanol008"/> 
       <xs:enumeration value="Ethanol009"/> 
       <xs:enumeration value="Ethanol0010"/> 
       <xs:enumeration value="Ethanol0012"/> 
       <xs:enumeration value="Fossil CNG001"/> 
       <xs:enumeration value="Fossil CNG002"/> 
       <xs:enumeration value="Biogas CNG001"/> 
       <xs:enumeration value="Electricity001_30"/> 
       <xs:enumeration value="Electricity002_27"/> 
       <xs:enumeration value="ULSD-CA Diesel Fuel"/> 
       <xs:enumeration value="Compressed Hydrogen001"/> 
       <xs:enumeration value="Liquid Hydrogen001"/> 
       <xs:enumeration value="Compressed Hydrogen002"/> 
       <xs:enumeration value="Compressed Hydrogen003"/> 
      </xs:restriction> 
     </xs:simpleType> 
    </xs:element> 
    <xs:element name="EndDate"> 
     <xs:simpleType> 
      <xs:restriction base="xs:date"/> 
     </xs:simpleType> 
    </xs:element> 
    <xs:element name="Description"> 
     <xs:simpleType> 
      <xs:restriction base="xs:string"/> 
     </xs:simpleType> 
    </xs:element> 
    <xs:element name="BusinessPartnerID"> 
     <xs:simpleType> 
      <xs:restriction base="xs:short"/> 
     </xs:simpleType> 
    </xs:element> 
</xs:schema> 
+0

是TransactionHeader的頂級標記嗎? – geofftnz 2009-11-10 21:40:44

+1

建議:將您的XSD降至最低限度,以說明您的問題,但保持格式良好。刪除或刪除不適用於該問題的任何內容。如果樣本是30行而不是200,那麼您更有可能獲得幫助。 – 2009-11-10 21:47:35

回答

2

首先,我想你TransactionHeader轉換爲一個單獨的類型:

<xs:complexType name="TransactionHeaderType"> 
      <xs:sequence> 
        <xs:element ref="Quarter"/> 
        <xs:element ref="Year"/> 
        <xs:element ref="FuelPathwayCode"/> 
        <xs:element ref="PhysicalPathwayCode"/> 
      </xs:sequence> 
    </xs:complexType> 

然後,你可以定義複雜類型的新元素可以包含任意數量的交易頭:

<xs:element name="Root"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="TransactionHeader" 
        type="TransactionHeaderType" 
        minOccurs="0" maxOccurs="unbounded"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 

默認情況下,在XML Schema中,minOccursmaxOccurs都設置爲1 - 但按照順序,您可以將該數字更改爲任何您喜歡的內容 - 包括爲maxOccurs創建「無界」。

Marc