14

要素は「文字列のリスト」のタイプを持っている必要があり0、そのタイプの情報が複数存在する可能性があります。だから私がしたことは:

<xs:element name="xxx" type="ooo" />

<xs:simpleType name="ooo">
   <xs:list itemType="xs:string" />
</xs:simpleType>

これは正しいと思いますが

どこに置いminOccurmaxOccurここに?

4

3 に答える 3

32

残念ながら、あなたの質問は複数のことを意味する可能性があるため、不明確です。

考えられる解釈の 1 つは、要素「xxx」が 0 回から x 回の間に発生するようにすることです。これは、ルート要素内でシーケンスを定義することによって行われます。

<xs:simpleType name="ooo">
  <xs:restriction base="xs:string" />
</xs:simpleType>

<xs:element name="root">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="xxx" type="ooo" minOccurs="0" maxOccurs="unbounded" />
    </xs:sequence>
  </xs:complexType>
</xs:element>

XML には 1 つのルート要素しか存在できないため、ルート要素に minOccurs と maxOccurs を指定することはできません。ただし、シーケンスをルート要素の子として定義できます。これは、上記の例で行われていることです。

「xxx」をルート要素にしたい場合は、まったく同じことを効果的に行うことができます。これはまったく同じですが、「root」という要素の代わりに「xxx」という要素があり、子要素は「ooo」というタイプの別のものと呼ばれます。

<xs:simpleType name="ooo">
  <xs:restriction base="xs:string" />
</xs:simpleType>

<xs:element name="xxx">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="xxx-child" type="ooo" maxOccurs="unbounded" minOccurs="0" />
    </xs:sequence>
  </xs:complexType>
</xs:element>

あなたの例では、「リスト」タイプの使用法は、あなたがそれを意味すると思うことを意味します。XSD のリスト型は要素のシーケンスを定義しませんが、スペースで区切られた値のリストを持つことができる単一の要素を定義します。

<xs:simpleType name="ooo">
  <xs:list itemType="xs:string" />
</xs:simpleType>

<xs:element name="xxx" type="ooo" />

このスキーマ定義から得られる XML は次のようになります。

<xxx>item1 item2 item3 item4 item5</xxx>

XML は実質的に、スペースで区切られた、任意の長さの文字列の制限のないリストです。値の型を制限するために継承するリストの型を定義できますがxs:string、長さを制限する方法は知りません。

そして最後に、あなたが達成しようとしていると思うのは、上記の「xxx」と「xxx-child」に関する私の提案の1つに近いですが、シーケンスが定義されている場所を再フォーマットするだけです.

<xs:complexType name="ooo">
  <xs:sequence minOccurs="0" maxOccurs="unbounded">
    <xs:element name="child" type="xs:string" />
  </xs:sequence>
</xs:complexType>

<xs:element name="xxx" type="ooo" />

結果の XML は次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<xxx>
  <child></child>
  <child></child>
  <child></child>
</xxx>

minOccurs="0" maxOccurs="unbounded"から<xs:sequence>「子」要素に移動するなど、最後のオプションには他のバリエーションがあります。あなたの例では、両方の定義がまったく同じ XML になるため、まったく問題になりません。ただし、子要素が 2 つある場合は、異なる意味になります。

<xs:complexType name="ooo">
  <xs:sequence minOccurs="0" maxOccurs="unbounded">
    <xs:element name="child1" type="xs:string" />
    <xs:element name="child2" type="xs:string" />
  </xs:sequence>
</xs:complexType>

次のような XML になります (child1 の後に child2 が続くシーケンスが x 回繰り返されます)。

<?xml version="1.0" encoding="utf-8"?>
<xxx>
  <child1></child1>
  <child2></child2>
  <child1></child1>
  <child2></child2>
  <child1></child1>
  <child2></child2>
</xxx>

一方

<xs:complexType name="ooo">
  <xs:sequence>
    <xs:element name="child1" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
    <xs:element name="child2" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
  </xs:sequence>
</xs:complexType>

次のような XML になります (child1 は x 回繰り返し、次に child2 は y 回繰り返します)。

<?xml version="1.0" encoding="utf-8"?>
<xxx>
  <child1></child1>
  <child1></child1>
  <child2></child2>
  <child2></child2>
  <child2></child2>
  <child2></child2>
  <child2></child2>
</xxx>
于 2012-09-19T12:12:28.523 に答える
-1

これは私が見つけたコードサンプルです。

<xs:element name="person">
<xs:complexType>
        <xs:sequence>
          <xs:element name="full_name" type="xs:string"/>
          <xs:element name="child_name" type="xs:string"
          maxOccurs="10" minOccurs="0"/>
        </xs:sequence>
</xs:complexType>
</xs:element>
于 2012-09-19T11:48:06.140 に答える