0

有没有办法写出对 Relax NG 中元素的内容完全没有限制?

在 XML Schema 中,这样的事情显然是可能的

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

我可以在 Relax NG 中做同样的事情吗?

4

2 回答 2

2

我提出这个解决方案,划分属性和元素声明,并使用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>
于 2012-12-05T16:38:35.470 回答
0

好的,我不知道这是否是最好的方法,但我已经从 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>
于 2012-11-16T22:03:23.630 回答