XSD属性不能等于值?

时间:2011-01-18 20:47:50

标签: xml schema xsd

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

例如,我在一个元素的<xs:key/>属性上有一个Id,但有些雅虎已经离开并在那里抛出了一个神奇的数字,所以现在我不能允许3,但是125完全可以接受。

4 个答案:

答案 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的断言来解决这个尴尬。