[XML]学习笔记(五)——XML Schema简单类型元素与属性

一、XML Schema简介:

a)        XML Schema 是基于XML的DTD替代者。

b)        XML Schema 可描述XML文档的结构。

c)        XML Schema 语言也可作为XSD(XML SchemaDefinition)来引用。


二、什么是XML Schema:

XML Schema 的作用是定义 XML 文档的合法构建模块,类似 DTD。


三、为什么要使用XML Schema:

a)        支持数据类型,从而:

                        i.             可更容易地描述允许的文档内容

                      ii.             可更容易地验证数据的正确性

                     iii.             可更容易地与来自数据库的数据一并工作

                     iv.             可更容易地定义数据约束(data facets)

                      v.             可更容易地定义数据模型(或称数据格式)

                     vi.             可更容易地在不同的数据类型间转换数据

b)        使用XML语法,由XML编写:

                        i.             不必学习新的语言

                      ii.             可使用 XML 编辑器来编辑 Schema 文件

                     iii.             可使用 XML 解析器来解析 Schema 文件

                     iv.             可通过 XML DOM 来处理 Schema

                      v.             可通过 XSLT 来转换 Schema

c)        可以保护数据通信:当数据从发送方发送到接收方接收,重点在于双方关于内容要有相同的“期望值”。比如XML Schema带有的date数据类型,可以确保对不同日期表示方法的一致解释。

d)        可扩展性:因为其由XML编写,XML即为一种可扩展标记语言。

                        i.             在其他 Schema 中重复使用已有的 Schema

                      ii.             创建由标准类型衍生而来的自定义数据类型

                     iii.             在相同的文档中引用多重的 Schema


四、 一个简单的XML例子:

    note.xml:


<?xmlversion="1.0" encoding="UTF-8"?>
<note
xmlns="http://www.w3school.com.cn" #默认命名空间的声明,在此xml文档中使用过的所有元素都被声明于该命名空间。
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" #实例命名空间,只有有了xsi之后才能使用schemaLocation,该值提供了需要使用的命名空间
xsi:schemaLocation="http://www.w3school.com.cn note.xsd">   #提供命名空间使用的xml schema的位置
<to>CZ</to>
<from>Jason</from>
<heading>Greeting</heading>
<body>Hello CZ!</body>
</note>



    note.xsd:


<?xmlversion="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" #表明schema中用到的元素和数据类型来自该URI的命名空间,而且规定来自该命名空间的元素和数据类型应使用前缀xs
targetNamespace="http://www.w3school.com.cn"    #表明此schema定义的元素来自该命名空间
xmlns="http://www.w3school.com.cn" #默认命名空间
elementFormDefault="qualified"> #任何xml实例文档所使用的且在此schema中声明过的元素必须被命名空间限定
    <xs:element name="note">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="to" type="xs:string"/>
                <xs:element name="from" type="xs:string"/>
                <xs:element name="heading" type="xs:string"/>
                <xs:element name="body" type="xs:string"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>



五、简单类型:

a)        简易元素:仅包含文本(文本可以有很多类型,也可以是自定义的类型),但不会包含任何其他的元素或属性。

                        i.             定义简单元素:

<xs:element name="elemName" type="elemType"/>

                      ii.             常用类型:

                                      xs:string——字符串,可含有字符、空格、回车和制表符,该数据类型值不可变,可以通过enumeration、length、maxLength、minLength等对string进行约束。

                                      xs:decimal——十进制数字,可含有小数点和符号,最大位数18。

                                      xs:integer——整数,可含有符号,没有边界限制,而xs:int是有符号的32位整数。

                                      xs:Boolean——只能为true(1) or false(0)。

                                      xs:date—— YEAR-MONTH-DAY三者缺一不可。

                                      xs:time—— HOUR-MINUTE-SECOND 三者缺一不可,它和date都属于日期数据类型,可以通过enumeration、maxExclusive、maxInclusive、minExclusive和minInclusive等进行一定的约束。

                                     更多数据类型参考http://www.w3schools.com/xml/schema_dtypes_string.asp

                     iii.             默认值:default=”…”

                     iv.             固定值:fixed=”…”

b)        属性:所有属性均作为简易元素来声明。简易元素无法拥有属性,只有复杂类型可以拥有属性。

                        i.             定义属性:

<xs:attribute name="attrName" type="attrType"/>


                      ii.             常用类型、默认值和固定值的用法与简单元素一致。

                     iii.             可选属性与必须属性:默认/缺省情况下属性均为可选的,使用use=“required/optional/prohibited”来规定属性的使用。

<xs:attribute name="lang" type="xs:string" use="required"/>


c)        限定/Facets:用于对元素或属性定义约束范围。

                        i.             对单个值的限定:如年龄在[0, 120]范围内

<xs:element name="age">
<xs:simpleType>
  <xs:restriction base="xs:integer">
    <xs:minInclusive value="0"/>
    <xs:maxInclusive value="120"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>


                      ii.             对一组值的限定:使用枚举约束

<xs:element name="car">
<xs:simpleType>
  <xs:restrictionbase="xs:string">
    <xs:enumeration value="Audi"/>
    <xs:enumerationvalue="Golf"/>
    <xs:enumerationvalue="BMW"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>


                                     也可以将定义一个新的类型carType,这样不仅可以被car使用,还可以被其他元素使用。

<xs:element name="car" type="carType"/>
<xs:simpleTypename="carType">
  <xs:restrictionbase="xs:string">
    <xs:enumerationvalue="Audi"/>
    <xs:enumerationvalue="Golf"/>
    <xs:enumerationvalue="BMW"/>
  </xs:restriction>
</xs:simpleType>


                     iii.             模式约束:当需要将元素的内容限定为一串数字或字符时

                          1.        限定只有一个小写字母:

                                    

<xs:element name="letter">
<xs:simpleType>
  <xs:restrictionbase="xs:string">
    <xs:patternvalue="[a-z]"/>
 </xs:restriction>
</xs:simpleType>
</xs:element>

限定三个大写字母:

<xs:pattern value="[A-Z][A-Z][A-Z]"/>

限定三个字母,大小写均可:

<xs:pattern value="[a-zA-Z][a-zA-Z][a-zA-Z]"/>

限定从xyz中选一个:

<xs:pattern value="[xyz]"/>

限定0或多个小写字母:

<xs:pattern value="([a-z])*"/>

限定1或多个小写大写字母组合:

<xs:pattern value="([a-z][A-Z])+"/>

限定元素多选一:

<xs:pattern value="male|female"/>

限定具体字符个数及可选范围:

<xs:pattern value="[a-zA-Z0-9]{8}"/>

2.        限定有五个数字且每个数字为[0, 9]:

<xs:element name="prodid">
<xs:simpleType>
  <xs:restrictionbase="xs:integer">
    <xs:patternvalue="[0-9][0-9][0-9][0-9][0-9]"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>


3.        对空白字符的处理:空白字符包含换行、回车、空格以及制表符

<xs:element name="address">
<xs:simpleType>
  <xs:restrictionbase="xs:string">
    <xs:whiteSpacevalue="preserve"/> #保留
<!--<xs:whiteSpacevalue="replace"/> #移除所有 -->
<!--<xs:whiteSpacevalue="collapse"/> #移除所有空白字符,多个空格会被合成为一个空格 -->
  </xs:restriction>
</xs:simpleType>
</xs:element>


4.        对长度的限定:

<xs:element name="password">
<xs:simpleType>
  <xs:restrictionbase="xs:string">
    <xs:length value="8"/> #长度必须精确到8
<!--<xs:minLengthvalue="5"/> #最大长度为5 -->
<!--<xs:maxLengthvalue="8"/> #最小长度为8 -->
  </xs:restriction>
</xs:simpleType>
</xs:element>


六、 复杂类型:(未完待补充……)

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值