0

次のドキュメントの XML スキーマを作成しようとしています。s またはs のListいずれかを含む要素が必要です。TextItemList

<!-- a "List" containing "TextItem"s: -->

<List>
  <TextItem><TextItemData>foo</TextItemData></TextItem>
  <TextItem><TextItemData>bar</TextItemData></TextItem>
</List>


<!-- a "List" containing "List"s of "TextItem"s: -->

<List>

  <List>
    <TextItem><TextItemData>foo1</TextItemData></TextItem>
    <TextItem><TextItemData>bar1</TextItemData></TextItem>
  </List>

  <List>
    <TextItem><TextItemData>foo2</TextItemData></TextItem>
    <TextItem><TextItemData>bar2</TextItemData></TextItem>
  </List>

</List>

次の XML スキーマ定義は、タスクを実行します。

<xs:complexType name="TextItemType">
  <xs:sequence>
    <xs:element name="TextItemData" type="xs:string"/>
  </xs:sequence>
</xs:complexType>

<xs:complexType name="ListType">
  <xs:choice>
    <xs:sequence>
      <xs:element name="TextItem"    type="TextItemType"    minOccurs="0"   maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:element name="List"          type="ListType"        minOccurs="0"   maxOccurs="unbounded"/>
  </xs:choice>
</xs:complexType>

私が実際に欲しいのは、次のようなリストです( なしTextItemData):

<List>
  <TextItem>foo</TextItem>
  <TextItem>bar</TextItem>
</List>

TextItemの定義を の定義に組み込み、Listを取り除くことができTextItemDataます。TextItemただし、例では属性を省略しているため、 の定義は実際にはかなり複雑です。さらに、 などのアイテムもありますBinaryItems。の定義はList読めないほど大きくなります。

TextItemData要素の必要性を取り除くにはどうすればよいですか?

4

1 に答える 1

1

あなたが実際にやろうとしているのはこれのようです:

  <xs:complexType name="TextItemType">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="FirstAttribute" />
        <xs:attribute name="SecondAttribute" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="TextItem" type="TextItemType" />

ただし、その 1 つの要素にのみ使用する場合は、TextItemType を定義する必要はありません。代わりにこれを行うことができます:

  <xs:element name="TextItem">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:string">
          <xs:attribute name="FirstAttribute" />
          <xs:attribute name="SecondAttribute" />
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
于 2013-08-01T10:06:17.813 に答える