XML Schema 限定 / Facets学习笔记
XML Schema是一种XML文档的验证语言,用于描述XML文档中元素和属性的结构、类型和约束。其中,限定(Facets)是XML Schema中的一个重要概念,其用于对数据值进行额外的约束和限制。
约束类型
在XML Schema中,限定可以用于约束以下类型的数据:
- 字符串(string)
- 数字(number)
- 日期时间(dateTime)
- 布尔值(boolean)
常见的限定
XML Schema中常见的限定包括:
minLength和maxLength
用于限制字符串的最小长度和最大长度。
xmlCopy Code<xs:element name="username">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="6"/>
<xs:maxLength value="20"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
pattern
用于限制字符串的格式,匹配正则表达式。
xmlCopy Code<xs:element name="email">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
minInclusive和maxInclusive
用于限制数字的最小值和最大值(包括边界值)。
xmlCopy Code<xs:element name="age">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="150"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
minExclusive和maxExclusive
用于限制数字的最小值和最大值(不包括边界值)。
xmlCopy Code<xs:element name="price">
<xs:simpleType>
<xs:restriction base="xs:decimal">
<xs:minExclusive value="0"/>
<xs:maxExclusive value="100"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
totalDigits和fractionDigits
用于限制数字的整数位数和小数位数。
xmlCopy Code<xs:element name="price">
<xs:simpleType>
<xs:restriction base="xs:decimal">
<xs:totalDigits value="5"/>
<xs:fractionDigits value="2"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
示例
以下是一个示例XML Schema文档,其中限定用于约束数据类型和数据值:
xmlCopy Code<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="product">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="price">
<xs:simpleType>
<xs:restriction base="xs:decimal">
<xs:minExclusive value="0"/>
<xs:maxExclusive value="100"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="description" type="xs:string"/>
<xs:element name="category">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Electronics"/>
<xs:enumeration value="Clothing"/>
<xs:enumeration value="Books"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
<xs:attribute name="id" type="xs:integer"/>
</xs:complexType>
</xs:element>
</xs:schema>
在该示例中,限定用于约束price元素为一个小数,且取值范围在0和100之间(不包括边界值),同时约束category元素为枚举值(Electronics,Clothing或Books)。