优质文章推荐,适合零基础小白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>
本文若有错误,请各位大佬指正,我会尽快修改
最好的关系就是互相成就,您的三连是我最大的动力,谢谢大家