XML语法以及DTD的详解
发布时间:2020-12-16 08:28:24 所属栏目:百科 来源:网络整理
导读:XML简介: XML是指可扩展标记语言(eXtensible Markup Language),它是一种标记语言,很类似HTML。它被设计的宗旨是传输数据,而非显示数据。 XML标签没有被预定义,需要用户自行定义标签。 XML技术是W3C组织(World Wide Web Consortium万维网联盟)发布的,目
XML简介:
XML是一种通用的数据交换格式。
在XML语言中,它允许用户自定义标签。一个标签用于描述一段数据;一个标签可分为开始标签和结束标签,在起始标签之间,又可以使用其它标签描述其它数据,以此来实现数据关系的描述。 XML中的数据必须通过软件程序来解析执行或显示,如IE;这样的解析程序称之为Parser(解析器)。
XML的常见应用:
XML技术用于保存有关系的数据之外,它还常用作软件配置文件,以描述程序模块之间的关系(如Struts、Spring、Hibernate都是基于XML作为配置文件的)。
在一个软件系统中,通过XML配置文件可以提高系统的灵活性。即程序的行为是通过XML文件配置的,而不是硬编码。
XML语法
一个XML文件分为如下几部分的内容:文档声明、元素、属性、注释、CDATA区、特殊字符、处理指令(Processing Instruction)
(1)文档声明
一个XML元素可以包括字母、数字以及其他一些可见字符,但必须遵守下面的一些规范:
XML中的注释语法为:<!-- 注释内容 -->。
注意事项:
对于一些单个字符,若想显示其原始样式,也可以使用转义的形式给予处理。
(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约束之DTD的使用
(1)为什么要有约束?
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文件内编写。
在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 元素名称 使用规则>
使用规则:
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为:<商品 类别="服装" 颜色="黄色" />
属性值类型:
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>zhang@it315.org</EMAIL> </联系人> <联系人 编号=“p2"> <姓名>李四</姓名> <EMAIL>li@it315.org</EMAIL> </联系人> </联系人列表></span> 实体的引入实体定义:
定义引用实体:
<!ENTITY copyright “版权所有”> XML中引用: ©right;
综合实例如下:
<?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> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |