如何在Relax NG中写“任何事情”?

时间:2012-11-16 21:52:41

标签: relaxng

有没有办法写一下,在Relax NG中对元素的内容完全没有限制?

在XML Schema中,显然可以使用

<xs:sequence>
   <xs:any namespace="##targetNamespace" processContents="lax"
       minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>

我可以在Relax NG中做相同的操作吗?

2 个答案:

答案 0 :(得分:1)

我提出这个解决方案,划分属性和元素声明,并使用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>

答案 1 :(得分:0)

好吧,我不知道这是不是最好的方式,但我已经从#34;任何&#34; 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>