1

正しいプロセスを使用しているかどうか、または可能であるかどうかは完全にはわかりませんが、次のスキーマを定義する XSL ファイルを作成したいと考えています。

<data>
    <s>
        <name>Joe Blogs</name>
        <id>1235</id>
        <aa>data</aa>
        <ab>data</ab>
        <ad>data</ad>
        <ae>data</ae>
    </s>
    <s>
        <name>Jane Blogs</name>
        <id>1234</id>
        <ba>data</ba>
        <bb>data</bb>
    </s>
    <s>
        <name>Jane Blogs</name>
        <id>1234</id>
        <aa>data</aa>
        <ac>data</ac>
        <ad>data</ad>
        <ae>data</ae>
    <s>
</data>

だから基本的に:

  • タグは<data>ルートです。空にすることができます。
  • <s>タグは複数回表示できます 。
    • この<ba>タグには、 タグ が付随している必要があります<bb>
    • <aa>タグには、タグ<ad><ae>.
      • タグは(および関連付けられたタグ) が存在<ab>する場合にのみ表示する必要がありますが、場所および逆に表示してはなりません。<aa><ac>

これを要素で実装しようとしました:

<xs:schema version="1.0"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="qualified">

  <xs:element name="data">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="s" 
                    maxOccurs="unbounded" 
                    minOccurs="0">
          <xs:complexType>
            <xs:choice>
              <xs:sequence>
                <xs:element name="name"/>
                <xs:element name="id"/>
                <xs:element name="aa"/>
                <xs:element name="ab"/>
                <xs:element name="ad"/>
                <xs:element name="ae"/>
              </xs:sequence>
              <xs:sequence>
                <xs:element name="name"/>
                <xs:element name="id"/>
                <xs:element name="aa"/>
                <xs:element name="ac"/>
                <xs:element name="ad"/>
                <xs:element name="ae"/>
              </xs:sequence>
              <xs:sequence>
                <xs:element name="name"/>
                <xs:element name="id"/>
                <xs:element name="ba"/>
                <xs:element name="bb"/>
              </xs:sequence>
            </xs:choice>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

どんな助けでも大歓迎です。

4

1 に答える 1

1

あなたは近くにいます。name問題は、現在の宣言が与えられた場合、XSDバリデーターは、指定した3つのシーケンスのどれを選択する必要があるかを最初の要素と見なしたときに認識しないことです。入力を先読みして選択することは許可されていません。先読みせずにコンテンツモデルをナビゲートできる必要があります。

このように複合型を再定式化すると、その問題が解消されます。

<xs:complexType>
  <xs:sequence>
    <xs:element name="name"/>
    <xs:element name="id"/>
    <xs:choice>
      <xs:sequence>
        <xs:element name="ba"/>
        <xs:element name="bb"/>
      </xs:sequence>
      <xs:sequence>
        <xs:element name="aa"/>
        <xs:choice>
          <xs:element name="ab"/>
          <xs:element name="ac"/>                  
        </xs:choice>
        <xs:element name="ad"/>
        <xs:element name="ae"/>
      </xs:sequence>
    </xs:choice>
  </xs:sequence>
</xs:complexType>

ご覧のとおり、私が行ったのは、選択したものに共通するプレフィックスを除外し、それらを選択ポイントの前に置くことだけです。

于 2012-12-29T02:17:02.517 に答える