XML约束
dtd约束
(1)看xml中有多晒个元素,就在dtd文件中写几个<!ELEMENT>
(2)判断元素是简单元素还是复杂元素,看是否含有子元素
- 简单元素:<!ELEMENT 元素名称 (#PCDATA)>
- 复杂元素:<!ELEMENT 元素名称 (子元素名称)>
(3)需要在xml文件中引入dtd文件
<!DOCTYPE 根元素名称 SYSTEM "dtd文件的路径">
* dtd的三种引入方式
(1)引入外部的dtd文件
<!DOCTYPE 根元素名称 SYSTEM "dtd路径">
(2)使用内部的dtd文件
<!DOCTYPE 根元素名称 [
<!ELEMENT person (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
]>
(3)使用外部的dtd文件(网络上的dtd文件)
<!DOCTYPE 根元素 PUBLIC "DTD名称" "DTD文档的URL">
- 后面学到框架 struct2 使用配置文件 使用 外部的dtd文件
* 使用dtd定义元素
** 语法:<!ELEMENT 元素名 约束>
** 简单元素:没有子元素的元素
<!ELEMENT name (#PCDATA)>
*** (#PCDATA):约束name是字符串类型
*** EMPTY:元素为空
*** ANY:任意
** 复杂元素:
<!ELEMENT 元素名称 (子元素)>
* <!ELEMENT person (name+,age?,sex*,school)>
+:表示一次或多次
?:表示零次或一次
*:表示零次或多次
* 子元素直接使用逗号隔开,表示元素出现的顺序
* 子元素使用|隔开,表示只能出现其中的任意一个
* 使用dtd定义属性
* 语法:<!ATTLIST 元素名称
属性名称 属性类型 属性约束
>
* 属性类型
- CDATA:字符串
<!ATTLIST name
ID1 CDATA #REQUIRED
>
- 枚举:表示只能在一定的范围内出现值,但是每次只能出现其中的一个
** 红绿灯效果 (aa|bb|cc)
<!ATTLIST hobby
ID2 (aa|bb|cc) #REQUIRED
>
- ID:值只能是字母或者下划线开头
<!ATTLIST name
ID3 ID #REQUIRED
>
* 属性的约束
- #REQUIRED:属性必须存在
- #IMPLIED:属性可有可无
- #FIXED:表示一个固定值,属性的值必须设置这个值
<!ATTLIST sex
ID4 CDATA #FIXED "ABC"
>
- 直接值
* 不写属性使用直接值,写属性就使用设置的值
<!ATTLIST school
ID5 CDATA "www"
>
Scheme约束
简介
(1)schema符合xml的语法、语句
(2)一个xml中可以有多个schema,多个schema使用名称空间区分
(3)schema里面可以支持更多的数据类型
(4)schema语法更加复杂,暂时还不能替代dtd
快速入门
(1)创建一个schema文件,后缀名是 .xsd
- 根节点<schema>
(2)在schema文件里面
- 属性 xmlns="http://www.w3.org/2001/XMLSchema"
- 表示当前xml文件是一个约束文件
- targetNamespace="http://www.example.org/test"
- 直接通过这个地址引入约束文件
- xmlns:tns="http://www.example.org/test" elementFormDefault="qualified"
步骤
(1)看xml有多少个元素 <element>
(2)看简单元素和复杂元素
- 如果是复杂元素
<complexType>
<sequence>
子元素
</sequence>
</complexType>
- 简单元素,写在复杂元素的里面
<element name="person">
<complexType>
<sequence>
<element name="name" type="string"></element>
<element name="age" type="int"></element>
</sequence>
</complexType>
</element>
(3)在被约束文件里面引入约束文件
* xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
- 表示xml是一个被约束文件
- :xsi是避免重复而取得名字,可以随便取
* xmlns="http://www.example.org/test"
- 是约束文档里面的targetNamespace
* xsi:schemaLocation="http://www.example.org/test test.xsd"
- targetNamespace 空格 约束文档的地址路径
* <sequence>:表示元素出现的顺序
<all>:元素只能出现一次
<choice>:元素只能出现其中的一个
maxOccurs="unbounded":表示元素出现的次数
<any></any>:表示任意元素
* 可以约束属性
** 写在复杂元素里面
写在</complexType>之前
- name:属性名称
- type:属性类型 int string
- use:属性是否必须出现 required


复杂的schema约束


浙公网安备 33010602011771号