实例分析XML约束 - 极悦
首页 课程 师资 教程 报名

实例分析XML约束

  • 2020-11-27 17:43:37
  • 1171次 极悦

事实上,约束在Java中是很常见的,但是我们很少去思考为什么需要用到约束呢?比如我们现在定义一个student.xml文件,我们想要在其中保存关于学生的信息,例如id,name,age,但是如果随便写入一个标签例如<你好>,从语法的角度上虽然是符合规范的,但是这显然与我们想要存储的东西没有任何关系,所以我们需要通过XML约束技术,约束XML中只能出现的元素。


XML约束技术分为两大类,一种相对简单的约束技术:DTD,一种相对复杂的约束技术:Schema。下面我们来大致说一下这两种约束的思路。

 

一、DTD约束

1.dtd的引入方式

A:使用内部的dtd文件,即将约束规则定义在xml文档中

<!DOCTYPE 根元素名称 [

<!ELEMENT person (name,age)>

<!ELEMENT name (#PCDATA)>

<!ELEMENT age (#PCDATA)>

]>


B:引入外部的dtd文件

<!DOCTYPE 根元素名称 SYSTEM "dtd路径">


C:使用外部的dtd文件(网络上的dtd文件)

<!DOCTYPE 根元素 PUBLIC "DTD名称" "DTD文档的URL">

例如使用 struts2框架 使用配置文件 所使用 外部的dtd文件

<!DOCTYPE struts PUBLIC   "-//Apache Software Foundation//DTD

Struts Configuration 2.0//EN"    

"http://struts.apache.org/dtds/struts-2.0.dtd">

 

2.使用dtd定义元素

<!ELEMENT 元素名 约束>


A:简单元素(没有子元素)

ELEMENT name (#PCDATA)>

(#PCDATA): 约束name是字符串类型

EMPTY : 元素为空(没有内容)

- <sex></sex>

ANY:任意


B:复杂元素

<!-- 语法 -->

<!ELEMENT person (id,name,age,)>

子元素只能出现一次

<!ELEMENT 元素名称 (子元素)>

<!-- 子元素出现次数 -->

* :一次多或多次

?:零次或一次

* :零次或多次

<!-- 子元素直接使用逗号隔开 -->

表示元素出现的顺序

<!-- 子元素直接使用 | -->

表示元素只能出现其中的任意一个


3.使用dtd定义属性

<!-- 语法 -->

<!ATTLIST 元素名称

属性名称 属性类型 属性的约束

>

 

<!-- 属性类型 --> CDATA: 字符串

<!ATTLIST birthday

ID1 CDATA #REQUIRED

>

 

<!-- 枚举 -->

表示只能在一定的范围内出现值,但是只能每次出现其中的一个,红绿灯效果

<!ATTLIST age

ID2 (AA|BB|CC)  #REQUIRED

>

 

<!-- ID: 值只能是字母或者下划线开头 -->

<!ATTLIST name

ID3 ID   #REQUIRED

>

 

<!-- 属性的约束 -->

#REQUIRED:属性必须存在

#IMPLIED:属性可有可无

#FIXED: 表示一个固定值 #FIXED "AAA"

属性的值必须是设置的这个固定值

<!ATTLIST sex

ID4 CDATA #FIXED "ABC"

>

 

直接值

不写属性,使用直接值

写了属性,使用设置那个值

<!ATTLIST school

ID5 CDATA "WWW"

>

 

二、Schema约束

schema 符合XML的语法,一个xml中可以有多个 schema ,多个 schema 使用名称空间区分DTD里面有PCDATA类型,但是在 schema 里面可以支持更多的数据类型。XML Schema也是一种用于定义和描述XML文档结构与内容的模式语言,其出现是为了克服DTD的局限性.

后缀名:xsd

 

引入:

填写xml文档的根元素

 

引入xsi前缀.  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

表示xml文件是一个约束文件


引入xsd文件命名空间.  xsi:schemaLocation="http://www.bwh.cn/xml  student.xsd"

使用一个使用schema约束文件,直接通过这个地址引入约束文件

  通常使用一个url地址防止重名

为每一个xsd约束声明一个前缀,作为标识  xmlns="http://www.bwh.cn/xml"

1.看xml中有多少个元素

<element>

 

2.看简单元素和复杂元素

<element name="person">

<complexType>

<sequence>

<element name="name" type="string"></element>

<element name="age" type="int"></element>

</sequence>

</complexType>

</element>

 

3.被约束文件里面引入约束文件

<person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns="http://www.bwh.cn/20151111"

xsi:schemaLocation="http://www.bwh.cn/20151111 1.xsd">

 

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

-- 表示xml是一个被约束文件

xmlns="http://www.bwh.cn/20151111"

-- 是约束文档里面 targetNamespace

xsi:schemaLocation="http://www.bwh.cn/20151111 1.xsd">

-- targetNamespace 空格  约束文档的地址路径

可以约束属性

A: <sequence>:表示元素的出现的顺序

B: <all>: 元素只能出现一次

C: <choice>:元素只能出现其中的一个

D: maxOccurs="unbounded": 表示元素的出现的次数

E: <any></any>:表示任意元素

 

写在复杂元素里面

写在 </complexType>之前

 

--

<attribute name="id1" type="int" use="required"></attribute>

- name: 属性名称

- type:属性类型 int stirng

- use:属性是否必须出现 required

 

XML约束本质上还是限制XML文档中创建的元素及属性,离不开它的字面意思。因为xml文档是可以自定义元素的,这会让使用xml文档的应用程序无法知道xml文档的真实结构,。通常应用程序都会要求xml文件的结构是固定的,以满足自己的需求,这就说明,不同的应用程序要求自己的xml文档必须符合一定的要求,也就是我们所说的XML约束。讲的再多,不如实战,本站的Java基础教程里面有着许多的XML文档,小伙伴看完了本文可以去小试牛刀。


选你想看

你适合学Java吗?4大专业测评方法

代码逻辑 吸收能力 技术学习能力 综合素质

先测评确定适合在学习

在线申请免费测试名额
价值1998元实验班免费学
姓名
手机
提交