XML约束

本文介绍了XML约束的概念,包括DTD(文档类型定义)和Schema。阐述了DTD的编写和引入方式,以及Schema作为DTD的替代者,其功能更强大,支持命名空间。详细解释了如何在XML文档中引入Schema约束。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

XML约束


1. 什么是XML约束

1)在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束。 常见的xml约束:

  • DTD
  • Schema

2)作为程序员只要掌握两点

  • 会阅读
  • 会引入
  • 不用自己编写

2. DTD约束

DTD(Document Type Definition),文档类型定义,用来约束XML文档。规定XML文档中元素的名称,子元素的名称及顺序,元素的属性等。

2.1 编写DTD

  • 开发中,我们不会自己编写DTD约束文档
  • 常情况我们都是通过框架提供的DTD约束文档,编写对应的XML文档。常见框架使用DTD约束有:Struts2、hibernate等。

创建约束文件 student.dtd,代码如下:

<!ELEMENT students (student+) >
        <!ELEMENT student (name,age,sex)>
        <!ELEMENT name (#PCDATA)>
        <!ELEMENT age (#PCDATA)>
        <!ELEMENT sex (#PCDATA)>
        <!ATTLIST student number ID #REQUIRED>

<!--
    ELEMENT 定义元素
     students (student+):  students 代表根元素
     student+ : 根标签中 至少有一个 student子元素
     student (name,age,sex) : student标签中可以 包含的子元素  按顺序出现
     #PCDATA : 普通的文本内容
     ATTLIST : 用来定义属性
     student number ID : student标签中 有一个ID属性 叫做 number
     #REQUIRED : number的属性必须填写
     ID 唯一的值 不能重复 值只能是字母或者下划线开头
-->

2.2 引入DTD

引入dtd文档到xml文档中,两种方式

  • 内部dtd:将约束规则定义在xml文档中
  • 外部dtd:将约束的规则定义在外部的dtd文件中本地: 网络:

student.xml 代码如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE students SYSTEM "H:\jdbc_work\xml_task03\src\com\lagou\xml02\dtd\student.dtd">
<students>
    <student number="S1">
        <name>长海</name>
        <age>20</age>
        <sex>男</sex>
    </student>

    <student number="S2">
        <name>大玲子</name>
        <age>18</age>
        <sex>女</sex>
    </student>

</students>

3. Schema约束

3.1 什么是Schema

  • Schema是新的XML文档约束, 比DTD强大很多,是DTD 替代者;
  • Schema本身也是XML文档,但Schema文档的扩展名为xsd,而不是xml。
  • Schema 功能更强大,内置多种简单和复杂的数据类型
  • Schema 支持命名空间 (一个XML中可以引入多个约束文档)

3.2 Schema约束示例

student.xsd 代码示例:

<?xml version="1.0" encoding="UTF-8" ?>
<xsd:schema xmlns="http://www.lagou.com/xml"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace="http://www.lagou.com/xml" elementFormDefault="qualified">
    <xsd:element name="students" type="studentsType"/>
    <xsd:complexType name="studentsType">
        <xsd:sequence>
            <xsd:element name="student" type="studentType" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="studentType">
        <xsd:sequence>
            <xsd:element name="name" type="xsd:string"/>
            <xsd:element name="age" type="ageType" />
            <xsd:element name="sex" type="sexType" />
        </xsd:sequence>
        <xsd:attribute name="number" type="numberType" use="required"/>
    </xsd:complexType>
    <xsd:simpleType name="sexType">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="male"/>
            <xsd:enumeration value="female"/>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name="ageType">
        <xsd:restriction base="xsd:integer">
            <xsd:minInclusive value="0"/>
            <xsd:maxInclusive value="200"/>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name="numberType">
        <xsd:restriction base="xsd:string">
            <xsd:pattern value="hehe_\d{4}"/>
        </xsd:restriction>
    </xsd:simpleType>
</xsd:schema>

3.3 XML中引入schema约束的步骤

1)查看schema文档,找到根元素,在xml中写出来

<?xml version="1.0" encoding="UTF-8" ?>
<students>

</students>

2)根元素来自哪个命名空间。使用xmlns指令来声明

<?xml version="1.0" encoding="UTF-8" ?>
<students
xmlns="http://www.lagou.com/xml"
>

</students>

3)引入w3c的标准命名空间,复制即可

<?xml version="1.0" encoding="UTF-8" ?>
<students
xmlns="http://www.lagou.com/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

>
</students>

4)引入的命名空间跟哪个xsd文件对应?
使用schemaLocation来指定:两个取值:第一个为命名空间 第二个为xsd文件的路径

<?xml version="1.0" encoding="UTF-8" ?>
<students
xmlns="http://www.lagou.com/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.lagou.com/xml student.xsd"
>
</students>

5)命名空间

指的是一个环境,所用的标签来自于哪个环境定义的

student.xml代码示例:

<?xml version="1.0" encoding="UTF-8" ?>
<students
        xmlns="http://www.lagou.com/xml"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.lagou.com/xml student.xsd"
>
    <student number="hehe_1234">
        <name>张三</name>
        <age>200</age>
        <sex>male</sex>
    </student>

    <student number="hehe_4567">
        <name>张三</name>
        <age>200</age>
        <sex>male</sex>
    </student>

</students>

节选自拉钩教育JAVA系列教程

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

enterpc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值