0

次のようなxmlを作成できるようにしたいと思います。

<Restaurant>
<Property Name="Bar" Value="true" Type="boolean"/>
<Property Name="Grill" Value="true" Type="boolean"/>
<Property Name="Capacity" Value="120" Type="integer"/>
<Property Name="Size" Value="200.5" Type="decimal" Unit="square meter"/>
</Restaurant>

だから私はこのようにxsdを作成しました:

<xs:complexType name="Restaurant">
   <xs:element name="Property" type="Property" minOccurs="0" maxOccurs="unbounded"/>
</xs:element> 

<xs:complexType name="Property">
   <xs:attribute name="Name" type="xs:string" use="required"/>
   <xs:attribute name="Value" type="xs:anySimpleType" use="required"/>
   <xs:attribute name="Type" type="xs:string" use="required"/>
   <xs:attribute name="Unit" type="xs:string" use="optional"/>
</xs:complexType>

その属性「タイプ」を定義する方法は、スキーマの組み込みデータ型から 1 つだけにすることができますか? 考えられるすべての型で独自の列挙を作成したくありません。これにより、誰も書くことができないことを達成したいと思います:

<Property Name="Capacity" Value="120" Type="myOwnIntType"/>
4

2 に答える 2

1

設計したい XML の種類は、XSD が思いとどまらせるような設計です。実際、人々が次のような構造を使用している主な理由は、

<Property Name="Bar" Value="true" Type="boolean"/>

それよりも

<Bar>true</Bar>

構造の記述を別のスキーマにするのではなく、データの一部にしたいということです。両方を持つことはやり過ぎに思えます。

したがって、XSD 1.0 では実行できません。ただし、XSD 1.1 は、XSD の方法ではなく独自の方法で XML を設計したい人々に対してはるかに寛容であり、この種の使用例のために「条件付き型割り当て」の構造を導入しています。その属性の 1 つの値。現在、XSD 1.1 には、Saxon と Xerces の 2 つの実装があります。

于 2013-07-23T21:42:14.320 に答える
0

「Meta-XSD」(XSDを記述するXSDファイル)内では、「xs:QName」をタイプとして使用します。試してみましたか?

于 2013-07-23T18:45:11.683 に答える