クロスワードパズルのXSD 1.1にスキーマを作成しています。私の要素の1つは<dimensions>
です。例:XSDの他の値に基づいてXML要素値を制限する
<xs:element name="dimensions">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="\d+x\d+"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
結果のXMLは、パズルのグリッドは21個の正方形で21個の正方形であることを意味し、<dimensions>21x21</dimensions>
ようになります。
私はまた、パズルのすべての正方形に対して<cell>
要素を持っています。だから21x21の寸法のパズルの場合、私は<cell>
の441のインスタンスを持つでしょう。各<cell
>は、グリッド内での位置を記述する<coordinates>
要素を有する:
<xs:element name="cell">
<xs:complexType>
<xs:sequence>
<xs:element name="coordinates">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="\d+,\d+"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
それでグリッドの左下隅の角の位置は、それが21行であることを示す、<coordinates>21,1</coordinates>
で表されるであろう、 1列目。
私は次の操作を実行したい:
は
<dimensions>
に基づいて、すべての正方形のための1<cell>
があることが必要です。たとえば、寸法が21×21の場合、<cell>
のインスタンスが441個存在する必要があります。は、各
<cell>
ため<coordinates>
がユニークであると<dimensions
のパラメータの範囲内にする必要があります。換言すれば、21×21グリッドの場合、座標の各軸は1から21の間の数字で表されなければならず、441の組み合わせはそれぞれ1回しか使用できません。
を、私異なるサイズのグリッド(例えば、15x15)のパズルに対応する必要があるため、正確に21行/セルを必要とするようにスキーマをパラメータ化することはできません。だから、どのようにパラメータを次元に依存させることができるアサーションを書くだろうか? – Misenus
すべてのパズルに同じスキーマを正確に使用する必要がある場合は、もちろんそれをパラメータ化しても機能しません。しかし、さまざまなサイズのパズルに対応する必要があるため、パラメータ化する理由はありません。アサーションの使い方について - 今まで何を試しましたか? –
私は一般的なグリッドタイプとディメンションのための一連のスキーマを作成することができたと思いますが、それはおそらく学校向けのこのプロジェクトの範囲外です。私は、単語のパズルのような構造がたくさんある従来にないテキストをエンコーディングするためのTEI由来の(TEIに由来する?)スキーマを作成しようとしています。私はほとんどアサーションを理解する(私はちょうど私がこの関連する質問を投稿した昨日のことを学んだ:http://stackoverflow.com/questions/37127791/control-element-cardinality-based-on-an-attribute-inumeration-in-xsd )、私はまだ試みていない。 – Misenus