XML语法以及DTD的详解_dtdparser.jar 作用-程序员宅基地

技术标签: JAVA WEB基础知识  JAVAWEB开发  

XML简介:

  • XML是指可扩展标记语言(eXtensible Markup Language),它是一种标记语言,很类似HTML。它被设计的宗旨是传输数据,而非显示数据。
  • XML标签没有被预定义,需要用户自行定义标签。
  • XML技术是W3C组织(World Wide Web Consortium万维网联盟)发布的,目前遵循的是W3C组织于2000年发布XML1.0规范。
  • XML被广泛认为是继Java之后在Internet上最激动人心的新技术。
XML技术用于解决什么问题?
XML是一种通用的数据交换格式。
在XML语言中,它允许用户自定义标签。一个标签用于描述一段数据;一个标签可分为开始标签和结束标签,在起始标签之间,又可以使用其它标签描述其它数据,以此来实现数据关系的描述。
XML中的数据必须通过软件程序来解析执行或显示,如IE;这样的解析程序称之为Parser(解析器)。
XML的常见应用:
XML技术用于保存有关系的数据之外,它还常用作软件配置文件,以描述程序模块之间的关系(如Struts、Spring、Hibernate都是基于XML作为配置文件的)。
在一个软件系统中,通过XML配置文件可以提高系统的灵活性。即程序的行为是通过XML文件配置的,而不是硬编码。
XML语法
一个XML文件分为如下几部分的内容:文档声明、元素、属性、注释、CDATA区、特殊字符、处理指令(Processing  Instruction)
(1)文档声明
  • 在编写XML文档时,需要先使用文档声明来声明XML文档。且必须出现在文档的第一行。并且必须指定。
  • 最简单的语法:<?xml  version="1.0"  ?>
  • encoding属性说明文档所使用的字符编码。保存在硬盘上的文件编码要与声明的编码一致
  • 如:<?xml version="1.0" encoding="GB2312" ?>
  • standalone属性说明文档是否独立,即是否依赖其他文档。如:<?xml version="1.0" standalone="yes" ?>yes表示不用引入外部文件,no需要引入。
(2)元素
  • XML元素指XML文件中出现的标签。一个标签分为起始和结束标签(不能省略)。一个标签有如下几种书写形式;包含标签主体:<mytag>some content </mytag> 和 不含标签主体:<mytag/>
  • 一个标签中可以嵌套若干个子标签,但所有的标签必须合理的嵌套,不允许有交叉嵌套。
  • 一个XML文档必须有且仅有一个根标签,其他标签都是这个根标签的子标签或孙标签。
  • 对于XML标签中出现的所有空格和换行,XML解析程序都会当做标签内容进行处理。
  • 由于在XML中,空格和换行都作为原始内容被处理,所以,在编写XML文件时,使用换行和缩进等方式来让源原文件中的内容清晰可读的习惯可能要被迫改变。
(3)命名规范
  一个XML元素可以包括字母、数字以及其他一些可见字符,但必须遵守下面的一些规范:
  • 区分大小写,例如:<P>和<p> 是两个不同的标记。
  • 不能以数字或"-"(中划线)开头。
  • 不能以xml或(或XML、或Xml等)开头。
  • 不能包含空格。
  • 名称中间不能包含冒号(:)。
(4)属性
  • 一个元素可以有多个属性,每个属性都有它自己的名称和取值,例如:<mytag name="value" ......>
  • 属性值一定要用引号(单引号或双引号)引起来。
  • 属性名的命名规范与元素的命名规范相同。
  • 元素中的属性是不允许重复的。
  • 在XML技术中,标签属性所代表的信息也可以被改成用子元素的形式来进行描述。
(5)注释
     XML中的注释语法为:<!--  注释内容  -->。
    注意事项:
  • XML声明之前不能有注释。
  • 注释不能嵌套。例如: <!-- 大段注释  ...  <!--  有一段注释-->... -->是错误的。
(6)转义字符
     对于一些单个字符,若想显示其原始样式,也可以使用转义的形式给予处理。
     
特殊字符 替代符号
& &amp;
< &lt;
> &gt;
" &quot;
' &apos;
 
(7)CDATA区
  CDATA是Character Data的缩写。 作用是把标签当做普通内容; 语法格式: <![CDATA[内容]]> 举例如下:
   <![CDATA[
    <itcast>www.itcast.cn</itcast>
   ]]>  以上红色部分被当做普通文本而不是标签。
(8)处理指令
  处理指令,简称PI(Processing Instruction)。
  作用:用来指挥软件如何解析XML文档。
  语法:必须以“<?” 作为开头,以"?" 作为结尾。
  常用的处理指令如下:
    XML声明:<?xml version="1.0" encoding="GB2312" ?>
    xml-stylesheet指令:用于指示XML文档所使用的CSS样式XSL  <?xml-stylesheet type="text/css" href="some.css"> (注意:对中文命名的标签元素不起作用)

XML语法总结:
  • 所有 XML 元素都须有关闭标签
  • XML 标签对大小写敏感
  • XML 必须正确地嵌套顺序
  • XML 文档必须有根元素(只有一个)
  • XML 的属性值须加引号
  • 特殊字符必须转义 --- CDATA
  • XML 中的空格、回车换行会解析时被保留

 XML约束之DTD的使用

(1)为什么要有约束?
  •  XML都是用户自定义的标签,若出现小小的错误,软件程序将不能正确地获取文件中的内容而报错。(如:Tomcat)
  • XML技术中,可以编写一个文档来约束一个XML的书写规范,这个文档称之为约束。
  • 两个概念:格式良好的XML:遵循XML语法的XML。有效的XML:遵循约束文档的XML
  • 总之:约束文档定义了在XML中允许出现的元素名称、属性及元素出现的顺序等等。
(2)XML约束概述
     XML约束概念:在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束。
     常用的约束技术:XML DTD 和XML Schema
(3)DTD约束快速入门
    DTD(Document Type Definition),全称为文档类型定义。
   book.xml
<span style="font-size:18px;"><?xml version="1.0" ?>
<!DOCTYPE书架  SYSTEM "book.dtd">
<书架>
	<书>
		<书名>葵花宝典</书名>
		<作者>东方不败</作者>
		<售价>59.00元</售价>
	</书>
	<书>
		<书名>九阳神功</书名>
		<作者>张无忌</作者>
		<售价>57.00元</售价>
	</书>
</书架>
</span>
   book.dtd
<span style="font-size:18px;"><!ELEMENT 书架 (书+)>
	<!ELEMENT 书 (书名,作者,售价)>
	<!ELEMENT 书名 (#PCDATA)>
	<!ELEMENT 作者 (#PCDATA)>
	<!ELEMENT 售价 (#PCDATA)>
</span>
复杂标签:<!ELEMENT 标签名 (子节点)>
简单标签:<!ELEMENT 标签名 (#PCDATA)>
引入DTD:<!DOCTYPE 根节点 SYSTEM  "dtd的地址">

 (4)将DTD与XML文档关联的三种形式
   DTD约束既可以作为一个单独的文件编写,也可以在XML文件内编写。
  • 使用内部DTD 。<!DOCTYPE 根节点  [DTD的代码]>
  • 使用外部DTD。<!DOCTYPE 根节点 "DTD的地址">
  • 使用网络DTD。<!DOCTYPE 根节点 PUBLIC  "DTD的名称"  "DTD的地址">
      常见的使用网络DTD约束有Struts2的框架。
  在XML文件内编写DTD
<span style="font-size:18px;"><?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE 书架 [
	<!ELEMENT 书架 (书+)>
	<!ELEMENT 书 (书名,作者,售价)>
	<!ELEMENT 书名 (#PCDATA)>
	<!ELEMENT 作者 (#PCDATA)>
	<!ELEMENT 售价 (#PCDATA)>
]>
<书架>
	<书>
		<书名>Java就业培训教程</书名>
		<作者>张孝祥</作者>
		<售价>39.00元</售价>
	</书>
	...
</书架>
</span>
XML使用DOCTYPE声明语句来指明它所遵循的DTD文档,有两种形式:
当引用的DTD文档在本地时,采用如下方式:
<!DOCTYPE 根元素 SYSTEM “DTD文档路径”>
如:<!DOCTYPE 书架 SYSTEM “book.dtd”>
当引用的DTD文档在公共网络上时,采用如下方式:
<!DOCTYPE 根元素 PUBLIC “DTD名称” “DTD文档的URL”>
如:<!DOCTYPE web-app PUBLIC 
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

DTD约束语法细节

(1)DTD-定义元素
在DTD文档中使用ELEMENT关键字来声明一个XML元素。
语法:<!ELEMENT 元素名称  使用规则>
使用规则:
  • (#PCDATA)指示元素的主题内容只能是普通的文本。
  • EMPTY:用于指示元素的主体为空。比如<br/>
  • ANY:用于指示元素的主题内容为任意类型。
  • (子元素):指示元素中包含的子元素。
定义子元素及描述它们的关系:
  1) 如果子元素用逗号隔开,必须按照声明顺序去编写XML文档。
     例如:<!ELEMENT FILE(TITLE, AUTHOR, EMAIL)>
  2)如果子元素用"|" 分开,说明任选其一。
     例如:<!ELEMENT FILE(TITLE|AUTHOR|EMAIL)>
  3)用+、*、? 来表示元素出现的次数。
     如果元素后面没有+*?表示必须且只能出现一次。
     +:表示至少出现一次,一次或多次。
     *:表示可有可无,零次、一次或多次。
     ?:表示可以有也可以无,有的话只能出现一次。零次或一次。
    如:<!ELEMENT MYTITLE((TITLE*,AUTHOR?,EMAIL))*|COMMIT> 
(2)元素内容的类型


(3)元素ELEMENT定义

DTD属性(ATTLIST)定义

<!ATTLIST 元素名称
    属性名 属性类型  约束
    属性名 属性类型  约束
    ......
>
属性声明举例:
<!ATTLIST 商品
 类别 CDATA  #REQUIRED  必须的
 颜色 CDATA  #IMPLIED       可选的
>
对应的XML为:<商品 类别="服装" 颜色="黄色" />

属性值类型:
  • CDATA:表示属性的取值为普通的文本字符串。
  • ENUMERATED(DTD没有此关键字):表示枚举,只能从枚举列表中任选其一,如(鸡肉|牛肉|猪肉|鱼肉)
  • ID:表示属性的取值不能重复(不能只写数字)
设置说明:
  • #REQUIRED:表示该属性必须出现
  • #IMPLIED:表示该属性可有可无。
  • #FIXED:表示该属性的取值为一个固定值。语法:#FIXED "固定值"
  • 直接值:表示属性的取值为默认值。
约束的四种形式:

DTD 定义属性示例一:
<!ATTLIST 页面作者
   姓名   CDATA    #IMPLIED
   年龄   CDATA    #IMPLIED
   联系信息  CDATA  #REQUIRED
   网站职务  CDATA  #FIXED  "页面作者"
   个人爱好  CDATA  "上网"
>
DTD 定义属性示例二:
属性的类型可以是一组取值的列表,在XML文件中设置的属性值只能是这个列表中的某个值(枚举)
<?xml version = "1.0" encoding="GB2312" standalone="yes"?>
<!DOCTYPE 购物篮 [
<!ELEMENT 肉 EMPTY>
<!ATTLIST 肉 品种 ( 鸡肉 | 牛肉 | 猪肉 | 鱼肉 ) "鸡肉">
]> 
<购物篮>
<肉 品种="鱼肉"/>
<肉 品种="牛肉"/>
<肉/>
</购物篮>
DTD 定义属性示例三:
ID属性的值只能由字母,下划线开始,不能出现空白字符。表示属性的设置值是一个唯一值。
<span style="font-size:18px;"><?xml version = "1.0" encoding="GB2312" ?>

<!DOCTYPE 联系人列表[
	<!ELEMENT 联系人列表 ANY>
	<!ELEMENT 联系人(姓名,EMAIL)>
	<!ELEMENT 姓名(#PCDATA)>
	<!ELEMENT EMAIL(#PCDATA)>
	<!ATTLIST 联系人 编号 ID #REQUIRED>
]>

<联系人列表>
	<联系人 编号=“p1">
		<姓名>张三</姓名>
		<EMAIL>[email protected]</EMAIL>
     </联系人>
	<联系人 编号=“p2">
		<姓名>李四</姓名>
		<EMAIL>[email protected]</EMAIL>
	</联系人>
</联系人列表></span>

实体的引入

实体定义:

  • 实体用于为一段内容创建一个别名,以后在XML文档中就可以使用别名引用这段内容了。
  • 在DTD定义中,一条<!ENTITY …>语句用于定义一个实体。
  • <!ENTITY 别名 “值”>
  • 在元素中引用  &别名;
定义引用实体:
  • 概念:在DTD中定义,在XML中使用
  • 语法:<!ENTITY 实体名称 “实体内容”>
  • 引用方式(注意是在XML中使用):&实体名称;
DTD中定义:
<!ENTITY copyright “版权所有”>
XML中引用:
&copyright;


综合实例如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE TVSCHEDULE [
	<!ELEMENT TVSCHEDULE (CHANNEL+)>
	<!ELEMENT CHANNEL (BANNER,DAY+)>
	<!ELEMENT BANNER (#PCDATA)>
	<!ELEMENT DAY (DATE,(HOLIDAY|PROGRAMSLOT+)+)>
	<!ELEMENT HOLIDAY (#PCDATA)>
	<!ELEMENT DATE (#PCDATA)>
	<!ELEMENT PROGRAMSLOT (TIME,TITLE,DESCRIPTION?)>
	<!ELEMENT TIME (#PCDATA)>
	<!ELEMENT TITLE (#PCDATA)> 
	<!ELEMENT DESCRIPTION (#PCDATA)>
	
	<!ATTLIST TVSCHEDULE NAME CDATA #REQUIRED>
	<!ATTLIST CHANNEL CHAN CDATA #REQUIRED>
	<!ATTLIST PROGRAMSLOT VTR CDATA #IMPLIED>
	<!ATTLIST TITLE RATING CDATA #IMPLIED>
	<!ATTLIST TITLE LANGUAGE CDATA #IMPLIED>
]>

<TVSCHEDULE NAME="">
	<CHANNEL CHAN="">
		<BANNER>CCAV</BANNER>
		<DAY>
			<DATE>2014-11-17</DATE>
			<PROGRAMSLOT>
				<TIME>19:00</TIME>
				<TITLE>新闻联播</TITLE>
			</PROGRAMSLOT>
		</DAY>
	</CHANNEL>
</TVSCHEDULE>



版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u013087513/article/details/52745509

智能推荐

使用nginx解决浏览器跨域问题_nginx不停的xhr-程序员宅基地

文章浏览阅读1k次。通过使用ajax方法跨域请求是浏览器所不允许的,浏览器出于安全考虑是禁止的。警告信息如下:不过jQuery对跨域问题也有解决方案,使用jsonp的方式解决,方法如下:$.ajax({ async:false, url: 'http://www.mysite.com/demo.do', // 跨域URL ty..._nginx不停的xhr

在 Oracle 中配置 extproc 以访问 ST_Geometry-程序员宅基地

文章浏览阅读2k次。关于在 Oracle 中配置 extproc 以访问 ST_Geometry,也就是我们所说的 使用空间SQL 的方法,官方文档链接如下。http://desktop.arcgis.com/zh-cn/arcmap/latest/manage-data/gdbs-in-oracle/configure-oracle-extproc.htm其实简单总结一下,主要就分为以下几个步骤。..._extproc

Linux C++ gbk转为utf-8_linux c++ gbk->utf8-程序员宅基地

文章浏览阅读1.5w次。linux下没有上面的两个函数,需要使用函数 mbstowcs和wcstombsmbstowcs将多字节编码转换为宽字节编码wcstombs将宽字节编码转换为多字节编码这两个函数,转换过程中受到系统编码类型的影响,需要通过设置来设定转换前和转换后的编码类型。通过函数setlocale进行系统编码的设置。linux下输入命名locale -a查看系统支持的编码_linux c++ gbk->utf8

IMP-00009: 导出文件异常结束-程序员宅基地

文章浏览阅读750次。今天准备从生产库向测试库进行数据导入,结果在imp导入的时候遇到“ IMP-00009:导出文件异常结束” 错误,google一下,发现可能有如下原因导致imp的数据太大,没有写buffer和commit两个数据库字符集不同从低版本exp的dmp文件,向高版本imp导出的dmp文件出错传输dmp文件时,文件损坏解决办法:imp时指定..._imp-00009导出文件异常结束

python程序员需要深入掌握的技能_Python用数据说明程序员需要掌握的技能-程序员宅基地

文章浏览阅读143次。当下是一个大数据的时代,各个行业都离不开数据的支持。因此,网络爬虫就应运而生。网络爬虫当下最为火热的是Python,Python开发爬虫相对简单,而且功能库相当完善,力压众多开发语言。本次教程我们爬取前程无忧的招聘信息来分析Python程序员需要掌握那些编程技术。首先在谷歌浏览器打开前程无忧的首页,按F12打开浏览器的开发者工具。浏览器开发者工具是用于捕捉网站的请求信息,通过分析请求信息可以了解请..._初级python程序员能力要求

Spring @Service生成bean名称的规则(当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致)_@service beanname-程序员宅基地

文章浏览阅读7.6k次,点赞2次,收藏6次。@Service标注的bean,类名:ABDemoService查看源码后发现,原来是经过一个特殊处理:当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致public class AnnotationBeanNameGenerator implements BeanNameGenerator { private static final String C..._@service beanname

随便推点

二叉树的各种创建方法_二叉树的建立-程序员宅基地

文章浏览阅读6.9w次,点赞73次,收藏463次。1.前序创建#include&lt;stdio.h&gt;#include&lt;string.h&gt;#include&lt;stdlib.h&gt;#include&lt;malloc.h&gt;#include&lt;iostream&gt;#include&lt;stack&gt;#include&lt;queue&gt;using namespace std;typed_二叉树的建立

解决asp.net导出excel时中文文件名乱码_asp.net utf8 导出中文字符乱码-程序员宅基地

文章浏览阅读7.1k次。在Asp.net上使用Excel导出功能,如果文件名出现中文,便会以乱码视之。 解决方法: fileName = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);_asp.net utf8 导出中文字符乱码

笔记-编译原理-实验一-词法分析器设计_对pl/0作以下修改扩充。增加单词-程序员宅基地

文章浏览阅读2.1k次,点赞4次,收藏23次。第一次实验 词法分析实验报告设计思想词法分析的主要任务是根据文法的词汇表以及对应约定的编码进行一定的识别,找出文件中所有的合法的单词,并给出一定的信息作为最后的结果,用于后续语法分析程序的使用;本实验针对 PL/0 语言 的文法、词汇表编写一个词法分析程序,对于每个单词根据词汇表输出: (单词种类, 单词的值) 二元对。词汇表:种别编码单词符号助记符0beginb..._对pl/0作以下修改扩充。增加单词

android adb shell 权限,android adb shell权限被拒绝-程序员宅基地

文章浏览阅读773次。我在使用adb.exe时遇到了麻烦.我想使用与bash相同的adb.exe shell提示符,所以我决定更改默认的bash二进制文件(当然二进制文件是交叉编译的,一切都很完美)更改bash二进制文件遵循以下顺序> adb remount> adb push bash / system / bin /> adb shell> cd / system / bin> chm..._adb shell mv 权限

投影仪-相机标定_相机-投影仪标定-程序员宅基地

文章浏览阅读6.8k次,点赞12次,收藏125次。1. 单目相机标定引言相机标定已经研究多年,标定的算法可以分为基于摄影测量的标定和自标定。其中,应用最为广泛的还是张正友标定法。这是一种简单灵活、高鲁棒性、低成本的相机标定算法。仅需要一台相机和一块平面标定板构建相机标定系统,在标定过程中,相机拍摄多个角度下(至少两个角度,推荐10~20个角度)的标定板图像(相机和标定板都可以移动),即可对相机的内外参数进行标定。下面介绍张氏标定法(以下也这么称呼)的原理。原理相机模型和单应矩阵相机标定,就是对相机的内外参数进行计算的过程,从而得到物体到图像的投影_相机-投影仪标定

Wayland架构、渲染、硬件支持-程序员宅基地

文章浏览阅读2.2k次。文章目录Wayland 架构Wayland 渲染Wayland的 硬件支持简 述: 翻译一篇关于和 wayland 有关的技术文章, 其英文标题为Wayland Architecture .Wayland 架构若是想要更好的理解 Wayland 架构及其与 X (X11 or X Window System) 结构;一种很好的方法是将事件从输入设备就开始跟踪, 查看期间所有的屏幕上出现的变化。这就是我们现在对 X 的理解。 内核是从一个输入设备中获取一个事件,并通过 evdev 输入_wayland

推荐文章

热门文章

相关标签