Validation 如何针对命名空间而不是完整文档的架构进行验证?
我有这样一份文件:Validation 如何针对命名空间而不是完整文档的架构进行验证?,validation,xsd,schema,relaxng,Validation,Xsd,Schema,Relaxng,我有这样一份文件: <d:block xmlns:d="D" xmlns:b="B" xmlns="default" name="popover"> <d:description>...</d:description> <d:sample> <b:popover> ...some b:stuff... </b:popover> </d:sample> </d:blo
<d:block xmlns:d="D" xmlns:b="B" xmlns="default" name="popover">
<d:description>...</d:description>
<d:sample>
<b:popover>
...some b:stuff...
</b:popover>
</d:sample>
</d:block>
...
一些b:东西。。。
此文档的架构如下所示:
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
<element name="block" ns="D">
<attribute name="name"/>
<element name="description">
<text/>
</element>
<element name="sample">
<ref name="anything"/>
</element>
</element>
</start>
<define name="anything">
<element>
<anyName>
<except>
<nsName ns="D"/>
</except>
</anyName>
<zeroOrMore>
<choice>
<attribute>
<anyName/>
</attribute>
<text/>
<ref name="anything"/>
</choice>
</zeroOrMore>
</element>
</define>
</grammar>
“Anything”字面上的意思是除了D-名称空间之外的任何东西
我想为B名称空间创建另一个模式,以便对任何包含B:namespace的任意XML使用它
如何为名称空间而不是整个文档创建模式
无法获取此信息。类似的模式应该可以工作。您只需在名为
belents
的define
元素中为B名称空间定义元素
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
<ref name="anythingOrB"/>
</start>
<define name="anythingOrB">
<choice>
<ref name="BElements"/>
<ref name="anythingExceptB"/>
</choice>
</define>
<define name="anythingExceptB">
<element>
<anyName>
<except>
<nsName ns="B"/>
</except>
</anyName>
<zeroOrMore>
<choice>
<attribute>
<anyName/>
</attribute>
<text/>
<ref name="anythingOrB"/>
</choice>
</zeroOrMore>
</element>
</define>
<define name="BElements">
<choice>
<element name="elt1" ns="B">
<empty/>
</element>
<element name="elt2" ns="B">
<empty/>
</element>
</choice>
</define>
</grammar>