如何将属性限制为不允许特定值?
例如,我在一个元素的<xs:key/>
属性上有一个Id
,但有些雅虎已经离开并在那里抛出了一个神奇的数字,所以现在我不能允许3
,但是1
,2
和5
完全可以接受。
答案 0 :(得分:3)
您是否尝试过查看下面的代码限制标记link text,它应该为您提供一个名为Id的标记,它只允许以3开头的整数
<xs:key name="Id">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:pattern value="[^3]\d*"/>
</xs:restriction>
</xs:simpleType>
</xs:key>
答案 1 :(得分:0)
您可以使用正则表达式指定限制。看一下这个tutorial
答案 2 :(得分:0)
我认为更好的模式是[^3]|..+
,它接受至少2位数的所有数字。但是,它仍然允许03
,它是3的另一种表示。要禁止这样做,你可以尝试类似[^3]|[^0].+
的东西,它不允许所有带有前导零的表示。
答案 3 :(得分:0)
如果你的ID是整数,并且你想允许除3之外的任何整数,你最好的选择(在我看来)不是模式的正则表达式,因为正如其他评论家观察到的那样,很容易意外地留下漏洞,而是定义小于3的整数的整数子类型,以及大于树的整数的另一个整数的子类型,然后定义它们的并集。您的属性获取联合类型。瞧,你接受任何整数但是3.所有你要做的就是找到制造3魔法的人,并确保他们不会添加更多魔法数字。
在XSD 1.1中,你也可以通过添加一个限制值不等于3的断言来解决这个尴尬。