XML中的DTD语法
DTD(Document Type Definition),全称为文档类型定义。
文件清单:book.xml
- <?xml version="1.0" ?>
- <!DOCTYPE 书架 SYSTEM "book.dtd">
- <书架>
- <书>
- <书名>Java就业培训教程</书名>
- <作者>张孝祥</作者>
- <售价>39.00元</售价>
- </书>
- <书>
- <书名>JavaScript网页开发</书名>
- <作者>张孝祥</作者>
- <售价>28.00元</售价>
- </书>
- </书架>
文件清单:book.dtd
- <!ELEMENT 书架 (书+)>
- <!ELEMENT 书 (书名,作者,售价)>
- <!ELEMENT 书名 (#PCDATA)>
- <!ELEMENT 作者 (#PCDATA)>
- <!ELEMENT 售价 (#PCDATA)>
验证XML的有效性
IE5以上浏览器内置了XML解析工具:Microsoft.XMLDOM,开发人员可以编写javascript代码,利用这个解析工具装载xml文件,并对xml文件进行dtd验证。
- var xmldoc = new ActiveXObject("Microsoft.XMLDOM");//创建xml文档解析器对象
- xmldoc.validateOnParse = "true";//开启xml校验
- xmldoc.load("book.xml");//装载xml文档
- //获取错误信息
- xmldoc.parseError.reason;
- xmldoc.parseError.line;
DTD约束文档可以在XML文档中直接定义,也可以作为单独的文档进行编写(单独的文档必须以UTF-8编码进行保存) 。
在XML文档中编写DTD示例
- <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
- <!DOCTYPE 书架 [
- <!ELEMENT 书架 (书+)>
- <!ELEMENT 书 (书名,作者,售价)>
- <!ELEMENT 书名 (#PCDATA)>
- <!ELEMENT 作者 (#PCDATA)>
- <!ELEMENT 售价 (#PCDATA)>
- ]>
- <书架>
- <书>
- <书名>Java就业培训教程</书名>
- <作者>张孝祥</作者>
- <售价>39.00元</售价>
- </书>
- ...
- </书架>
引入外部DTD文档
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元素定义
语法如下:
<!ELEMENT 元素名称 元素类型>
元素类型:
(#PCDATA):指示元素的主体内容只能是普通的文本.(Parsed Character Data)
EMPTY:用于指示元素的主体为空。比如<br/>
ANY:用于指示元素的主体内容为任意类型。
(子元素):指示元素中包含的子元素
对于子元素,
----可以定义子元素的名称,比如:
<!ELEMENT 元素名称 (子元素1,子元素2,子元素3)> 表示3个子元素只能出现一次,并且按照此顺序出现;
<!ELEMENT 元素名称 (子元素1|子元素2|子元素3)> 表示3个子元素中只能出现一个;
我们还可以定义子元素的个数,比如:
(1)+:1次或多次;比如 (name+)表示此name元素只能出现1次或多次。
(2)?:0次或1次;比如(name?)表示此name元素只能出现0次或1次。
(3)*:0次或多次;比如(name*)表示此name元素任意出现几次。
(4)无:只能一次;比如(name)表示此name元素只能出现1次。
如: <!ELEMENT MYFILE ((TITLE*, AUTHOR?, EMAIL)* | COMMENT)>
DTD属性定义
<!ATTLIST 标签名
属性名1 属性类型 属性说明
属性名2 属性类型 属性说明
>
例如:
<!ATTLIST 商品
类别 CDATA #REQUIRED
颜色 CDATA #IMPLIED >
对应的XML为:<商品 类别=“服装” 颜色=“黄色”/>
属性类型可以是
(1)CDATA:最普通的字符串;
(2)ENUMERATED (DTD没有此关键字),表示枚举,即(值1|值2|值3),需要括号,只能在其中选择一个值
(3)ID:属性值需要以字母或下划线开头,取值不能重复;
属性说明可以是
(1)#REQUIRED:必须设置;
(2)#IMPLED:可选值,表示该属性可有可无;
(3)#FIXED:固定值,通常语法为:#FIXED "固定值"
(4)直接值:表示属性的取值为该默认值
定义属性示例
- <!ATTLIST 页面作者
- 姓名 CDATA #IMPLIED
- 年龄 CDATA #IMPLIED
- 联系信息 CDATA #REQUIRED
- 网站职务 CDATA #FIXED "页面作者"
- 个人爱好 CDATA "上网"
- >
- <?xml version = "1.0" encoding="GB2312" standalone="yes"?>
- <!DOCTYPE 购物篮 [
- <!ELEMENT 肉 EMPTY>
- <!ATTLIST 肉 品种 ( 鸡肉 | 牛肉 | 猪肉 | 鱼肉 ) "鸡肉">
- ]>
- <购物篮>
- <肉 品种="鱼肉"/>
- <肉 品种="牛肉"/>
- <肉/>
- </购物篮>
- <?xml version = "1.0" encoding="GB2312" ?>
- <!DOCTYPE 联系人列表[
- <!ELEMENT 联系人列表 ANY>
- <!ELEMENT 联系人(姓名,EMAIL)>
- <!ELEMENT 姓名(#PCDATA)>
- <!ELEMENT EMAIL(#PCDATA)>
- <!ATTLIST 联系人 编号 ID #REQUIRED>
- ]>
- <联系人列表>
- <联系人 编号=“a">
- <姓名>张三</姓名>
- <EMAIL>zhang@it315.org</EMAIL>
- </联系人>
- <联系人 编号=“b">
- <姓名>李四</姓名>
- <EMAIL>li@it315.org</EMAIL>
- </联系人>
- </联系人列表>
DTD实体定义
定义实体就是为一段内容指定一个名称,使用时通过这个名称就可以引用其所代表的内容。
在DTD文档中使用ENTITY关键字来声明一个实体。
实体可分为:引用实体和参数实体,两者的语法不同
定义引用实体
概念:在DTD中定义,在XML中使用
语法:<!ENTITY 实体名称 “实体内容”>
引用方式(注意是在XML中使用):&实体名称; 注意:最后的“;”一定需要
- DTD中定义:
- <!ENTITY copyright "思梦科技">
- XML中引用:
- ©right;
定义参数实体(了解)
概念:在DTD中定义,在DTD中使用
语法:<!ENTITY % 实体名称 “实体内容”>
引用方式(注意是在DTD中使用):%实体名称;
- DTD中定义:
- <!ENTITY % TAG_NAMES "姓名|EMAIL|电话|地址">
- DTD中引用:
- <!ELEMENT 个人信息 (%TAG_NAMES;|生日)>
- <!ELEMENT 客户信息 (%TAG_NAMES;|公司名)>
根据XML自动生成DTD
因为一般我们写的XML基本都是没有DTD的,如果要自己写DTD,又很麻烦,因此我们可以通过工具来自动生成:trang
功能:能够完成如下转换:
(1)XML ---> DTD
(2)XML --->XSchema
(3)DTD--->XSchema
使用方法:
java -jar trang.jar -I xml -O dtd input.xml output.dtd 即可;
-I xml 表示输入为xml;
-O dtd表示输出为dtd文件;
input.xml表示输入文件;
output.dtd表示输出文件;
XML中的DTD语法的更多相关文章
- 【HTML/XML 9】XML中的DTD文件
导读:DTD是Document type definition(文档类型定义的缩写),是一套关于标记符的语法规则,它是XML文件的验证机制,数以XML文件的组成部分.XML文档是一种描述标记语言的语言 ...
- 10.IDEAD 的xml中配置DTD
此时发现最后一行已经变成绿色就说明可以了,有提示了
- XML中的XPATH和DTD
大家好,乐字节小乐又来了,上次给大家说道的是XML解析,这次接着讲述XML文档中的语言:XPATH.DTD 一.先来说说XPATH 1.XPATH 概念 XPath 是一门在 XML 文档中查找信息的 ...
- XML中DTD,XSD的区别与应用
XML我们并不陌生,在企业级应用中有很广的用途.具体就不再说,下面介绍一下DTD,XSD的区别并以XSD为例看spring中定义与使用.1.DTD(Documnet Type Definition)D ...
- 【代码笔记】XML深入学习:DTD约束与DTD语法(2)
DTD语法之定义实体(了解即可) 实体分为一般实体和参数实体. 定义实体:定义变量 引用实体:使用变量 一般实体:定义实体在DTD中,实体引用在xml中. 参数实体:定义实体在DTD中,实体引用在DT ...
- 【代码笔记】XML深入学习:DTD约束与DTD语法(1)
2015-12-27 文件名 student.xml <?xml version="1.0" encoding="GB2312" standalon ...
- XML DTD语法详解
XML DTD详解 XML DTD详解 前情提要与本文内容介绍 前面的两篇XML相关博文: 第一篇是介绍格式正规的XML: 格式正规的XML:语法 属性 实体 处理指令 样式单 CDATA节 第二 ...
- XML中的DOCTYPE属性
一.先来两个小例子 内部dtd将standalone设为真. <?xml version="1.0" standalone="yes"?> < ...
- XML的约束(dtd)
DTD(Document Type Definition),文档类型定义,DTD文件应使用UTF-8或Unicode 1.XML中有多少个元素,就在dtd文件中写几个 <!ELEMENT&g ...
随机推荐
- flask之请求钩子
from flask import Flask from flask import abort app = Flask(__name__) # 在第一次请求之前调用,可以在此方法内部做一些初始化操作 ...
- JavaScript实现图片切换
页面内容:一个按钮标签 一个Img标签 实现原理:通过修改Img标签的src属性,实现图片的切换 备注:代码中flag变量仅仅用作标记,也可以直接用Img标签的src属性进行判断,不过在判断时候不能 ...
- MongoDB学习(1)--安装,基本curd操作
知识点: 1-MongoDB 安装,启动和卸载 2-基本概念 3-基本的增删改查操作(CURD) 来回顾总结一把学习的mongodb,如果有javascript基础,学习"芒果DB" ...
- Python的scrapy之爬取boss直聘网站
在我们的项目中,单单分析一个51job网站的工作职位可能爬取结果不太理想,所以我又爬取了boss直聘网的工作,不过boss直聘的网站一次只能展示300个职位,所以我们一次也只能爬取300个职位. jo ...
- Python学习之模块基础
模块就是程序 编写以下简单代码 print('hello python') 并将py文件保存在c盘的python(假设新建)文件下,通过pycharm的Terminal 或者windom命令窗口调出p ...
- Ubuntu14.04安装opencv2.4.13
本文参考相关链接:http://blog.csdn.net/honyniu/article/details/46390097 系 统:Ubuntu 14.04 x64 opencv版本:2.4.1 ...
- 博科brocade光纤交换机alias-zone的划分-->实操案例
一,图形化操作 光纤交换机作为SAN网络的重要组成部分,在日常应用中非常普遍,本次将以常用的博科交换机介绍基本的配置方法. 博科300实物图: 环境描述: 如上图,四台服务器通过各自的双HBA卡连接至 ...
- 暗影精灵3安装无线网卡驱动(ubuntu16.04)
干货,无线网卡安装步骤: 1. 由于暗影精灵3的无线网卡较新,版本为Realtek Device b822,(查看命令为lspci | grep -i net,Ethernet controller代 ...
- PIC32MZ 通过U盘在线升级 -- USB Host bootloader
了解bootloader的实现,请加QQ: 1273623966(验证填bootloader); 欢迎咨询或定制bootloader; 我的博客主页 www.cnblogs.com/geekygeek ...
- 关于==和equals()方法&Java中string与char如何转换&String,StringBuffer
1.对于基本数据类型,可以直接使用==和!=进行内容比较 如:int x=30; int y=30; x==y; //true 基本数据类型 简单类型(基本类型) bo ...