我需要构建一个RelaxNG验证模式,并且我遇到了这样的问题:
我需要用一个<optional>标记来验证文档,这个<optional>标记可能包含一些其他标记,而我不知道它们的模式,或者它们没有统一的模式。
简化样本:
<?xml version="1.0" encoding="UTF-8"?>
<elements>
<first>
<name>John</name>
<sname>Silver</sname>
</first>
<second>
<phone>+123456789</phone>
<mail>js@p.com</mail>
</second>
<optional>
...
<optional>
</elements>在这里,我清楚地知道<first>和<second>标记中应该包含什么,但是<optional>可能包含文本或复杂的节点结构。
在RelaxNG中是否有什么东西可以用某种方式标记元素,即它的内部结构将被忽略?
我在这里寻找类似<anyType />的东西,但实际上没有anyType这样的东西。
<element name="optional">
<anyType />
<zeroOrMore>
<attribute>
<anyName/>
</attribute>
</zeroOrMore>
</element>RelaxNG中还有一个标记RelaxNG,它指定元素内容类型,但是我无法为它的类型属性找到合适的值来解决我的问题。
发布于 2014-04-02 18:47:24
如果您像这样定义您的optional元素:
<element name="optional">
<ref name="any"/>
</element>然后像这样定义any:
<define name="any">
<zeroOrMore>
<choice>
<attribute>
<anyName/>
</attribute>
<text/>
<element>
<anyName/>
<ref name="any"/>
</element>
</choice>
</zeroOrMore>
</define>你应该可以在optional中放任何你想要的东西。这将接受任何名称空间中具有任何值的属性的任何元素,以及元素之间的任何文本。
https://stackoverflow.com/questions/22819272
复制相似问题