我的目标是拥有一个 RELAX NG 紧凑模式,它强制元素的数据类型与父元素的数据类型匹配。
我目前有以下架构:
start = Tickmarks
Tickmarks = element tickmarks {
attribute from { xsd:float | xsd:date },
attribute to { xsd:float | xsd:date },
Tick*
}
Tick = element tick {
attribute value { xsd:float | xsd:date },
attribute label { text }
}
我想要的是一个描述文档的模式,如果 Tickmarks/@from 是一个浮点数,那么 Tickmarks/Tick/@value 也必须是一个浮点数。
所以本质上它应该满足以下测试:
有效的
<tickmarks from="1" to="10">
<tick value="3" label="3"/>
<tick value="7" label="7"/>
</tickmarks>
有效的
<tickmarks from="2000-01-01" to="2006-01-01">
<tick value="2002-01-01" label="2002"/>
<tick value="2004-01-01" label="2004"/>
</tickmarks>
无效的
<tickmarks from="2000-01-01" to="2006-01-01">
<tick value="10" label="10"/>
<tick value="20" label="20"/>
</tickmarks>
无效的
<tickmarks from="1" to="10">
<tick value="2002-01-01" label="2002"/>
<tick value="2004-01-01" label="2004"/>
</tickmarks>
RELAX NG compact 是否可以做到这一点?