1

RelaxNGスキーマを使用してXMLファイルを検証したいと思います。検証の一環として、ノードのセットに空白がないことを確認したいと思います。たとえば、最初の2つの<emptyCheck>ノードを検証したいのですが、この例では3番目と4番目のノードが失敗します。

<?xml version="1.0" encoding="UTF-8"?>
<testRoot>
    <emptyCheck/>
    <emptyCheck></emptyCheck>
    <emptyCheck> </emptyCheck>
    <emptyCheck>x</emptyCheck>
</testRoot>

次のRelaxNGスキーマはほぼ機能します。上記のサンプルXMLは、の4番目のインスタンスでは失敗しますが、 3番目のインスタンスでは失敗し<emptyCheck>ません。

<?xml version="1.0" encoding="UTF-8"?>
<grammar ns="" xmlns="http://relaxng.org/ns/structure/1.0">
    <start>
        <element name="testRoot">
            <oneOrMore>
                <element name="emptyCheck">
                    <empty/>
                </element>
            </oneOrMore>
        </element>
    </start>
</grammar>

ほとんどのXML処理では、空白だけのノードは実際には重要ではないことを認識しています。コーディングスタイルガイドを適用できるように、これを解決したいと思います。それで、Relax NGスキーマを設定して、ノードが完全に空である必要があるときにノードに空白だけがあるかどうかをドキュメントが検証しないようにする方法はありますか?

4

1 に答える 1

3

決定には合理的な根拠がありますが、空と宣言された要素に空白を含めることを許可するのはRELAXNGの奇妙に思えるかもしれません。

とにかく、RELAX NGバリデーターがXSDデータ型をサポートしている場合(ほとんどの場合)、要素の内容を長さゼロの文字列にする必要があることを指定することで、それらを使用して許可される要素の内容をさらに制限できます。

<?xml version="1.0" encoding="UTF-8"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
  datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
  <start>
    <element name="testRoot">
      <oneOrMore>
        <element name="emptyCheck">
          <data type="string">
            <param name="maxLength">0</param>
          </data>
        </element>
      </oneOrMore>
    </element>
  </start>
</grammar>
于 2012-10-26T12:50:33.680 に答える