2

在 xsd 中,当我们有一个类型为 xs:ID 或 xs:Integer 的属性作为 use:required 时,我们可以将空字符串传递给它吗?理想情况下,这应该是不可能的。需要添加什么来实现这一点?

4

3 回答 3

5

如果您需要一个允许包含 int 或空字符串的属性,您可以定义自定义类型并将其用作属性的类型:

<xs:simpleType name="emptyInt">
    <xs:union>
        <xs:simpleType>
            <xs:restriction base='xs:string'>
                <xs:length value="0"/>
            </xs:restriction>
        </xs:simpleType>
        <xs:simpleType>
            <xs:restriction base='xs:float'>
            </xs:restriction>
        </xs:simpleType>
    </xs:union>
</xs:simpleType>

或使用正则表达式:

<xs:simpleType name="emptyInt">
    <xs:restriction base="xs:string">
        <xs:pattern value="-?\d*"/>
    </xs:restriction>
</xs:simpleType>
于 2015-05-14T16:36:30.843 回答
0

定义接受整数或空字符串的类型的两种可能方法是:

(a) 使用 itemType=integer 和 maxLength=1 定义列表类型

(b) 使用成员类型 xs:integer 和 my:emptyString 定义联合类型,其中 my:EmptyString 由长度 = 0 的 xs:string 限制定义。

于 2013-10-12T09:08:30.660 回答
0

如果您将属性声明为xs:IDor类型xs:integer,则该属性的值为空字符串是无效的。无论该属性是必需的还是可选的,这都是正确的。

具体来说,对于此 XSD,两者<a x1=""/><a x2=""/>都将无效:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           version="1.0">
  <xs:element name="a">
    <xs:complexType>
      <xs:attribute name="x1" type="xs:ID"/>
      <xs:attribute name="x2" type="xs:integer"/>
    </xs:complexType>
  </xs:element>
</xs:schema>
于 2013-10-11T01:57:12.717 回答