Xml 允许使用Relax NG添加其他属性

Xml 允许使用Relax NG添加其他属性,xml,xsd,relaxng,jing,Xml,Xsd,Relaxng,Jing,我正在编写一个RELAXNG模式来验证一些XML文件。 对于大多数元素,都有一些必需的属性,此XML模式的实例还可以添加任何额外的属性 例如,以下是一个有效的文档: <?xml version="1.0" encoding="utf-8" ?> <root xmlns:param="some-uri#params"> <someElement param:requiredAttribute1="foo" param:requi

我正在编写一个RELAXNG模式来验证一些XML文件。 对于大多数元素,都有一些必需的属性,此XML模式的实例还可以添加任何额外的属性

例如,以下是一个有效的文档:

<?xml version="1.0" encoding="utf-8" ?>
<root xmlns:param="some-uri#params">
   <someElement
        param:requiredAttribute1="foo" 
        param:requiredAttribute2="bar"
        param:freeExtraParam="toto"
        param:freeExtraParam="titi" />
</root>
我想这是因为requiredAttribute1也与“任意属性”规则相匹配。 这样做的正确方式是什么

提前感谢,,
Raphael

第一点:开始元素是定义XML根元素的地方。在这个开始元素中不可能有属性

关于您的属性:下面的模式,使用
除外
应该是您的答案:

<grammar 
    xmlns="http://relaxng.org/ns/structure/1.0" 
    datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
    <start>
        <element name="root">
            <ref name="someElement"/>
        </element>
    </start>
    <define name="someElement">
        <element name="someElement">
            <zeroOrMore>                
                <attribute ns="some-uri#params">
                    <anyName>
                        <except>
                            <name>requiredAttribute1</name>
                            <name>requiredAttribute2</name>
                        </except>
                    </anyName>
                </attribute>
            </zeroOrMore>
            <attribute ns="some-uri#params" name="requiredAttribute1"/>
            <attribute ns="some-uri#params" name="requiredAttribute2"/>
        </element>
    </define>
</grammar>

必需属性1
所需属性2

Thks。关于第一点,这只是我在简化问题示例时犯的一个错误。我已经编辑并修复了它。我曾经想到过“except”关键字,但我想避免它,因为它阻止我编写一个名为pattern.OK的泛型“extracelements”。我不认为你能做到这一点,没有例外,是通用的。
 error: duplicate attribute "requiredAttribute1" from namespace "some-uri#params"
<grammar 
    xmlns="http://relaxng.org/ns/structure/1.0" 
    datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
    <start>
        <element name="root">
            <ref name="someElement"/>
        </element>
    </start>
    <define name="someElement">
        <element name="someElement">
            <zeroOrMore>                
                <attribute ns="some-uri#params">
                    <anyName>
                        <except>
                            <name>requiredAttribute1</name>
                            <name>requiredAttribute2</name>
                        </except>
                    </anyName>
                </attribute>
            </zeroOrMore>
            <attribute ns="some-uri#params" name="requiredAttribute1"/>
            <attribute ns="some-uri#params" name="requiredAttribute2"/>
        </element>
    </define>
</grammar>