xs:simpleType限制为xs:长度为n个字符或m个字符的字符串

时间:2013-07-09 09:50:48

标签: xml xsd

我希望字符串有两种可能的长度: 10 13

我尝试将xs:restrictionxs:enumerationxs:length一起使用,但这不起作用。

我确信我遗漏了一些明显的东西。有人可以建议一个解决方案吗?

2 个答案:

答案 0 :(得分:2)

如下所示?

<xs:simpleType name="string_10_13">
    <xs:restriction base="xs:string">
        <xs:pattern value=".{10}|.{13}" />
    </xs:restriction>
</xs:simpleType>

它应该更精确(例如消除空白等),但它可能是一种方式。

如果没有正则表达式可以工作:

<xs:simpleType name="string_10">
    <xs:restriction base="xs:string">
        <xs:length value="10" />
    </xs:restriction>
</xs:simpleType>
<xs:simpleType name="string_13">
    <xs:restriction base="xs:string">
        <xs:length value="13" />
    </xs:restriction>
</xs:simpleType>
<xs:simpleType name="string_10_13">
    <xs:union memberTypes="string_10 string_13"/>
</xs:simpleType>

答案 1 :(得分:0)

我想这里的真正要求是支持ISBN,长度可以是10或13个字符。但是ISBN还有其他约束,您可能也希望在简单类型中表示(在XSD 1.1中,您甚至可以使用断言来强制执行正确的校验位...)。所以我倾向于定义两种类型的ISBN-10和ISBN-13,然后使用这些作为其成员类型的联合类型。