ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

xml的dtd约束简介

2019-08-31 21:43:45  阅读:178  来源: 互联网

标签:xml 简介 元素 约束 语法 引入 dtd


DTD约束

xml约束

xml主要用来存储数据,而不同的数据有不同数据及结构,为了使数据在存入xml时不出错的满足某项标准,因此需要对xml进行约束来规范数据的存储。
xml的约束技术有两种:dtd和schema,这里主要介绍下dtd

什么是dtd?

文档类型定义(Document Type Definition)是一套为了进行程序间的数据交换而建立的关于标记符的语法规则。

  <!ELEMENT note (to,from,heading,body)>
  <!ELEMENT to      (#PCDATA)>
  <!ELEMENT from    (#PCDATA)>
  <!ELEMENT heading (#PCDATA)>
  <!ELEMENT body    (#PCDATA)>

上面规定了xml中note元素下只能有4种标签,每个标签必须出现,按to,from,heading,body的顺序出现,且只能出现一次,note下面的子元素内容都是字符串类型。

它用一串代码实现的语法规则,xml只需要引入就可以用,主要应用在eclipse等集成开发环境中,如果不符合约束则会报错。

引入dtd

dtd引入方式和css,js引入比较像,分为:外部引入和内部引入

内部引入

例子:

<?xml version="1.0"?>

<!--dtd开始-->
<!DOCTYPE note [
  <!ELEMENT note (to,from,heading,body)>
  <!ELEMENT to      (#PCDATA)>
  <!ELEMENT from    (#PCDATA)>
  <!ELEMENT heading (#PCDATA)>
  <!ELEMENT body    (#PCDATA)>
]>

<!--dtd结束-->
<note>
  <to>George</to>
  <from>John</from>
  <heading>Reminder</heading>
  <body>Don't forget the meeting!</body>
</note>

语法:
<!DOCTYPE 根元素 [dtd内容]>

外部引入

外部引入又分为两种:系统引入和网络引入

一个是从自身的计算机文件系统中引入,一个是从网络上引入。

系统引入:

例子:

<!DOCTYPE note SYSTEM "note.dtd">

语法:
<!DOCTYPE 根元素 SYSTEM "文件路径">

网络引入:

例子(mybatis配置文件的dtd约束):

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

语法:
<!DOCTYPE 根元素 PUBLIC "dtd名称" "dtd文件的url">

dtd语法规则

dtd:元素约束

包括元素的数量,内容类型约束

首先要简答的了解下正则表达式的某些符号:*,?,+,|

a*表示*前面的a可以出现零次或多次
a?表示a可以出现和不可出现
a+表示a可以出现一次或多次
a|b表示要么是a,要么是b,不能同时出现

元素分为:简单元素(无子元素),复杂元素(有子元素)

声明一个元素的语法:
<!ELEMENT 元素名称 类别>

类别有:EMPTY,ANY,#PCDATA,(子元素[,子元素])

EMPTY:为空
ANY:都可以
#PCDATA:字符串
(子元素[,子元素]):复杂元素,内容只能为子元素

注意:每一个想要在xml出现的元素都要在dtd中声明,否则会报错。

在一个复杂元素中约束子元素出现的数量用*,?,+,|.
比如:

<!DOCTYPE person [
  <!ELEMENT person (name*,age?,sex+)>
  <!ELEMENT name    (#PCDATA)>
  <!ELEMENT age     (#PCDATA)>
  <!ELEMENT sex     (#PCDATA)>
]>

用上面修饰的dtd中元素person中:

name标签可以出现零次或多次
age标签可以出现和不出现
sex标签可以出现一次或多次

如果改成:

<!DOCTYPE person [
  <!ELEMENT person (name*|age?|sex+)>
  <!ELEMENT name    (#PCDATA)>
  <!ELEMENT age     (#PCDATA)>
  <!ELEMENT sex     (#PCDATA)>
]>

,换成|,则name,age,sex标签只能出现其中一个

dtd:属性约束

声明一个属性的语句:
<!ATTLIST 元素名称 属性名称 属性类型 默认值>

元素名称:所属的元素

属性类型
在这里插入图片描述

默认值
在这里插入图片描述

例子:
<!ATTLIST person name CDDATA #REQUIRED>
表示<person name="John" ></person>中name必须存在,且类型为字符串

<!ATTLIST person sex (male|female) #REQUIRED>
表示<person sex="male" ></person>中sex必须在male和female中选,且必须存在

dtd:实体

实体类似于变量,可以将实体中的值取出来

例子

<!ENTITY writer "Bill Gates">
<!ENTITY copyright "Copyright W3School.com.cn">

使用


<author>&writer;&copyright;</author>

语法<!ENTITY 实体名称 "实体的值">

标签:xml,简介,元素,约束,语法,引入,dtd
来源: https://blog.csdn.net/qq_40913192/article/details/100176614

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有