ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

XML Schema 字符串数据类型详解

XML Schema 字符串数据类型详解 1. 引言XML SchemaXSD是定义 XML 文档结构和数据类型的标准语言。在 XML Schema 中字符串数据类型是最基础、最常用的类型之一。本文将从内置字符串类型、派生类型、约束限制以及实际应用等方面详细介绍 XML Schema 中的字符串数据类型并提供丰富的代码实例。2. 内置字符串类型XML Schema 提供了多种内置的字符串相关数据类型它们都派生自xs:string。下表列出了常用的内置字符串类型类型说明示例xs:string任意长度的字符串Hello Worldxs:normalizedString空白符被规范化的字符串Hello Worldxs:token空白符被压缩的字符串Hello Worldxs:language语言标识符zh-CNxs:NMTOKEN名称记号item-01xs:NameXML 名称elementNamexs:NCName不带命名空间的 XML 名称localNamexs:ID唯一标识符id-001xs:IDREF引用标识符id-0013. 基础字符串类型详解下面通过一个完整的 XSD 示例来演示xs:string、xs:normalizedString和xs:token的区别。首先定义一个 XSD 文件?xml version1.0 encodingUTF-8? xs:schema xmlns:xshttp://www.w3.org/2001/XMLSchema xs:element namebook xs:complexType xs:sequence xs:element nametitle typexs:string/ xs:element namepublisher typexs:normalizedString/ xs:element nameisbn typexs:token/ /xs:sequence /xs:complexType /xs:element /xs:schema对应的合法 XML 实例?xml version1.0 encodingUTF-8? book titleXML 入门与实践/title publisher 清华大学出版社 /publisher isbn 978-7-302-12345-6 /isbn /book需要注意xs:string会保留所有空白字符xs:normalizedString会将换行符、制表符替换为空格但保留连续空格xs:token会进一步压缩连续空格并去除首尾空格。4. 使用 facet 约束字符串XML Schema 提供了多种约束facet来限制字符串的长度和取值。常用的约束包括length、minLength、maxLength、pattern和enumeration。4.1 长度约束下面的示例演示如何使用length、minLength和maxLength约束字符串长度?xml version1.0 encodingUTF-8? xs:schema xmlns:xshttp://www.w3.org/2001/XMLSchema !-- 用户名长度必须为 6 到 20 个字符 -- xs:element nameusername xs:simpleType xs:restriction basexs:string xs:minLength value6/ xs:maxLength value20/ /xs:restriction /xs:simpleType /xs:element !-- 国家代码长度必须恰好为 2 个字符 -- xs:element namecountryCode xs:simpleType xs:restriction basexs:string xs:length value2/ /xs:restriction /xs:simpleType /xs:element /xs:schema4.2 模式约束patternpattern使用正则表达式来约束字符串的格式。下面的示例演示如何验证邮箱、手机号和邮政编码?xml version1.0 encodingUTF-8? xs:schema xmlns:xshttp://www.w3.org/2001/XMLSchema !-- 邮箱地址 -- xs:element nameemail xs:simpleType xs:restriction basexs:string xs:pattern value[a-zA-Z0-9._%-][a-zA-Z0-9.-]\.[a-zA-Z]{2,}/ /xs:restriction /xs:simpleType /xs:element !-- 中国大陆手机号 -- xs:element namephone xs:simpleType xs:restriction basexs:string xs:pattern value1[3-9][0-9]{9}/ /xs:restriction /xs:simpleType /xs:element !-- 邮政编码6 位数字 -- xs:element namezipCode xs:simpleType xs:restriction basexs:string xs:pattern value[0-9]{6}/ /xs:restriction /xs:simpleType /xs:element /xs:schema4.3 枚举约束enumerationenumeration用于限定字符串只能取指定的几个值。下面的示例定义了一个表示性别的类型?xml version1.0 encodingUTF-8? xs:schema xmlns:xshttp://www.w3.org/2001/XMLSchema xs:element namegender xs:simpleType xs:restriction basexs:string xs:enumeration valuemale/ xs:enumeration valuefemale/ xs:enumeration valueother/ /xs:restriction /xs:simpleType /xs:element /xs:schema5. 自定义字符串类型在实际项目中通常会将常用的字符串约束定义为全局简单类型以便在多个元素中复用。下面的示例定义了一个通用的「非空字符串」类型和一个「URL 类型」?xml version1.0 encodingUTF-8? xs:schema xmlns:xshttp://www.w3.org/2001/XMLSchema !-- 非空字符串去除首尾空白后长度至少为 1 -- xs:simpleType namenonEmptyString xs:restriction basexs:string xs:minLength value1/ xs:whiteSpace valuecollapse/ /xs:restriction /xs:simpleType !-- URL 类型 -- xs:simpleType nameurlType xs:restriction basexs:string xs:pattern valuehttps?://[a-zA-Z0-9.-](\.[a-zA-Z]{2,})(/[a-zA-Z0-9._~:/?#\[\]!$()*,;%-]*)*/ /xs:restriction /xs:simpleType xs:element nameuser xs:complexType xs:sequence xs:element namename typenonEmptyString/ xs:element nameblog typeurlType/ /xs:sequence /xs:complexType /xs:element /xs:schema6. 字符串类型在复杂类型中的应用字符串类型不仅可以用于简单元素还可以作为复杂类型中属性的类型。下面的示例演示了如何在复杂类型中使用字符串类型和属性?xml version1.0 encodingUTF-8? xs:schema xmlns:xshttp://www.w3.org/2001/XMLSchema xs:element nameproduct xs:complexType xs:sequence xs:element namename typexs:string/ xs:element namedescription typexs:string minOccurs0/ /xs:sequence xs:attribute nameid typexs:ID userequired/ xs:attribute namecategory typexs:token/ /xs:complexType /xs:element /xs:schema对应的 XML 实例?xml version1.0 encodingUTF-8? product idp-001 categoryelectronics name无线鼠标/name description2.4G 无线连接静音按键/description /product7. 空白处理whiteSpacewhiteSpacefacet 用于控制处理器对空白字符的处理方式取值包括preserve、replace和collapse。下面的示例演示三种模式的区别?xml version1.0 encodingUTF-8? xs:schema xmlns:xshttp://www.w3.org/2001/XMLSchema !-- preserve原样保留空白 -- xs:element namepreserveText xs:simpleType xs:restriction basexs:string xs:whiteSpace valuepreserve/ /xs:restriction /xs:simpleType /xs:element !-- replace将制表符、换行符替换为空格 -- xs:element namereplaceText xs:simpleType xs:restriction basexs:string xs:whiteSpace valuereplace/ /xs:restriction /xs:simpleType /xs:element !-- collapse压缩连续空格并去除首尾空格 -- xs:element namecollapseText xs:simpleType xs:restriction basexs:string xs:whiteSpace valuecollapse/ /xs:restriction /xs:simpleType /xs:element /xs:schema8. 综合示例用户注册信息下面给出一个综合示例将前面介绍的各种字符串约束组合起来定义一个用户注册信息的 Schema?xml version1.0 encodingUTF-8? xs:schema xmlns:xshttp://www.w3.org/2001/XMLSchema xs:element nameregistration xs:complexType xs:sequence xs:element nameusername xs:simpleType xs:restriction basexs:string xs:pattern value[a-zA-Z][a-zA-Z0-9_]{5,19}/ /xs:restriction /xs:simpleType /xs:element xs:element namepassword xs:simpleType xs:restriction basexs:string xs:minLength value8/ xs:maxLength value32/ xs:pattern value(?.*[A-Z])(?.*[a-z])(?.*[0-9]).*/ /xs:restriction /xs:simpleType /xs:element xs:element nameemail xs:simpleType xs:restriction basexs:string xs:pattern value[a-zA-Z0-9._%-][a-zA-Z0-9.-]\.[a-zA-Z]{2,}/ /xs:restriction /xs:simpleType /xs:element xs:element namecountry xs:simpleType xs:restriction basexs:string xs:length value2/ /xs:restriction /xs:simpleType /xs:element xs:element namebio typexs:string minOccurs0/ /xs:sequence /xs:complexType /xs:element /xs:schema对应的合法 XML 实例?xml version1.0 encodingUTF-8? registration usernamezhang_san/username passwordAbc12345/password emailzhangsanexample.com/email countryCN/country bio专注于 XML 和 Web 技术。/bio /registration9. 总结XML Schema 的字符串数据类型体系非常丰富从基础的xs:string到各种派生类型再到通过 facet 实现的自定义约束能够满足绝大多数文本数据的校验需求。在实际开发中建议优先使用xs:token处理不需要保留空白的文本使用pattern校验格式化的字符串如邮箱、手机号并使用enumeration限定取值范围。合理运用这些特性可以显著提升 XML 数据的规范性和可靠性。
返回列表