XSD父子关系

XSD父子关系,xsd,parent-child,Xsd,Parent Child,我创建了一个XSD。事务标题可以是一个或多个事务项。这个XSD在XML文件中只允许一个事务头和多个事务项。我正在寻找与其相关的多个事务项的多个事务标题。XSD中缺少什么可以让我这样做?谢谢 <?xml version="1.0" encoding="UTF-8"?> <!--W3C Schema generated by XMLSpy v2010 (http://www.altova.com)--> <xs:schema xmlns:xs="http://www.w

我创建了一个XSD。事务标题可以是一个或多个事务项。这个XSD在XML文件中只允许一个事务头和多个事务项。我正在寻找与其相关的多个事务项的多个事务标题。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>

首先,我要将您的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模式中,
minOccurs
maxOccurs
都设置为1-但按顺序,您可以将该数字更改为您喜欢的任何数字-包括maxOccurs的“无界”


Marc

TransactionHeader是顶级标签吗?一个建议:将XSD缩减到能够说明问题但格式良好的最小值。删除或删除任何不适用于该问题的内容。如果示例是30行而不是200行,则您更有可能获得帮助。