JavaWeb之XML语义约束(DTD与XML Schema)

优质文章推荐,适合零基础小白XML入门(从是什么到怎么用)

DTD

DTD(Document Type Definition,文档类型定义)是一种简单易用的语义约束方式.
DTD文件的扩展名为.dtd

DTD定义节点

  • 利用DTD中的<!ELEMENT>标签,我们可以定义XML文档中允许出现的节点及数量
<!-- 定义hr节点下只允许出现1个employee子节点 -->
<!ELEMENT hr (employee)>

<!-- employee节点下必须包含以下四个节点,且按顺序出现 -->
<!ELEMENT employee (name,age,salary,department)>

<!-- 定义name标签体只能是文本,#PCDATA代表文本元素 -->
<!ELEMENT name (#PCDATA)>

DTD定义节点数量

  • 如某个子节点需要多次重复出现,则需要在子节点后增加相应的描述符
<!-- hr节点下最少出现1个employee子节点 -->
<!ELEMENT hr (employee+)>

<!-- hr节点下可出现0-n个employee子节点 -->
<!ELEMENT hr (employee*)>

<!-- hr节点下最多出现1个employee子节点 -->
<!ELEMENT hr (employee?)>

XML引用DTD文件

  • 在XML中使用<!DOCTYPE>标签来引用DTD文件
    书写格式:

创建并使用DTD文件

现在有一个.xml文件,要创建.dtd文件并且添加约束

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hr SYSTEM "hr.dtd">
<!-- 人力资源管理系统 -->
<hr>
    <employee no="1111">
        <name>张三</name>
        <age>18</age>
        <salary>4000</salary>
        <department>
            <dname>会计部</dname>
            <address>XX大厦</address>
        </department>
    </employee>

</hr>

创建一个.dtd文件(IDEA如何创建.dtd文件可以参考 IDEA如何创建.dtd文件)

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT hr (employee+)> <!-- hr节点下最少出现一个employee节点 -->
<!ELEMENT employee (name,age,salary,department)> <!-- employee 节点下必须包含这四个节点,并且按顺序出现 -->
<!ATTLIST employee no CDATA ""> <!-- 约束no 标签以 CDATA的格式出现 -->
<!ELEMENT name (#PCDATA)> <!-- 使name只能以纯文本出现 -->
<!ELEMENT age (#PCDATA)>
<!ELEMENT salary (#PCDATA)>
<!ELEMENT employee.department (dname,address)> 
<!ELEMENT department (#PCDATA)>
<!ELEMENT dname (#PCDATA)>
<!ELEMENT address (#PCDATA)>

XML Schema

  • XML Schema 比 DTD更为复杂,提供了更多功能
  • XML Schema 提供了数据类型,格式限定,数据范围等特性
  • XML Schema 是W3C标准
    (IDEA如何创建XML Schema文件可以参考 IDEA如何创建XML Schema文件)
    如何使用在代码中体现:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           targetNamespace="http://www.w3school.com.cn"
           xmlns="http://www.w3school.com.cn"
           elementFormDefault="qualified">
    <xs:element name="hr">
        <!-- complexType标签含义是复杂节点,包含字节点时必须使用这个标签 -->
        <xs:complexType>
            <xs:sequence><!-- sequence 元素要求组中的元素以指定的顺序出现在包含元素中 -->
                <xs:element name="employee" minOccurs="1" maxOccurs="999">
                    <!-- element 定义元素 minOccurs 最小出现次数 maxOccurs 最大出现次数-->
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="name" type="xs:string"></xs:element> <!-- type定义数据类型 -->
                            <xs:element name="age">
                                <xs:simpleType> <!-- simpleType 简单类型的约束 -->
                                    <xs:restriction base="xs:integer"><!-- restriction 限制 base 进行哪方面的限制 -->
                                        <xs:minInclusive value="18"></xs:minInclusive>
                                        <xs:maxInclusive value="60"></xs:maxInclusive>
                                        <!-- 限制最小和最大-->
                                    </xs:restriction>
                                </xs:simpleType>
                            </xs:element>

                            <xs:element name="salary" type="xs:integer"></xs:element>
                            <xs:element name="department">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element name="dname" type="xs:string"></xs:element>
                                        <xs:element name="address" type="xs:string"></xs:element>
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                        <xs:attribute name="no" type="xs:string" use="required"></xs:attribute>
                        <!-- attribute 定义属性 use 设定存在性 -->
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

示例所用xml代码:

<?xml version="1.0" encoding="UTF-8"?>
<!-- 人力资源管理系统 -->
<hr xmlns="http://www.w3school.com.cn"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="hr.xsd">
    <!-- 这三行是为了连接xsd文件 -->
    <employee no="1111">
        <name>张三</name>
        <age>19</age>
        <salary>4000</salary>
        <department>
            <dname>会计部</dname>
            <address>XX大厦</address>
        </department>
    </employee>
</hr>

本文若有错误,请各位大佬指正,我会尽快修改
最好的关系就是互相成就,您的三连是我最大的动力,谢谢大家

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

羽 毛

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

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

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

打赏作者

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

抵扣说明:

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

余额充值