Xml 无法表示属性和子级之间的选择。近似
在我的项目中,我必须处理一些.rng文件,我遇到了一个错误“属性和子项之间的选择无法表示.approxing”,我无法解决这个问题。问题出现在这段代码中:Xml 无法表示属性和子级之间的选择。近似,xml,relaxng,Xml,Relaxng,在我的项目中,我必须处理一些.rng文件,我遇到了一个错误“属性和子项之间的选择无法表示.approxing”,我无法解决这个问题。问题出现在这段代码中: <element name="maintenance-mode"> <choice> <group> <attribute name="on-install"> <dat
<element name="maintenance-mode">
<choice>
<group>
<attribute name="on-install">
<data type="boolean"/>
</attribute>
<attribute name="on-remove">
<data type="boolean"/>
</attribute>
</group>
<group>
<optional>
<attribute name="on-install">
<data type="boolean"/>
</attribute>
</optional>
<optional>
<attribute name="on-remove">
<data type="boolean"/>
</attribute>
</optional>
<data type="boolean"/>
</group>
</choice>
</element>
我无法找到问题的根本原因 获取您报告的消息的唯一方法是尝试使用将您的RELAXNG模式(rng)转换为XML模式(xsd)。因此,这表明您正在使用
trang
(但在您的问题中没有说明这一点),或者您正在幕后使用trang
,或者您使用的软件基于trang
您得到的警告是因为RELAXNG能够表示元素和属性之间的选择。您对
维护模式的声明
允许它在安装时具有属性
在删除时具有属性
或同名的子元素,但不能同时具有属性和元素。XML模式无法对此约束进行建模,因此trang
必须输出一个比Relax NG模式更通用(允许更多)的XML模式。结果架构允许元素具有属性和子元素。不确定“绕过或删除此警告”是什么意思。如果您只是不想看到它,可以将stderr
重定向到/dev/null
。例如,tranginout2>/dev/null
。(我不这样做,如果你运行Windows,你必须找到相应的方法。)如果你想首先阻止trang
生成警告,那么你必须将Relax NG更改为:a)只允许在安装/删除时作为属性,b)只允许它们作为元素,c)允许它们同时作为元素和属性。任何这些更改都会使警告消失。感谢@Louis的回复和建议。我绕过这个警告的意思是,有没有办法改变这个模式以防止警告。我前面评论的最后一部分(“如果你想阻止trang
生成警告…”)给出了3种可能性。