0

次の XML 構造を検証する XSD を作成しようとしています。

<SystemData>
  <Item Value="Techno" ListType="Flat">
    <Node Value="Detroit" />
    <Node Value="Gabba" />
  </Item>
  <Item Value="House" ListType="Tree">
    <Node Value="Deep">
       <Node Value="New York" />
    </Node>
    <Node Value="Acid" />
    <Node Value="Chicago" />
  </Item>
</SystemData>

基本的に、一連の Node 要素を含むことができる Item 要素のシーケンスを含むルート SystemData 要素があり、それぞれが一連のノード要素を含むことができ、ツリーのような構造を n レベルにモデル化します

だから私はこれを思いついた:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="SystemData">
    <xs:complexType>
        <xs:sequence minOccurs="0" maxOccurs="unbounded">
            <xs:element name="Item">
                <xs:complexType>
                    <xs:sequence minOccurs="0" maxOccurs="unbounded">
                        <xs:element name="Node">
                            <xs:complexType>
                                <xs:attribute name="Value" type="xs:string" use="required"/>
                            </xs:complexType>
                        </xs:element>
                    </xs:sequence>
                    <xs:attribute name="Value" type="xs:string" use="required"/>
                    <xs:attribute name="ListType" type="xs:string" use="required"/>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>
</xs:schema>

Node 要素をそれ自体のシーケンスとして含めるにはどうすればよいですか?

4

1 に答える 1

1

アイデアは、型内で型を再利用するか、要素定義内で要素定義を再利用することによって、コンテンツ モデルを参照可能にすることです。これは、オーサリング スタイルに基づいて、アプローチを選択する際に別の基準を検討することを示唆しています。

オプション 1: ベネチアン ブラインド オーサリング スタイルで推奨されるタイプ内でタイプを再利用する。

私なら、変えるね:

<xs:sequence minOccurs="0" maxOccurs="unbounded"> 
    <xs:element name="Node">
        <xs:complexType>
            <xs:attribute name="Value" type="xs:string" use="required"/>
        </xs:complexType>
    </xs:element> 
</xs:sequence>

に:

<xs:sequence>
    <xs:element name="Node" type="NodeType" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>

そして追加:

<xs:complexType name="NodeType">
    <xs:sequence>
        <xs:element name="Node" type="NodeType" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="Value" type="xs:string" use="required"/>
</xs:complexType>

オプション 2: 「サラミ スライス」オーサリング スタイルの場合、代わりにグローバル要素を参照する必要があります。だから、私は変更します:

<xs:sequence minOccurs="0" maxOccurs="unbounded"> 
    <xs:element name="Node">
        <xs:complexType>
            <xs:attribute name="Value" type="xs:string" use="required"/>
        </xs:complexType>
    </xs:element> 
</xs:sequence>

に:

<xs:sequence>
    <xs:element ref="Node" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>

そして追加:

<xs:element name="Node">
    <xs:complexType>
        <xs:sequence>
        <xs:element ref="Node" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:attribute name="Value" type="xs:string" use="required"/>
    </xs:complexType>
</xs:element>
于 2012-09-04T17:08:56.457 に答える