0

次のようなものを含む XML 構造があります。

<goal id="doStuff" .. />
<score goal="doStuff" value="true" points="10" />

うまく機能します...入力がより複雑になるまで: スコアは複数の目標に依存できるようになりました。私たちは次のことを考慮しました:

<goal id="doStuff" .. />
<goal id="doOtherStuff" .. />
<goal id="dontDoThis" .. />
<score goal1="doStuff" value1="true" points="10" />
<score goal1="doOtherStuff" value1="true" goal2="dontDoThis" value2="false" points="20" />

しかし、スコアが依存できるゴール数に制限はないため、ある時点でこの形式が壊れる可能性があります。最終的に、次のようになりました。

<goal id="doStuff" .. />
<goal id="doOtherStuff" .. />
<goal id="dontDoThis" .. />
<score doStuff="true" points="10" />
<score doOtherStuff="true" dontDoThis="false" points="20" />

これはアプリケーション自体では機能しますが、これを適切に検証するための XML スキーマの記述方法を理解できませんでした。別の要素によって定義された要素に有効な名前を付けることができないようです (XML スキーマ仕様のパート 0 しか読んでいないことを認めなければなりません。パート 1 とパート 2 で Ctrl+F を 2 回だけ使用しました)。

スコアは、私の制御の及ばないルールに従って計算する必要があります。たとえば、目標の定義方法を変更することは選択肢ではありません。私が持っている唯一の柔軟性は、XML の構造です。XMLスキーマで検証できるように、指定された構造をXMLにエンコードする方法を誰かが提案できますか?

4

1 に答える 1

0

XML の構造を自由に変更できる場合は、次のように、必要な目標をスコアの子要素として追加することを検討できます。

<goal id="doStuff" />
<goal id="doOtherStuff" />
<goal id="dontDoThis" />
<score points="10">
  <scoreGoal goal="doStuff" value="true" />
</score>
<score points="20">
  <scoreGoal goal="doOtherStuff" value="true" />
  <scoreGoal goal="dontDoThis" value="false" />
</score>

次に、スキーマを検証できます。次に例を示します。

<xs:sequence>
  <xs:element maxOccurs="unbounded" name="goal">
    <xs:complexType>
      <xs:attribute name="id" type="xs:string" use="required" />
      <!--...-->
    </xs:complexType>
  </xs:element>
  <xs:element maxOccurs="unbounded" name="score">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="scoreGoal">
          <xs:complexType>
            <xs:attribute name="goal" type="xs:string" use="required" />
            <xs:attribute name="value" type="xs:boolean" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="points" type="xs:int" use="required" />
    </xs:complexType>
  </xs:element>
</xs:sequence>

PS。要素名scoreGoalが最良の選択ではないことは承知していますが、データ構造が何を表しているかについては何も知らないので、適切な名前を付けてください。

于 2013-10-24T09:41:44.670 に答える