有効なスキーマを持ち、XML ドキュメントを持たないスキーマがあるのではないかと疑っています。もしあれば、いくつかの例を教えてください。
1 に答える
はい、有効なドキュメントのセットが空のセットであるスキーマを定義することは可能です-少なくとも、私が知っているすべてのスキーマ言語で、「有効なドキュメント」の合理的な定義が与えられています。
XSD、RNG、およびDTDでは、おそらく最も単純なそのようなスキーマは、要素を宣言しないスキーマです。XSDでは、これは次のように表現できます。
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"/>
単純な非空のスキーマは、満たされないタイプの要素を宣言することによって満たされない可能性があります。
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="unsatisfiable">
<xs:complexType>
<xs:choice/>
</xs:complexType>
</xs:element>
</xs:schema>
xs:choiceでは、選択した子の少なくとも1つが入力と一致する必要があるため、子がない選択は満足のいくものではありません。そして、ここにあるように、選択が必要な場合、タイプ全体としては満足のいくものではありません。
空の選択肢は、DTDでは使用できませんが、RelaxNGでも使用できます。
Relax NGでは、ルート要素またはルート要素の少なくとも1つの必要な子孫が満たされない限り、有効なインスタンスがないスキーマで満足できる要素を宣言することもできます。対照的に、XSDでは、満足のいく要素宣言または型定義があれば、空の言語はなくなります。XSDは、スキーマで、検証時に最も外側の要素が何であるかを言う方法を提供しません。
XSD、RNG、およびDTDでは、宣言されていない要素を含めることを要求することにより、要素を満足できないものにすることもできます。DTD表記の場合:
<!ELEMENT unsatisfiable (undeclared) >
また、これらの言語のいずれでも、無限のドキュメントでのみ満足できるスキーマを定義することができます。
<!ELEMENT e (e) >
XSD(およびXSDデータ型を使用するRelax NG)では、空の単純型を定義することもできます。
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="unsatisfiable">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minExclusive value="0"/>
<xs:maxExclusive value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:schema>
空の型を定義するいくつかの方法はXSDによって禁止されています。たとえば、最小および最大の排他値を同じ値に設定すると、XSDエラーが発生します。(ここでの理論的根拠は、WGの大多数が、空の型は意味がないと考えており、少なくとも正規表現パターンを含まない場合には、空の型の定義を効果的に防ぐことができるという幻想に苦しんでいたことです。例としてXSD 1.1では、満足できない単純型を定義する最もクリーンで最も明白な方法は、空の共用体型を定義することですが、さらに簡単な方法は、事前定義されたxs:error
型(それ自体が定義されている)を使用することです。空の共用体として)。これはXSD1.0では不可能であり、ユニオンには少なくとも2つのメンバータイプが必要です。