此片段的XSD架构

时间:2010-11-22 21:48:48

标签: xml xsd

我正在编写一个模式,我想不出如何表示这个xml片段:

<ActionTaken>
   <Description partID="H1" sequenceNumber="01">i did this</Description>
   <Description partID="H1" sequenceNumber="02">and then some more stuff.</Description>
</ActionTaken>

我最初创作的是:

<xs:element name="ActionTaken">
   <xs:complexType>
      <xs:sequence>
         <xs:element name="Description" type="String400" minOccurs="1" maxOccurs="99" />
      </xs:sequence>
      <xs:attribute name="partID" type="STReportTypeEnum" />
      <xs:attribute name="partSequenceNumber" type="NumericTwoRJZ" />
   </xs:complexType>
 </xs:element>

但这是错误的,因为属性应用于ActionTaken元素,而不是Description元素。

  

注意:是否有 ANY 方法在元素之前声明属性?毕竟,属性确实来自之前元素!

所以我想弄清楚如何将属性推到Description元素上:

<xs:element name="ActionTaken">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="Description" type="String400" minOccurs="1" maxOccurs="99" />
            <xs:attribute name="partID" type="STReportTypeEnum" />
            <xs:attribute name="partSequenceNumber" type="NumericTwoRJZ" />
        </xs:sequence>
    </xs:complexType>
</xs:element>

这不起作用,因为attribute中没有sequence。我试过了:

<xs:element name="ActionTaken">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="Description" type="String400" minOccurs="1" maxOccurs="99" >
                <xs:attribute name="partID" type="STReportTypeEnum" />
                <xs:attribute name="partSequenceNumber" type="NumericTwoRJZ" />
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>

但这不起作用,因为他知道谁。

我可以随意尝试s h 凝灰岩;或者我可以得到真正的答案。


尝试4

<xs:element name="ActionTaken">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="Description" type="String400" minOccurs="1" maxOccurs="99" >
                <xs:attribute name="partID" type="STReportTypeEnum" />
                <xs:attribute name="partSequenceNumber" type="NumericTwoRJZ" />
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>

尝试5

<xs:element name="DescriptionOfSuspiciousActivity">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="Description" type="String400" minOccurs="1" maxOccurs="99">
                <xs:complexType>
                    <!--Description of Suspicious Activity (Part G) attributes-->
                    <xs:attribute name="partID" type="STReportTypeEnum" />
                    <xs:attribute name="partSequenceNumber" type="NumericTwoRJZ" />
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>

尝试6

<xs:element name="ActionTaken">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="Description" type="String400" minOccurs="1" maxOccurs="99" >
                <xs:complexType>
                    <xs:attribute name="partID" type="STReportTypeEnum" />
                    <xs:attribute name="partSequenceNumber" type="NumericTwoRJZ" />
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>
骆驼:委员会设计的一匹马 XSD:由委员会设计

1 个答案:

答案 0 :(得分:3)

  

我可以随意尝试s h 凝灰岩;或者我可以得到真正的答案。

我建议您查看W3Schools XSD tutorial

您要做的是定义元素中定义为复杂类型的属性:

<xs:element name="ActionTaken"> 
  <xs:complexType> 
    <xs:sequence> 
      <xs:element name="Description" 
        type="DescriptionString400" minOccurs="1" maxOccurs="99"
      />
    </xs:sequence> 
  </xs:complexType> 
</xs:element> 
<xs:complexType name="DescriptionString400">
  <xs:simpleContent>
    <xs:extension base="String400">
      <xs:attribute name="partID" type="STReportTypeEnum" /> 
      <xs:attribute name="partSequenceNumber" type="NumericTwoRJZ" />
    </xs:extension>
  </xs:simpleContent>
</xs:complexType>