2012-01-04 19 views
1

私はまだXMLスキーマを学んでいますので、うまくいけばこれはあまり簡単ではありません。
私は仕様、および他のさまざまなリソースを熟読んだけど、誰もがさらに読書を提案することができれば、私が提案にオープンよりもだ)しない私は後だ、XMLスキーマの多次元連想配列の構造

とにかく私の初心者に理解して可能であると思われるので、私は、誰かが私を修正することができます願っています(ので、証明それ可能

私は単純型、または別のノードのいずれかを含めることができる複合型を作成しようとしていますただし、両方ともではない;文字列「キー」属性を追加した)は、多次元連想配列を模倣しています。

問題は、私は2つの間で選択を許可する方法を理解できないようです(もちろん、これも可能かどうかわかりませんが、私の読書は私に信じています

<node key="string"> 
    <node key="string"> 
     arbitrary value 
    </node> 
    <node key="string"> 
     arbitrary value 
    </node> 
</node> 

しかしで無効:ないので)

、基本的に、私は、ターゲット文書が検証を持つために何をすべきかが必要になります

<node key="string"> 
    <node key="string"> 
     arbitrary value 
     <node key="string"> 
      arbitrary value 
     </node> 
    </node> 
</node> 

注混合コンテンツノード、私はことを許可したくないん)私がでてるところ

これは、次のとおりです。これは実際には不可能な場合

<xs:attribute name="key"> 
    <xs:simpleType> 
     <xs:restriction base="xs:string"> 
      <xs:whiteSpace value="collapse" /> 
      <xs:pattern value="[a-zA-Z_][a-zA-Z0-9_]*" /> 
     </xs:restriction> 
    </xs:simpleType> 
</xs:attribute> 
<xs:complexType name="data"> 
    <!-- what do i do? --> 
    <xs:attribute ref="key" use="required" /> 
</xs:complexType> 

、これもうまくいくと思いますが、これは合理的に共通のデータ構造のように思えます。

答えて

2

は、私はあなたがにデザインを変更した場合(だけでなく、XSDと、だけでなく、XSLTとXQueryで)簡単にプロセスにXMLを見つけるだろうと思う:

<node key="string"> 
    <node key="string"> 
     <value>arbitrary value</value> 
    </node> 
    <node key="string"> 
     <value>arbitrary value</value> 
    </node> 
</node> 

その後に指定するのは簡単だろう、あなたのノードのコンテンツモデルが選択であるスキーマ:ノードのシーケンス、または単一の値。

+0

ありがとう@MichaelKay - これは目にも簡単です。明確な+1(*私はこれをもう少し他の人のために座らせるだろうが、私はちょうどこの方向に行くかもしれないと思う*) – Dan