XML可扩展标记语言
和html格式类似,有开始和结束成对标记
标签名要有意义,建议使用英文,小写字母,单词之间用"-"分割。多级标签之间不要存在同名的情况
可以使用适当的注释与缩进让格式清晰
标签属性用于描述不可或缺的信息,对标签分组或者为标签设置ID时常用属性表示
XML支持5种实体引用
实体引用 | 对应符号 | 说明 |
---|---|---|
< | < | 小于 |
> | > | 大于 |
& | & | 和号 |
' | ’ | 单引号 |
" | " | 双引号 |
CDATA标签
CDATA指的是不应由XML解析器进行解析的文本数据
从"<![CDATA[“开始,到”]]>"结束
DTD文档类型定义
是一种简单易懂的语义约束方式
文件扩展名.dtd
利用DTD种的<!ELEMENT>标签,可以定义文档种允许出现的节点及数量,例:
定义hr节点下只允许出现1个employee子节点
<!ELEMENT hr (employee)>
employee节点下必须包含一下四个节点,且按顺序出现
<!ELEMENT employee (name,age,salary,department)>
定义name标签只能是文本,#PCDATA代表文本元素
<!ELEMENT name (#PCDATA)>
如某个字节点需要多次重复出现,则需要在子节点后增加相应的描述符。
hr节点写最少出现一个employee子节点
<!ELEMENT hr (employee+)>
hr节点下可出现0…n个employee子节点
<!ELEMENT hr (employee*)>
hr节点下最多只能出现一个employee子节点(不出现或出现一个)
<!ELEMENT hr (employee?)>
定义属性(CDATA类型,默认为"")
<!ATTLIST employee no CDATA "">
定义内容类型(#PCDATA纯文本)
<!ELEMENT name (#PCDATA)>
定义内容是子节点
<!ELEMENT department (dname,address)>
引用DTD文件
在XML中使用<DOCTYPE>标签来引用DTD文件
<!DOCTYPE 根节点 SYSTEM "dtd文件路径">
示例:
<!DOCTYPE hr SYSTEM "hr.dtd">
XML Schema
XML Schema比DTD更复杂,提供了更多功能
XML Schema提供了数据类型、格式限定、数据范围等特性
XML Schema是W3C标准
示例代码:
hr.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<hr xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="hr.xsd">
<employee no="3309">
<name>x1</name>
<age>20</age>
<salary>4000</salary>
<department>
<dname>会计部</dname>
<address>XX大厦-B102</address>
</department>
</employee>
<employee no="3109">
<name>x2</name>
<age>20</age>
<salary>4000</salary>
<department>
<dname>会计部</dname>
<address>XXX</address>
</department>
</employee>
</hr>
hr.xsd文件
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema">
<element name="hr">
<!-- complexType标签含义是复杂节点,包含子节点时必须使用这个标签-->
<complexType>
<!-- sequence标签表示每个标签必须严格按顺序编写-->
<sequence>
<!-- element节点最少出现一次,最多出现9999次 -->
<element name="employee" minOccurs="1" maxOccurs="9999">
<complexType>
<sequence>
<element name="name" type="string"></element>
<element name="age">
<!-- 限制age的取值范围18-60 -->
<simpleType>
<restriction base="integer">
<minInclusive value="18"></minInclusive>
<maxInclusive value="60"></maxInclusive>
</restriction>
</simpleType>
</element>
<element name="salary" type="integer"></element>
<element name="department">
<complexType>
<sequence>
<element name="dname" type="string"></element>
<element name="address" type="string"></element>
</sequence>
</complexType>
</element>
</sequence>
<!-- use=required表示no属性在任何employee中都是必须的-->
<attribute name="no" type="string" use="required"></attribute>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>