所以我有一个引用另一个的RelaxNG架构:
<define name="review">
<element name="review">
<externalRef href="other.rng"/>
</element>
</define>
other.rng:
<start>
<choice>
<ref name="good"/>
<ref name="bad"/>
</choice>
</start>
<define name="good">
<element name="good"/>
</define>
<define name="bad">
<element name="bad"/>
</define>
我有什么方法可以只导入<good>
,但不允许<bad>
?目标是:
<review><good/></review>: valid
<review><bad/></review>: invalid
答案 0 :(得分:1)
使用externalRef
导入的语法无法修改。为了实现您所需的验证,我看到了这种方法:
<?xml version="1.0" encoding="UTF-8"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<include href="other.rng">
<start combine="choice">
<ref name="review"/>
</start>
</include>
<define name="review">
<element name="review">
<ref name="good"/>
</element>
</define>
</grammar>
start
元素(good
和bad
元素将不可能是root用户。
specification说:如果include元素有一个start组件,那么all start 组件将从语法元素中删除。
good
定义中的review
元素。