Relax NGで要素の内容に全く制限がないという書き方はありますか?
XMLスキーマでは、このようなことが明らかに可能です
<xs:sequence>
<xs:any namespace="##targetNamespace" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
これと同等のことを Relax NG で行うことはできますか?
Relax NGで要素の内容に全く制限がないという書き方はありますか?
XMLスキーマでは、このようなことが明らかに可能です
<xs:sequence>
<xs:any namespace="##targetNamespace" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
これと同等のことを Relax NG で行うことはできますか?
私はこの解決策を提案し、属性と要素の宣言を分割し、mixed
要素を使用して混合コンテンツを許可します。
<?xml version="1.0" encoding="UTF-8"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
<ref name="anyElement"/>
</start>
<define name="anyElement">
<element>
<anyName/>
<ref name="anyAttributes"/>
<mixed>
<zeroOrMore>
<ref name="anyElement"/>
</zeroOrMore>
</mixed>
</element>
</define>
<define name="anyAttributes">
<zeroOrMore>
<attribute>
<anyName/>
</attribute>
</zeroOrMore>
</define>
</grammar>
これが最善の方法かどうかはわかりませんが、Relax NG 仕様の「任意の」定義からこれを採用しました。
<?xml version="1.0" encoding="UTF-8"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<start>
<ref name="Anything"/>
</start>
<define name="Anything">
<zeroOrMore>
<choice>
<element>
<anyName/>
<ref name="Anything"/>
</element>
<attribute>
<anyName/>
</attribute>
<text/>
</choice>
</zeroOrMore>
</define>
</grammar>