2

次の複合型があるとします

<xs:complexType name="matrix">
    <xs:simpleContent>
        <xs:extension base="xs:string">
            <xs:attribute name="rows" type="xs:integer" use="required" />
            <xs:attribute name="cols" type="xs:integer" use="required" />
        </xs:extension>
    </xs:simpleContent>
</xs:complexType>

これはマトリックスを表します。アイデアは、次のように入力できるということです (たとえば、2x2 マトリックスの場合)。

<matrix rows=2 cols=2>1,2,3,4</matrix>

ここで、このタイプに基づいて要素を作成したいとします。

<xs:element name="eulerangles" type="matrix">

この場合、rows 属性と cols 属性を明示的に設定する必要がありますが、この要素は常に 3 行 3 列になります。3 行と 3 列が必要であることを明示的に指定する必要がないように、スキーマで属性を特定の数値に設定することは何とか可能ですか?

つまり、これを書く代わりに:

<eulerangles rows=3 cols=3>1,2,3,4,5,6,7,8,9</eulerangles>

こんな風に書けるようになりたい

<eulerangles>1,2,3,4,5,6,7,8,9</eulerangles>

オイラーアングルを 3 行 3 列の「行列」タイプにします。

注: 私は XML と XSD に非常に慣れていません。私のスタイルを改善するのに役立つコメントをいただければ幸いです。

4

2 に答える 2

0

私はあなたがこれを行うことができるはずだと思います:

<xs:complexType name="eulerangles">
    <xs:simpleContent>
        <xs:restriction base="matrix">
            <xs:attribute name="rows" type="xs:integer" fixed="3"/>
            <xs:attribute name="cols" type="xs:integer" fixed="3"/>
        </xs:restriction>
    </xs:simpleContent>
</xs:complexType>

XSD 1.1 では、アサーションを追加できます

<xs:assert test="count(tokenize($value, ',')) = @rows * @cols"/>
于 2013-10-21T14:58:52.357 に答える