Как написать что-нибудь в Relax NG?

Есть ли способ написать, что в Relax NG полностью отсутствуют ограничения на содержимое элемента?

В XML-схеме что-то подобное, по-видимому, возможно с помощью

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

Могу ли я сделать аналог этого в Relax NG?


person che    schedule 16.11.2012    source источник


Ответы (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>
person Vincent Biragnet    schedule 05.12.2012

Хорошо, я не знаю, лучший ли это способ, но я адаптировал это из «любого» определения в спецификации 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>
person che    schedule 16.11.2012
comment
В вашем решении есть проблема, обнаруженная парсером Jing: найден элемент, соответствующий запрещенному пути start//oneOrMore в упрощенной XML-форме схемы (см. раздел 7.1 спецификации RELAX NG) - person Vincent Biragnet; 05.12.2012