XSD属性不能等于某个值?

3

如何限制属性不允许特定的值?

例如,我在一个元素的Id属性上有一个<xs:key/>,但是有些人已经把一个魔术数字放进去了,所以现在我不能允许3,但125是完全可以接受的。

4个回答

4

您尝试过查看限制标签链接文本吗?下面的代码将为您提供一个名为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
这是我的做法。在声明简单类型后,确保将元素类型设置为“Id”。 - Dustin Davis
这样做会不会也阻止 3733331415 成为有效标识符呢?如果是这样的话,这样做就行不通了,因为我只能指定该标识符已被使用,但无法控制其他任何已使用的标识符。 - Lance
1
没错,如果你去掉\d*,我相信你会得到想要的结果,但为了完全正确,^[^3]$是排除ID为3的正确模式。 - Meberem

0
如果您的ID是整数,并且想要允许除3以外的任何整数,那么最好的选择(在我看来)不是使用模式的正则表达式,因为正如其他评论者所观察到的那样,很容易意外地留下漏洞,而是为小于3的整数定义一个子类型,为大于3的整数定义另一个子类型,然后定义它们的并集。您的属性获得联合类型。然后,您就可以接受任何整数,但不包括3。您需要做的就是追踪制造3魔法的人,并确保他们不添加更多的魔法数字。
在XSD 1.1中,您还可以通过添加约束值不等于3的断言来避免这种尴尬。

0

我认为更好的模式是[^3]|..+,它接受至少有2个数字的所有数字。然而,它仍然允许03,这是3的另一种表示。为了禁止这种情况,您可以尝试类似于[^3]|[^0].+的内容,该内容禁止所有具有前导零的表示。


0

您可以使用正则表达式来指定限制条件。请查看此tutorial


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接