2009-07-19 9 views
3

モデルプロパティ(名前/値のペア):XSD:私は同じような特性を定義するXMLを持って

<properties> 
    <property name="play_sound" value="true" /> 
    <property name="duration" value="30" /> 
</properties> 

ことが可能であり、XMLスキーマで、などの条件を指定して「プロパティ名には、 『期間は』の場合値は整数でなければなりません "。私はそれが可能ではないと思う、XMLファイルのその種の情報をモデル化するための推奨される方法は何ですか?

私のようなものを考えている:私は私のスキーマに型restrictionosを定義することができる方法

<properties> 
    <play_sound>true</play_sound> 
    <duration>30</duration> 
</properties> 

。しかし、何百という異なるプロパティがあり、将来的に成長する可能性がある場合はどうなりますか?

ありがとうございます。

答えて

1

XMLスキーマ1.0には、これらの種類の制約はありません。

XML Schema 1.1が開発中です。

Saxon XSLT/XQueryエンジンを使用する場合は、実験用にXML Schema 1.1の初期実装が含まれています。

もう1つのオプションはSchematronです。

しかし、通常、これらはアプリケーション内部で処理されます。 XMLスキーマは、データの構造を説明するのに公正ですが、実際にコンテンツを検証するのにはあまり適していません。

1

私はあなたがプロパティ名でこれを強制することはできないと思います。あなたはおそらくSchematronで何かをすることができます。

冗長な厳密スキーマとリラックスコンパクトスキーマの間には一般的なトレードオフがあります。あなたは、XMLファイルがどのように使われているのか、Xsdがどのように使われているのかに基づいて、あなたの状況をより良く判断する必要があります。

1

XSDに条件付きサポートがありません。パーサーがXMLを検証することは絶対に重要ですか?

もしそうなら、あなたの唯一のオプションは、(あなたが説明してきたような)タイプなどのプロパティを定義したりしているなどの属性(例えば<my_object play_sound="true" duration="30"/>

通常

、検証は後の段階で発生した場合しかし、それは問題ではありません(例えば、あなたのXMLがあなたのアプリケーションによって消化されているとき)、あなたが望むことをするのは簡単です。

2

XMLを特定の属性または特定のタイプの要素でモデル化することをお勧めします。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="properties"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="play_sound" type="xs:boolean"/> 
       <xs:element name="duration" type="xs:byte"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

<properties> 
    <play_sound>true</play_sound> 
    <duration>30</duration> 
</properties> 
関連する問題