目录
1、dtd 约束
【1】编写步骤
- 看 xml 中有多少个元素,有几个就在 dtd 文件中写几个 <!ELEMENT>
- 判断元素是简单元素还是复杂元素
- 简单元素:没有子元素
<!ELEMENT 元素名称 (#PCDATA)> - 复杂元素:有子元素的元素
<!ELEMENT 元素名称 (子元素)>
- 简单元素:没有子元素
- 需要在 xml 文件中引入 dtd 文件
<!DOCTYPE 根元素名称 SYSTEM "dtd文件的路径">
【2】xml 文件引入 dtd 文件方法
- 内部引入
<!DOCTYPE students [
<!ELEMENT students (student*)>
<!ELEMENT student (name,age,sex)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ATTLIST student number ID #REQUIRED>
]> - 外部引入
- 本地:<!DOCTYPE 根元素名称 SYSTEM "dtd文件路径">
- 网络:<!DOCTYPE 根元素名称 PUBLIC "dtd名称" "dtd文件的URL">
- 内部引入:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE students [
<!ELEMENT students (student*)>
<!ELEMENT student (name,age,sex)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ATTLIST student number ID #REQUIRED>
]>
<students>
<student number="s001">
<name></name>
<age></age>
<sex></sex>
</student>
</students>
- 外部引入:
xml 文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE students SYSTEM "student.dtd">
<students>
<student number="s001">
<name></name>
<age></age>
<sex></sex>
</student>
</students>
dtd 文件
<!ELEMENT students (student*)>
<!ELEMENT student (name,age,sex)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ATTLIST student number ID #REQUIRED>
【3】dtd 元素定义
- 语法:<!ELEMENT 元素名 约束>
- 简单元素:<!ELEMENT name (#PCDATA)>
- (#PCDATA):约束 name 是字符串类型
- EMPTY:约束元素为空
- AND:约束任意元素
- 复杂元素:<!ELEMENT student (name+,age?,sex*)>
- <!ELEMENT 元素名称 (子元素)>
- 表示元素出现的次数:
- +:表示一次或者多次
- ?:表示零次或者一次
- *:表示零次或者多次
- 子元素直接使用逗号隔开
- 表示元素出现的顺序
- 子元素直接使用 | 隔开
- 表示元素只能出现其中的任意一个
【4】dtd 属性定义
- 语法:<!ATTLIST 元素名称 属性名称 属性类型 属性的约束>
- 属性类型
- CDATA:字符串
- | :枚举(aa|bb|cc)
- ID:值只能是字符串或者下划线开头
- 属性的约束
- #REQUIRED:表示属性必须存在
- #IMPLIED:表示属性可有可无
- #FIXED:表示一个固定值
- 直接值:直接设置
【5】dtd 定义实体
- 语法:<!ENTITY 实体名称 "实体的值"> rg:<!ENTITY NAME "一颗星">
- 使用实体:&NAME;
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE students [
<!ELEMENT students (student*)>
<!ELEMENT student (name,age,sex)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ATTLIST age num (18|19|20) #REQUIRED>
<!ATTLIST student number ID #REQUIRED>
<!ENTITY NAME "一颗星">
]>
<students>
<student number="s001">
<name>&NAME;</name>
<age num="18"></age>
<sex></sex>
</student>
</students>
2、schema 约束
【1】属性
在 schema 文件里面开头有几个属性
- xmlns="http://www.w3.org/2001/XMLSchema"
- 表示当前xml是一个约束文件
- targetNamespace="http://www.oneStar.cn"
- 使用schema约束文件,直接通过这个地址引入约束文件,可以是个随意的地址
- elementFormDefault="qualified">
- 表示质量良好
【2】特点
- schema 是 xml 语句,符合 xml 语法
- 一个 xml 中可以有多个 schema,多个 schema 使用命名空间来区分
- dtd 文件里面只有 PCDATA 类型,但 schema 里面可以支持更多的数据类型
- schema 语法更加的复杂
- 以 .xsd 为后缀名
【3】编写步骤
- 看 xml 中有多少个元素,有多少个元素就写多少个 <element>
- 看是简单元素还是复杂元素
- 复杂元素:
<complexType>
<sequence>
子元素
</sequence>
</complexType> - 简单元素:写在复杂元素<sequence>里面
<sequence>
<element name="name" type="string"></element>
</sequence>
- 复杂元素:
- 在 xml 中引入 xsd 文件
- <person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- 表示该文件时被约束文件
- xmlns="http://www.oneStar.cn"
- 是约束文件里面的 targetNamespace
- xsi:schemaLocation="http://www.oneStar.cn person.xsd">
- targetNamespace + 空格 + 约束文档的地址路径
- <person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
person.xsd约束文件
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.oneStar.cn"
elementFormDefault="qualified">
<element name="person">
<complexType>
<sequence>
<element name="name" type="string"></element>
<element name="age" type="int"></element>
</sequence>
</complexType>
</element>
</schema>
person.xml被约束文件
<?xml version="1.0" encoding="UTF-8"?>
<person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.oneStar.cn"
xsi:schemaLocation="http://www.oneStar.cn person.xsd">
<name>一颗星</name>
<age>18</age>
</person>
【4】复杂元素指示器
- <sequence>:表示元素的出现顺序
- <all>:表示元素只能出现一次
- <choice>:表示元素只能出现其中一个
- <maxOccurs="unbounded">:表示元素出现的次数,unbounded表示不限制次数
- <any></any>:表示任意元素
【5】约束属性
- 位置:写在复杂元素里面的 </complexType> 之前
<attribute name="id1" type="int" use="required"></attribute>- name:属性名称
- type:属性类型 int string
- use:属性是否必须出现 required