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)。