我有一个XML元素,比方说<fruit>
,这是一个枚举限制,它只能取值:apple, orange, watermelon
XSD:如何限制多个相关的值?
我也有另外一个字段,也应具有以下值的枚举限制: red, orange, green
有没有什么办法可以将这两个元素联系起来,这样唯一可能的组合是:apple-red, orange-orange, watermelon-green
?我试图在复杂类型中找到某种枚举,但似乎XSD不支持它们。
我有一个XML元素,比方说<fruit>
,这是一个枚举限制,它只能取值:apple, orange, watermelon
XSD:如何限制多个相关的值?
我也有另外一个字段,也应具有以下值的枚举限制: red, orange, green
有没有什么办法可以将这两个元素联系起来,这样唯一可能的组合是:apple-red, orange-orange, watermelon-green
?我试图在复杂类型中找到某种枚举,但似乎XSD不支持它们。
否在XSL架构中不可能做到这一点。
有,你可以实现你想要的方式有两种:
如果你真的要坚持XSD的架构:
如果您不必被您的环境使用XSD-Schema
放松NG你有更多的可能性来表达复杂的行为。最重要的是比XSD Schema更容易编写和理解。
在RELAX NG你想表达的是这样的东西(你会定义元素中3次选择)
<choice>
<element name="fruit-combination">
<element name="fruit">
<value>apple</value>
<element>
<element name="colour">
<value>red</value>
</element>
</element>
<element name="fruit-combination">
<element name="fruit">
<value>orange</value>
<element>
<element name="colour">
<value>orange</value>
</element>
</element>
<element name="fruit-combination">
<element name="fruit">
<value>watermelon</value>
<element>
<element name="colour">
<value>green</value>
</element>
</element>
</choice>
的RELAX NG实现,那么会选择合适的元素你。如果您使用的是良好的xml编辑器,并且将Apple元素放入文件中,它甚至会限制您,以便您只能添加具有红色值的颜色元素等等。
在Schematron中,您只需为值为红色的颜色元素编写一条规则,该值只有在其中包含苹果值的水果元素时才有效。 Schematron本身不过是一种特殊的XSL转换,它将一些规则应用于xml文档并输出XML Form中的错误和警告报告。
参见:
http://relaxng.org/ http://www.schematron.com/(规范) http://www.schematron.com/implementation.html(实施)
这是XSD 1.0的公知的限制,其被固定在1.1 XSD通过断言和/或条件类型分配的机制。
XSD 1.1目前在Saxon-EE和Apache Xerces中实施。