2011-08-04 17 views
0

は、私はそれがint型のブール日付またはテキストである場合によっては、アカウントに私のメタタイプと検証をとるスキーマを持つようにしたいメタ情報XMLスキーマ検証ユースケース

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

<metas> 
<meta type="date"> 
    <code>storage_date</code> 
    <value>12-02-1989</value> 
</meta> 
<meta type="int"> 
    <code>weight</code> 
    <value>12</value> 
</meta> 
<meta type="bool"> 
    <code>foo</code> 
    <value>true</value> 
</meta> 
<meta type="text"> 
    <code>bar</code> 
    <value>Hello world</value> 
</meta>  
</metas> 

ためのシンプルなXMLフォーマットを持っています。

これまでのところ、私は

<?xml version="1.0" encoding="utf-8"?> 
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:element name="metas" type="metasType" /> 
    <xsd:complexType name="metasType"> 
    <xsd:sequence> 
     <xsd:element maxOccurs="unbounded" name="meta" type="metaType" /> 
    </xsd:sequence> 
    </xsd:complexType> 

    <xsd:complexType name="metaType"> 
    ??? 
</xsd:schema> 

を持っているが、私は、スキーマで検証することが可能にを行うにしようとしています何ですか?

答えて

0

したがって、meta要素のtype属性でmeta要素の内容を制御する必要があります。それを行うための1つの方法は、以下のとおりです。

  1. レットが空タイプ
  2. がそれぞれ可能性
  3. のためにメタタイプから拡張することによって、新しい型を作成するメタタイプは、meta要素のtype属性を持っているXSIこと:タイプ
  4. メタタイプの実際のサブタイプを識別する必要があり
  5. type属性の値が使用されて

例: meta_intは、metaTypeのサブタイプとして定義します。そこでvalue要素を定義すると、xs:int型になります。次に、あなたのXMLになります:

<meta xsi:type="meta_int"> 
    <code>weight</code> 
    <value>12</value> 
</meta> 

別のアプローチは、さまざまな要素名ではなく、type属性(例えば、meta_int要素)を使用することです。選択グループを使用して、さまざまなmeta_ *要素の中から選択することができます。

アサーションを使用する方法もありますが、まだ公式ではないXSD 1.1の機能です(AFAIK)。

私はあなたが何をしているのかは分かりませんが、XSDでは要素名は一般的に次のコンテンツの制御に最も役立ちますが、属性。

関連する問題