XML约束(3)
本节要点:
- 了解XML的约束模式
- 了解DTD
- 了解Schema
1 了解XML的约束模式
计算机程序在处理XML文档之前,必须能够解析出XML文档的内容中各个元素的相关信息。将解析出来的信息再交给下游程序进行下一步处理。Parser就是用于解析XML文档的解析器程序,Parser可以独立使用,也可以成为编辑软件或浏览器的一部分。
所以XML文档必须严格遵循一定的语法,遵守XMl基本语法规则和规范的XML文档就称为Well-formed XML。一个XML文档必须是格式良好的,并且内容满足某些条件的约束。
约束模式是一套规则,对XML文档中的内容作出限制。约束模式定义了XML文档中允许出现的元素名,元素中的属性,内容类型,及元素间的嵌套关系和出现顺序。约束模式通常都在一个单独的文件中进行定义。约束模式的内容也需要遵循一定的语法规则,使用XML约束模式语言来定义XML约束模式的语法规则,模式文档采用某种约束模式语言编写如:XML DTD、XDR、SOX、XML Schema等,应用最广泛和具有代表意义的是XML DTD和XML Schema。
2 DTD
XML DTD(Document Type Definition 文档类型定义)
- 最早出现的一种XML约束模式语言
- 目前使用最广泛的一种XML约束模式
- 以.dtd为扩展名
- Struts使用较多
有效的XML必须遵循XML 的基本语法规则,且符合为它指定的某个XML约束模式的XML文档。校验是将一个XML文档和它所引用的XML约束模式进行比较分析,看其中的内容是否符合XML约束模式的过程。
2.1 DTD语法
l DTD(document type definition):文档类型定义
l 作用:约束XML的书写规范
1.一个简单例子
book.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE books SYSTEM "../dtd/books.dtd">
<books>
<book>
<author>张三</author>
<title>一本好书</title>
<price>20.00</price>
</book>
</books>
books.dtd
<!ELEMENT books (book+)>
<!ELEMENT book (author,title,price)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT price (#PCDATA)>
注:元素和子元素属性之间有空格分隔,如author (#PCDATA)
1) 元素声明语法
语法格式:
<!ELEMENT 元素名称 使用规则>
使用规则:
定义元素中包含的组成部分,以及每种组成成分出现的次数、次序,还可以是某些成分进行某种关系组合后出现的次数、次序。
元素通配符使用
|
元字符 |
含义 |
|
+ |
出现一次或多次 |
|
* |
出现零次或多次 |
|
? |
可选,不出现或出现一次 |
|
( ) |
一组要共同匹配的表达式 |
|
| |
或(OR) |
|
元素A, 元素B, 元素C |
元素之间以逗号分割,要求严格遵从顺序要求 |
|
元素A 元素B 元素C |
元素之间以空格分割,无须遵从顺序要求 |
示例:
(book+):表示books元素中可以包含一个或多个book元素
(title,author,price)
- 表示book元素中要嵌套title、author、price子元素,并且这些子元素要按顺序依次出现,只能出现一次
- 如果没有“,”隔开,表示各子元素可以任意次序出现,但必须且只能出现一次
- 如果使用“|”隔开,表示只能出现它们之中的任何一个
(#PCDATA)
用于表示元素中的内容是普通文本字符串。
2) 属性声明语法
语法格式:
<!ATTLIST 标签名 属性列表 属性类型 出现方式>
“出现方式”设置
|
设置 |
描述 |
|
#REQUIRED |
表示这个属性是必须的 |
|
#IMPLIED |
表示这个属性的值是可选的 |
|
#FIXED |
表示这个属性有一个固定的不能更改的值 |
|
默认 |
表示这个属性有一个默认值 |
“属性类型”设置
|
设置 |
描述 |
|
CDATA |
文本类型 |
|
Enumerated |
一个字符串值得枚举,表示可以任选其中一个 |
|
ID |
表示唯一标示符(注:由ID表示的属性不能以数字开头) |
|
ENTITY |
一个外部实体(现在的浏览器不支持) |
示例:
books.dtd
|
<!ELEMENT books (book+)> <!ELEMENT book ((author,title,price)|comment+)> <!ELEMENT author (#PCDATA)> <!ELEMENT title (#PCDATA)> <!ELEMENT price (#PCDATA)> <!ATTLIST comment author CDATA #IMPLIED title CDATA #REQUIRED price CDATA #IMPLIED language CDATA #FIXED "Chinese" type (java|.net|oracle) "java" id ID #REQUIRED > |
Books.xml
|
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE books SYSTEM "books.dtd"> <books> <book> <author>joy</author> <title>java core</title> <price>100</price> </book> <book> <comment id="S001" author="joy" title="Java" price="20" language="Chinese" /> <comment id="S002" author="joy" title="Java" price="20" language="Chinese" /> </book> </books> |
2.2 引入外部DTD文件
使用文档类型声明DOCTYPE语句引入DTD。格式如下:
<!DOCTYPE 文档类型名称 SYSTEM “DTD文件的URL”>
<! DOCTYPE 文档类型名称 PUBLIC “DTD名称” “DTD文件的URL”>
注:
- 文档类型名称由编写者自己定义,通常是使用XML文档的根元素名称作为文档类型名称
- SYSTEM表示XML文档所遵循的是一个本地或者组织内部所编写和使用的DTD文件
- PUBLIC表示XML文档遵循的是一个由权威机构制定的,公开提供给特定行业或公众使用的DTD文件
- “DTD名称”需要使用双引号括起来,应该符合一些标准的规定
- SYSTEM 后面的“DTD文件的URL”可以是相对URL,也可以是绝对URL;PUBLIC 后面的“DTD文件的URL” 指定DTD文件在Internet上的绝对URL
- <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">中:
ü “-” 表示ISO标准的DTD,“+”被改进的非ISO标准的DTD,“-”未被改进的非ISO标准的DTD
ü “Apache Software Foundation”表示 DTD所有者的名称
ü “DTD Struts Configuration 2.3”表示DTD所描述的文件的说明
ü “EN“表示DTD语言的种类
2.3 嵌入DTD定义语句
可以在XML中嵌入使用DTD。
3 Schema
XML Schema
- 对XML文档内容进行约束的另外一种模式
- 目的是为了克服DTD的局限性,为XML提供丰富的语法结构
- XML Schema已经成为W3C的正式推荐标准
- 以.xsd为扩展名
XML Schema VS DTD:
- XML Schema符合XML语法结构。
- DOM、SAX等XML API很容易解析出XML Schema文档中的内容。
- XML Schema对名称空间支持得非常好。
- XML Schema比XML DTD支持更多的数据类型,并支持用户自定义新的数据类型。
- XML Schema定义约束的能力非常强大,可以对XML实例文档作出细致的语义限制。
- XML Schema不能像DTD一样定义实体,比DTD更复杂,但Xml Schema现在已是w3c组织的标准,它正逐步取代DTD。
schema的基础是数据类型,理解schema的最好方式是将它看成是数据类型的层次结构,在层次结构的底层是内置的不可再划分的数据类型,如:整数、字符串、浮点数、日期等,表示xml文件可能包含的数据的基本单元。通过组合这些简单的数据类型,可以创建出各种不同的复杂数据类型,然后可以使用这些数据类型来定义元素和属性。这样,你将为xml文档的根元素、子元素、一直到最底层的包含文档数据的元素定义数据类型,因此,学习创建xsd schema,大体上就成了一个定义数据类型的过程。
XML约束(3)的更多相关文章
- XML约束之DTD
XML文件的约束:什么叫约束呢?顾名思义,就是对xml文件的内容进行按照既定规则的限制.我们知道,因为xml文件的标签是可以自定义的,而往往我们用xml文件都是为了表达一定的数据集合(即小型的数据库) ...
- JAVA基础学习之XMLCDATA区、XML处理指令、XML约束概述、JavaBean、XML解析(8)
1.CDATA区在编写XML文件时,有些内容可能不想让解析引擎解析执行,而是当作原始内容处理.遇到此种情况,可以把这些内容放在CDATA区里,对于CDATA区域内的内容,XML解析程序不会处理,而是直 ...
- XML约束——DTD约束
参考: 方立勋老师的讲课视频. 什么是XML约束 •在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束. 为什么需要XML约束 常用的约束技术 •XML DTD • ...
- 二、XML约束
XML约束有dtd约束和Schema约束两种 dtd约束:可以在xml内部写dtd约束也可以在xml中引用外部dtd文件 book.dtd<!ELEMENT 书架 (书+)> < ...
- javaweb学习总结八(xml约束DTD)
一:XML约束概念 xml约束:可以编写一个文档来约束xml文件的书写规范. xml语言格式比较严谨,不可能让程序员随意编写,所以必须要有约束. 二:常用的xml约束技术 1:DTD,document ...
- JavaBean 内省API BeanUtils工具 泛型 xml xml约束
1 什么是JavaBean?有何特征? 1)符合特定规则的类 2)JavaBean分二类: a)侠义的JavaBean .私有的字段(Field) .对私 ...
- XML约束
XML约束--能够看懂约束内容,根据约束内容写出符合规则的xml文件. DTD约束 1)导入dtd方式 内部导入 <!DOCTYPE note [ <!ELEMENT note (to,f ...
- xml约束的概念
1 xml 约束的概念 XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML ...
- xml约束技术之dtd
DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块.这篇文章作简单介绍下DTD的用法.想学习完整的请点击下面w3c的教程. 1.DTD官方教程 ##2.xml约束技术: DTD约束:语法相 ...
随机推荐
- ldap数据库--ODSEE--ACI
查看跟DN下的aci ldapsearch -h hostname -p port -D "cn=Directory Manager" -w - -b "BASE_DN& ...
- android wear开发:为可穿戴设备创建一个通知 - Creating a Notification for Wearables
注:本文内容来自:https://developer.android.com/training/wearables/notifications/creating.html 翻译水平有限,如有疏漏,欢迎 ...
- MySql的虚拟机和Xshell5的连接过程
给大家介绍一下虚拟机和Xshell5连接的基本配置1.安装虚拟机,跟着提示一步一步安装即可,注意添加镜像文件,虚拟机就完成了.2.下载一个Xshell5,安装好之后.要修改虚拟机的网卡状态 1) ...
- vue+node+webpack搭建环境
一.环境搭建 1.1.去官网安装node.js( http://www.runoob.com/nodejs/nodejs-install-setup.html ) 注意node的版本,只有支持和谐模 ...
- [最短路]P1119 灾后重建
题目背景 B地区在地震过后,所有村庄都造成了一定的损毁,而这场地震却没对公路造成什么影响.但是在村庄重建好之前,所有与未重建完成的村庄的公路均无法通车.换句话说,只有连接着两个重建完成的村庄的公路才能 ...
- C/S架构自动化测试入门
所谓C/S架构即Client/Server(客户端/服务器架构).虽然近年来C/S架构产品越来越少,大有被B/S(Browser/Server 浏览器/服务器)架构超越的趋势,但C/S还是有B/S不可 ...
- windows下tensorflow的安装
一.直接python安装 1.CPU版本: pip3 install --upgrade tensorflow 2.GPU版本:pip3 install --upgrade tensorflow-gp ...
- Android-DataBinding入门1
1.需要开启DataBinding功能: 在build.gradle配置: android{ dataBinding{ enabled = true } } 2.布局 布局中,根节点要以layout开 ...
- 自己动手编写IOC框架(一)
博客创建了2年多了,一直没敢写点东西,怕技术不够误导了别人.2年多后的今天我已经很有信心能够为需要帮助的人做点微薄的贡献了.这是我第一次写博客,先自我介绍一下.本人网名泪滴,一个非常伤心的名字,生活中 ...
- 实践作业2:黑盒测试实践——编写自动化脚本并拍摄测试过程视频 Day 6
下午下课之后小组成员一起交流了一下实验过程遇到的一些问题,并汇总了下各个项目完成情况 该实验目前(写博客是时间)基本完成,具体情况如下 (1)分析系统需求 .(done) (2)设计测试用例.(don ...