XML约束

XML约束

  1. 什么是约束

  2. DTD约束

  3. Schema约束


什么是约束

由于XML的标签是完全自定义的可以去写任何标签,标签内也可以写任何内容,为了去规范去定义只能有哪些标签,标签的内容只能有哪些类型只能是什么。这个时候就需要写约束文件来应用到需要的XML里面。约束有两种方式一种是dtd,第二种是schema,前者相对简单但功能相比schema较弱

dtd约束

首先导入dtd约束

一种是直接写在xml里面

声明语句<!DOCTYPE 根元素[元素定义都在其中]>


<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE persons[
   <!ELEMENT students (student*)>
   <!ELEMENT student (name,age,sex)>
   <!ELEMENT name (#PCDATA)>
   <!ELEMENT age (#PCDATA)>
   <!ELEMENT sex (#PCDATA)>
   <!ATTLIST student number ID #REQUIRED>
]>

<persons>

   <person>
       <name></name>
       <age></age>
       <sex></sex>
   </person>

</persons>

第二种是外部导入

声明语句

本地<!DOCTYPE 根元素 SYSTEM "文件名"

网络<!DOCTYPE 根元素 PUBLIC "地址" "文件名">

student.dtd

<!ELEMENT students (student*) >
<!ELEMENT student (name,age,sex)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ATTLIST student number ID #REQUIRED>

student.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE students SYSTEM "student.dtd">

<students>

<student number="a001">
<name>张三</name>
<age>18</age>
<sex>男</sex>
</student>

<student number="a002">
<name>李四</name>
<age>20</age>
<sex>男</sex>
</student>

</students>

dtd的语法

在 DTD 中,XML 元素通过元素声明来进行声明。元素声明语句

<!ELEMENT 元素名称 类型>

<!ELEMENT 元素名称 (元素内容)>

类型有三种
EMPTY:空内容的元素
ANY:内容为任何形式
(#PCDATA):内容不包含子元素,即只能是文本内容

定义一个空类型的元素
<!ELEMENT student EMPTY>
那么XML里只能这么写
<student/>

定义一个可以填任意内容的元素
<!ELEMENT student ANY>
那么XML里这个元素可以这样写
<student>
   我是学生
   <age></age>
   <name></name>
</student>

定义一个内容只能是文本的元素
<!ELEMENT student (#PCDATA)>
那么XML里这个元素中不能包含子元素<student>
   我是学生
</student>
声明元素包含的子元素有且仅出现一次
<!ELEMENT 元素名 (子元素)>
声明元素包含的子元素至少一次
<!ELEMENT 元素名 (子元素+)>
声明元素包含的子元素可以有0次或多次
<!ELEMENT 元素名 (子元素*)>
声明元素包含的子元素只能出现0次或1次
<!ELEMENT 元素名 (子元素?)>
声明元素包含的子元素选其一"或者"的关系
<!ELEMENT 元素名 (子元素1|子元素2)>
多个子元素顺序要按照dtd中声明的顺序

定义包含子元素的元素
<!ELEMENT books (book*)>
<!ELEMENT book (name,author,version)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT version (#PCDATA)>

在XML中
<books>
   <book>
       <name>书1</name>
       <author>作者1</author>
       <version>1.0</author>
   </book>
   <book>
       <name>书1</name>
       <author>作者1</author>
       <version>1.0</author>
   </book>
</books>


属性声明

声明语句<!ATTLIST 元素名 属性名 属性类型  默认值 >


属性类型比如有

CDATA:字符类型

(en1|en2|en3····):枚举类型值只能在其中

ID:值不能有一样的


默认值有

"值":直接给出默认值

#REQUIRED:标注此属性必须写

#IMPLIED:此属性可以不写

#FIXED "值" :此属性值是固定的给出的值

dtd中
<!ELEMENT student ANY>
<!ATTLIST student sex (男|女) #REQUIRED>
xml中
<student sex="男"></student>
默认值为#REQUIRED则student的sex属性一定得写

还有实体声明

声明语句

<!ENTITY 实体名 "实体值">

这样通过引用实体来引用某些值

引用语句: &实体名;

dtd中
<!ELEMENT student ANY>
<!ATTLIST student sex (男|女) #REQUIRED><!ENTITY a "男">
那么xml中就可以这样写
<student sex="&a;"></student>


scheme约束

XML Schema 可针对未来的需求进行扩展

XML Schema 更完善,功能更强大

XML Schema 基于 XML 编写

XML Schema 支持数据类型

XML Schema 支持命名空间

定义简单元素

<xs:element name="xxx" type="yyy"/>

就是不包含子元素,内容类型直接定义为数据类型

或者自定义类型

有复杂类型和简单类型

可以直接写在标签内部,或者在外面定义

<xs:element name="employee">  <xs:complexType>    <xs:sequence>      <xs:element name="firstname" type="xs:string"/>      <xs:element name="lastname" type="xs:string"/>    </xs:sequence>  </xs:complexType></xs:element>
<xs:element name="employee" type="personinfo"/>
<xs:complexType name="personinfo"> <xs:sequence> <xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> </xs:sequence></xs:complexType>

属性的定义

<xs:attribute name="xxx" type="xxx"/>

除此之外还有各种指示器,或者限制来约束值的范围等


笔记目的 : 对约束做简单了解会写一点简单的约束能看得懂外部导入的约束


34ce742696cb32140776eac894185c74610.png c2472d501e6058e96a254ed02ca2e3b3ee0.gif

勤学如春起之苗,不见其增,只有所长。辍学如磨刀之石,不见其增,日有所亏

愿你的今天胜过昨天

3d66b55e03d4e59614fe4fe673d5340b4eb.jpg



85477ee269bd5e4fe3aeca071bc36df1daf.png

本文分享自微信公众号 - IT那个小笔记(qq1839646816)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值