0

'page'という属性があります。これは、スペースではなくコンマで区切られた2〜3個のダブルで構成され、オプションの「!」が付いています。最後に。次のすべてが有効です。

page="8.5,11,3!"
page="8.5,11.4,3.1"
page="8.5,11!"
page="8.5,2.1"

パターンを使用できることはわかっています。次のように機能します。

attribute page { xsd:string { pattern="[0-9]+(\.[0-9]+)?,[0-9]+(\.[0-9]+)(,[0-9]+(\.[0-9]+)?)?(!)?" } }

しかし、可能であれば、私はむしろこのようなものを使用したいと思います:

attribute page { xsd:double, ",", xsd:double, ( ",", xsd:double )?, ("!")? }

'list'を使用して、上記のような作業を行うことができます。

attribute page { list { xsd:double, ",", xsd:double, ( ",", xsd:double )?, ("!")? } }

しかし、その後、各部分の間にスペースができてしまいます。

page="8.5 , 11 !"

パターンを使用せずにこれを行う方法はありますか?

4

1 に答える 1

1

Relax NGには、単純型の定義方法に関する特別な規則はありません。このようなルールを作成する単純なタイプライブラリを使用できるように設計されています。したがって、原則として、はい、RelaxNGで好きなことを行うことができます。必要な機能を提供する単純なタイプライブラリを使用するだけです。

実際には、単純なタイプのXSDライブラリを使用しているようです。また、XSDでは、値が他の単純な値のシーケンスであるリストタイプの定義が可能ですが、定義とバリデーターを簡単にするために、XSDリスト値は空白のパーサーによって分割されます。XSDでは、値に任意の区切り文字を使用できません。したがって、Relax NGの単純型のXSDベースのライブラリでは、やりたいことを実行することはできません。

于 2013-02-16T17:41:54.973 に答える