2009-11-10 121 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