第四讲 使用DTD声明XML属性
DTD 属性附加声明
DTD 属性附加声明
在DTD的属性声明语法结构中,每个A TTLIST声明除了有一个属性类型外,还必须具有附加声明。
DTD提供了四种附加声明:#REQUIRED、#IMPLIED、#FI XED和缺省值。
下面将给出这四种附加声明的详细用法。
●#REQUIRED
#REQUIRED指定该属性是元素必须具有的属性。
如果在DTD声明属性进行R
在XML文档中使用Desk元素声明时,元素Desk必须具有三个属性Lengh、Width和Height。
如果缺少任何一个属性,那么解析器在解析时都将出现错误。
●#IMPLIED
#IMPLIED附加声明指定该元素可以具有该属性也可以不具有该属性。
具体实例如下所示:
学号,但是无须具有name属性,因此可以使用IMPLIED作为附加声明。
●#FIXED
如果使用上述语法进行属性声明,则在相应XML文档中可以不显式地使用该
属性,处理器会自动给元素添加该属性及其属性值。
如果显式地使用该属性,那么
上述代码保存为fixed.xml文件。
在不同学习阶段课桌的长度是保持不变的,因此不需要为每一种课桌类型显式指定长度。
这样就减少编写XML文档时的工作量,并且提高了XML文档的质量。
缺省值
缺省值为属性设置默认属性值。
如果在元素中显式指定该属性的值,那么默认值将不起作用;如果在元素中没有显式指定该属性,那么该属性值使用默认值,如下所示:
上述代码保存为default.xml文件。
在该文件中,把length属性的附加属性设置为“1.0m”的默认值。
XMLDTD详解
XMLDTD详解XML DTD详解 ⼀个有效的XML⽂档必然是结构正规的,结构正规的XML⽂档不⼀定是有效的,即有效的是格式正规的⼀个⼦集。
本⽂详细介绍DTD,包括其对元素的定义,属性的定义,以及实体的定义。
元素的定义DTD中的修饰符号: 这部分符号可以联系正则表达式的符号来记忆。
属性的定义属性类型——CDATA ⽐如:<!ATTLIST title name CDATA #REQUIRED> 定义了⼀个属性,是属于title元素的,属性名叫name,类型是字符串(包括数字和中⽂),并且是⼀个必须要有的属性。
属性类型——NMTOKEN/NMTOKENS 左边图中因为加了空格⽽出错。
属性类型——ID 类型为ID的属性取值必须是唯⼀的。
从这个例⼦还可以看到同⼀个元素可以⼀次定义多个属性,多个属性之间⽤空格分隔即可。
属性类型——IDREF/IDREFS (“⼉⼦”后⾯漏掉了⼀个斜线)属性类型——Enumerated 实现定义好⼀些值,属性的值必须在所列出的值的范围内。
属性的特点#REQUIRED 元素的所有实例都必须有该属性的值(NOT NULL)。
语法:<!ATTLIST 元素名属性名属性类型 #REQUIRED> DTD⽰例:<!ATTLIST person number CDATA #REQUIRED> XML⽰例:<person number="6788"/>#IMPLIED 元素的实例中可以忽略该属性(NULL)。
语法:<!ATTLIST 元素名属性名属性类型 #IMPLIED> DTD⽰例:<!ATTLIST contact fax CDATA #IMPLIED> XML⽰例:<contact fax="888-228833"/> 没有这个属性也是对的。
#FIXED value 元素实例中该属性的值必须为指定的固定值。
xml使用方法
xml使用方法XML使用方法XML(可扩展标记语言)是一种用于描述数据的标记语言,它可以用于在不同的系统之间传递和存储数据。
XML的使用方法非常灵活,可以用于各种不同的应用程序和场景。
本文将介绍XML的使用方法,包括XML的语法、DTD和XML Schema、XML解析和转换等。
XML的语法XML的语法非常简单,它由标签、属性和文本组成。
标签用于标识数据的类型,属性用于描述数据的属性,文本用于存储数据的值。
例如,下面是一个简单的XML文档:```<?xml version="1.0" encoding="UTF-8"?><bookstore><book category="cooking"><title lang="en">Everyday Italian</title><author>Giada De Laurentiis</author><year>2005</year><price>30.00</price></book><book category="children"><title lang="en">Harry Potter</title><author>J.K. Rowling</author><year>2005</year><price>29.99</price></book></bookstore>```在这个例子中,`<?xml version="1.0" encoding="UTF-8"?>`是XML 文档的声明,它指定了XML的版本和编码方式。
使用DTD规范XML文档
Page 11
3.2.2 各种元素的声明
1.基本字符元素的声明 2.含子元素的严格声明 3.包含任意内容的声明 4.子元素出现次数的声明 5.选择性子元素的声明 6.空元素的声明 7.混合型元素的声明 8.实体的声明
Page 12
1.基本字符元素的声明
Page 16
5.选择性子元素的声明
语法:<!ELEMENT 元素名称 使用规则> 语法:<!ELEMENT 元素名称 (子元素)> (子元素):指示元素中包含的子元素 1如果子元素用“|”分开,说明任选其一。
Page 17
6.空元素的声明
语法:<!ELEMENT 元素名称 使用规则> EMPTY:指示元素的不能有主体内容。 <!ELEMENT 元素名称 EMPTY >
语法:<!ELEMENT 元素名称 使用规则> <!ELEMENT 元素名称 (#PCDATA) > 指示元素的主体内容只能是普通的文 本.(Parsed Character Data)
Page 13
2.含子元素的严格声明
语法:<!ELEMENT 元素名称 使用规则> <!ELEMENT 元素名称 (子元素)> (子元素):指示元素中包含的子元素 如果子元素用逗号分开,说明必须按照声明 顺序去编写XML文档 <!ELEMENT 元素名称 (子元素1,子元素2,子 元素3,…)>
Page 19
要宣告混合内容的元素型态,你可以使用下列两 种内容模型格式的任何一种: 1 只有字符数据 。要宣告只包含字符数据的元 素型态,使用内容模型(#PCDATA)。例如, 下面的宣告让SUBTITLE 元素只能包含字符数据: <!ELEMENT SUBTITLE (#PCDATA)> 根据这个宣告,下面两个元素都是有效的: <SUBTITLE>A New Approach</SUBTITLE> <SUBTITLE></SUBTITLE>
xml基本写法和dtdschema的用法,JAVA读写XML
xml基本写法和dtdschema的⽤法,JAVA读写XML1. 标记语⾔ 标记语⾔,是⼀种⽂本(Text)以及⽂本相关的其他信息结合起来,展现出关于⽂档结构和数据处理细节的电脑⽂字编码.当今⼴泛使⽤的标记语⾔是超⽂本标记语⾔(Hyper Text Markup Language,HTML)和可扩展标记语⾔(eXtensible Markup Language,XML). 标记语⾔⼴泛应⽤于⽹页和⽹络应⽤程序.1) 超⽂本标记语⾔HTML(Hyper Text Markup Language)写法格式: <a href="link.html">link</a>关注数据的展⽰与⽤户体验标记是固定的,不可扩展(如<a></a>表⽰超连接)2) 可扩展的标记语⾔XML(eXtensible Markup Language)写法格式:同html样式<a>link</a>仅关注数据本⾝标记可扩展,可⾃定义3) Xml 和 Html语⾔由同⼀种⽗语⾔SGML(Standard Generalized Markup language,标准通⽤标记语⾔)发展出来.4)解析器专业解析器(⽐如:XML SPY 专⽤于解析XML⽂件)浏览器MyEclipse5)W3C(World Wide Web Consortium)W3C:开源的语⾔协会,万维⽹联盟(World Wide Web Consortium)HTML 和 XML 都是W3C制定的语⾔规则官⽹:学习⽹站:2.xml语法规则2.1 xml的声明:xml的声明必须写在⽂件第⼀⾏Encoding(字符集)属性可以省略,默认的字符集是utf-8例⼦:1<?xml version="1.0" encoding="UTF-8"?>2<书>3<武侠⼩说 isbn="1001">4<书名>天龙⼋部</书名>5<作者>⾦庸</作者>6<价格>50</价格>7<简介>⼀本好书</简介>8</武侠⼩说>9<计算机>10<书名>疯狂java</书名>11<作者>李刚</作者>12<价格>50</价格>13<简介>⼀本好书</简介>14</计算机>15</书>常见错误写法:1) "?"和xml之间不能有空格2) 声明必须顶头写,不能有空⾏或空格(⽤FireFox浏览器打开)3) 等号左右不要多写空格(java程序员的习惯)浏览器不会报错,但是在xml解析时会出问题2.2 标记1)诸如<书名></书名>,这样格式的被称为标记2)标记必须成对出现3)标记包含开始标记和结束标记<书名>天龙⼋部</书名>注意:标记⼤⼩写敏感2.3元素(Element)1) 元素: 元素= 标记 + 其中内容 ,如<书名>天龙⼋部</书名>2) 根元素: 最外层的元素 (如 <书></书>)3) 叶⼦元素: 最⾥层(没有⼦元素的)的元素 (如,<书名></书名>,<价格></价格>)4) 空元素: 没有内容的元素叫空元素,⽐如:<a></a> ,<br></br>,可以简写为<a/> <br/>5) 元素必须遵循的语法规则a. 所有的标记都必须有结束b.开始标记和结束标记必须成对出现c.元素必须正确嵌套<a><b>c</b></a> (正确)<a><b>c</a></b> (错误)d.标记的⼤⼩写敏感Hello 和 hello不是同⼀个标记e.有且只能有⼀个根元素2.4 实体引⽤(转义字符)1) ⼩于号(<) : less then --> <2) ⼤于号(>) : great than --> >3) And符号(&) : &4) 双引号 ( ") : "5) 单引号( ') : '注意这些转义字符都是以&开头,以 ; 结尾例如:想给天龙⼋部加上书名号<<天龙⼋部>><?xml version="1.0" encoding="UTF-8"?><书><武侠⼩说 isbn="1001"><书名><<天龙⼋部>></书名><作者>⾦庸</作者><价格>50</价格><简介>⼀本好书</简介></武侠⼩说></书>2.5属性(定义在开始标记中的键值对)1)格式: 属性="属性值"如<武侠⼩说 isbn="1234"></武侠⼩说>isbn是武侠⼩说的属性,值是12342)要求:属性必须有值属性值必须⽤引号引起来,单引号或双引号都可以,但必须⼀致2.6 CDATA 类型的数据:特殊标签1) 格式: <![CDATA[⽂本内容]]>2) 特殊标签中的实体引⽤都被忽略,所有内容被当成⼀整块⽂本数据对待例如<书><武侠⼩说 isbn="1235" lang="zh"><书名 hot="true">笑笑江湖</书名><作者>⾦庸</作者><价格>45</价格><简介><![CDATA[⼀本好书,没有<<笑傲江湖>>好看]]></简介></武侠⼩说></书>2.8 注释(xml和html相同)1)格式: <!-- 这是⼀段注释 -->2) 编译器将忽略注释3) Html和xml注释⽅式相同例⼦:1<?xml version="1.0" encoding="UTF-8"?>2<书>3<!-- 这是⼀段注释 -->4<武侠⼩说 isbn="1001">5<书名><<天龙⼋部>></书名>6<作者>⾦庸</作者>7<价格>50</价格>8<简介>⼀本好书</简介>9</武侠⼩说>10</书>2.8 规则⼩结1) 必须有唯⼀的根元素2) xml标记⼤⼩写敏感3) 标记必须配对出现,有开始有结束4) 元素必须被正确嵌套5) 属性必须有值,值必须⽤引号引起来6) 如果遵循全部上述规则,称作well-formed⽂件(格式良好的xml⽂件) 2.9 使⽤XML⽂件描述数据的例⼦1) 早期属性⽂件描述数据的⽅式url = jdbd:oracle:thin@192.168.0.205:1521:dbsiddbUser = openlabdbPwd = open1232) 现在使⽤xml表⽰⽅式<?xml version="1.0" encoding="UTF-8"?><书><!-- 这是⼀段注释 --><武侠⼩说 isbn="1001"><书名><<天龙⼋部>></书名><作者>⾦庸</作者><价格>50</价格><简介>⼀本好书</简介></武侠⼩说></书>3. DTD/Schema1) DTD/Schema:⽤来规范XML的标记规则2)有效的xml⽂件(valid xml file) = 格式良好的xml⽂件 + 有DTD或Schema规则 + 遵循DTD或Schema规则3.1 DTD/Schema的作⽤⾏业交换数据时要求xml⽂件格式相同,所以需要⼤家遵守规范的xml⽂件格式,⽐如两份xml⽂件要有相同的元素嵌套关系,相同的属性定义,相同的元素顺序,元素出现相同次数等3.2⽂档类型定义DTD(Document Type Difinition)1) DTD⽂档⽤来定义XML⽂件的格式,约束XML⽂件中的标记规则2) DTD类型PUBLIC(⾏业共⽤的)SYSTEM(⼩范围⾃定义的)3.2.1 DTD中的定义规则必须列出所有节点,⼀个都不能少1)元素"*"星号表⽰可以出现0-n次"+"加号表⽰可以出现1-n次"|" 表⽰或(只能出现⼀个)如(phone|mobile)表⽰固话或⼿机⼆选⼀"?"问号: 表⽰出现0或1此#PCDATA 表⽰字符串2)属性:定义在开始标记中的键值对dtd 规则_属性1) <!ATTLIST 标记名称属性名称属性类型>2) isbn CDATA #REQUIRED: 表⽰isbn属性是必须的3) isbn CDATA #IMPLIED: 表⽰isbn属性不是必须的4) hot CDATA"false" :表⽰hot默认值是false例⼦3.2.1⾸先是dtd⽂件book.dtd<!ELEMENT 书 (武侠⼩说, br)*><!ELEMENT 武侠⼩说 (书名,作者+,价格,简介)><!ELEMENT 书名 (#PCDATA)><!ELEMENT 作者 (#PCDATA)><!ELEMENT 价格 (#PCDATA)><!ELEMENT 简介 (#PCDATA)><!ELEMENT br EMPTY><!ATTLIST 武侠⼩说 isbn CDATA #REQUIREDlang CDATA #IMPLIED><!ATTLIST 书名 hot CDATA #IMPLIED>在XML中使⽤<?xml version="1.0"?><!DOCTYPE 书 SYSTEM "book.dtd"><书><武侠⼩说 isbn="1234" lang="zh"><书名 hot="false"><<天龙⼋部>></书名><作者>⾦庸</作者><作者>古龙</作者><价格>45</价格><简介>⼀本好书</简介></武侠⼩说><br></br><武侠⼩说 isbn="1235" lang="zh"><书名 hot="true">笑笑江湖</书名><作者>⾦庸</作者><价格>45</价格><简介><!-- 这是⼀段注释 --><![CDATA[⼀本好书,没有<<笑傲江湖>>好看CDATA中的所有特殊字符都不解释(原样显⽰)]]></简介></武侠⼩说><br></br></书>3.3 Schema ,DTD的升级版与DTD的区别1)命名空间(NameSpace)XML⽂件允许⾃定义标记,所以可能出现来⾃不同源DTD或Schema⽂件的同名标记,为了区分这些标记,就需要使⽤命名空间.命名空间的⽬的是有效的区分来⾃不同DTD的相同标记⽐如xml中⽂件中使⽤了命名空间区分开"表格"和"桌则":<html:table><line><column>这是⼀个表格</column></line></html;table><product:table><type>coff table</type><product:table>2) 因为DTD⽆法解决命名冲突,所以出现Schema,它是DTD 的替代者,dtd和Schema的功能都是描述xml结构的3) Schema使⽤xml语法实现(Schema本⾝就是xml⽂件)因为⽤于规范和描述xml⽂件的定义⽂件(schema)本⾝也是xml⽂件,所也xml也被称为⾃描述的语⾔4) Schema ⽂件的扩展名xds: XML Schema Difinition(简称XSD,遵循W3C标准)5) Schema中的名词:复杂元素(有⼦元素的元素)简单元素(叶⼦元素)例⼦:email.xsd<?xml version="1.0" encoding="UTF-8"?><schema xmlns="/2001/XMLSchema" targetNamespace="/email" xmlns:tns="/email" elementFormDefault="qualified"> <element name="email"><complexType><sequence><element name="from" type="string"/><element name="to" type="string"/><element name="subject" type="string"/><element name="body" type="string"/></sequence></complexType></element></schema>被规范的⽂件email.xml<?xml version="1.0" encoding="UTF-8"?><tns:email xmlns:tns="/email" xmlns:xsi="/2001/XMLSchema-instance" xsi:schemaLocation="/email email.xsd "><tns:from>赵敏</tns:from><tns:to>张⽆忌</tns:to><tns:subject>HIHI</tns:subject><tns:body>看泰坦尼克号</tns:body></tns:email>3.4 根据DTD或者Schema来写xml⽂件的⽅法在MyEclipse中右键New --> xml (Basic Templates) -->输⼊⽂件名-->next-->选择是DTD还是Schema4. java API 解析XML⽂件(读xml⽂件)1) Java 与xml有很多共同点(⽐如跨平台,与⼚商⽆关),⽬前位置java对xml的解析较其他语⾔更完善2) 两种解析⽅式:DOM(Document Object Model ⽂档对象模型)关键字:树(Document)优点: 把xml⽂件在内存中构造树形结构,可以遍历和修改节点缺点: 如果⽂件⽐较⼤,内存有压⼒,解析的时间会⽐较长SAX(Simple API for Xml基于XML的简单API)关键字:流(Stream)把xml⽂件作为输⼊流,触发标记开始,内容开始,标记结束等动作优点:解析可以⽴即开始,速度快,没有内存压⼒缺点:不能对节点做修改3) JDOM/DOM4J : ⽬前市场上常⽤的两种解析XML⽂件的API dom4j-1.6.1.jar 结合了DOM和SAX两种解析⽅式的优点DOM4j解析xml⽂件步骤1) 创建项⽬XMLDemo2) 加⼊dom4j的jar包(dom4j-1.6-1.jar)3) 将要解析的xml⽂件放在路径src/下4) 新建ReadXMLDemo.java4-1)构造document对象SAXReader reader = new SAXReader();Document doc = reader.read(file);4-2)取根元素:Element root = doc.getRootElement();4-3)常⽤⽅法Element elmt;elmt.elements("标记名称"):取出所有指定标记名称的元素elmt.element("标记名称"):取出第⼀个指定标记名称元素elmt.elementText("标记名称"):取elmt指定名字的⼦元素elmt.getText();取当前元素的内容Iterator it = elmt.elementsIterator("标记名称") 返回⼀个Iterator String 属性值 = elmt.attattributeValue("属性名")例⼦:ReadBookdemo源代码package day1;import java.io.*;import java.util.*;import org.dom4j.*;import org.dom4j.io.*;/*** 读⼊book.xml⽂件,取出数据并打印* @author soft01**/public class ReadBookdemo {public static void main(String[] args) {readBook("book.xml");}/*** 读⼊指定的xml⽂件,取出数据并打印* @param string*/private static void readBook(String filename) {//1..读⼊指定的⽂件,构造Document对象File file = new File(filename);SAXReader reader = new SAXReader();//XML⽂件解析器try {Document doc = reader.read(file);//解析器开始解析xml⽂件//2.获得根元素Element root = doc.getRootElement();//3.递归搜索⼦元素/* List<Element> list = root.elements("武侠⼩说");//迭代武侠⼩说的元素集合Iterator<Element> it = list.iterator(); */Iterator<Element> it = root.elementIterator("武侠⼩说");while(it.hasNext()){Element bookElmt = it.next(); //bookEmlt是武侠⼩说元素//取武侠⼩说的⼦元素System.out.println(bookElmt.elementText("书名"));//取⼦元素书名的内容 List<Element> authorList = bookElmt.elements("作者");for (Element element : authorList) {//打印作者元素内容System.out.println(element.getText());}System.out.println(bookElmt.elementText("价格"));System.out.println(bookElmt.elementText("简介"));//取武侠⼩说的属性String isbnValue = bookElmt.attributeValue("isbn");//取武侠⼩说的 lang元素String langValue = bookElmt.attributeValue("lang");System.out.println("isbn="+isbnValue);System.out.println("lang="+langValue);//取⼦元素中的属性Element nameElmt = bookElmt.element("书名");System.out.println(nameElmt.attributeValue("hot"));System.out.println("-----------------");}} catch (DocumentException e) {e.printStackTrace();}}}book.xml如下<?xml version="1.0"?><书><武侠⼩说 isbn="1234" lang="zh"><书名 hot="false"><<天龙⼋部>></书名><作者>⾦庸</作者><作者>古龙</作者><价格>45</价格><简介>⼀本好书</简介></武侠⼩说><br></br><武侠⼩说 isbn="1235" lang="zh"><书名 hot="true">笑笑江湖</书名><作者>⾦庸</作者><价格>45</价格><简介><!-- 这是⼀段注释 --><![CDATA[⼀本好书,没有<<笑傲江湖>>好看CDATA中的所有特殊字符都不解释(原样显⽰)]]></简介></武侠⼩说><br></br></书>5 DOM4j API解析XML⽂件(⽣成)1)常⽤API⽅法:给元素增加⼦元素: elmt.addElement("标记名称");给元素增加属性: elmt.addAttribute("属性名","属性值");给叶⼦元素设值: elmt.setText("元素值");例如:要⽣成以下xml⽂件<book isbn="1001" catalog = "科幻"><name>阿⾥波特</name><author>罗林</author><price>60</price><year>2005</year></book>步骤:1.构造空的Document2.构造根元素3.递归构造⼦元素4.输出WriteBookDemo源代码package day1;import java.io.*;import org.dom4j.*;import org.dom4j.io.*;/*** 利⽤DOM4J写出xml⽂件* @author soft01**/public class WriteBookDemo {static String [][] data={{"1001", "科幻", "阿⾥波特", "罗林","60", "2005","en"},{"1002", "迷幻", "⼩波特", "罗4林","60", "2005","zh"},{"1003", "⽞幻", "中波特", "罗3林","60", "2005","en"},{"1004", "奇幻", "⼤波特", "罗2林","60", "2005","zh"}};public static void main(String[] args) {writeBook("mybook.xml");}/*** 把书的数据⽣成到指定名字的xml⽂件中* @param filename*/public static void writeBook(String filename){// 1.构造空的DocumentDocument doc = DocumentHelper.createDocument();// 2.构造根元素Element rootElmt = doc.addElement("booklist");// 3.递归构造⼦元素for(String[] book:data){Element bookElmt = rootElmt.addElement("book");//book 元素增加属性bookElmt.addAttribute("isbn", book[0]);bookElmt.addAttribute("catalog", book[1]);Element nameElmt = bookElmt.addElement("name");nameElmt.setText(book[2]);//给name 加属性nameElmt.addAttribute("lang", book[6]);Element authorElmt = bookElmt.addElement("author");authorElmt.setText(book[3]);Element priceElmt = bookElmt.addElement("price");priceElmt.setText(book[4]);Element yearElmt = bookElmt.addElement("year");yearElmt.setText(book[5]);}// 4.输出outputXml(doc,filename);}public static void outputXml(Document doc,String filename){try {//定义输出流的⽬的地FileWriter fw = new FileWriter(filename);//定义输出格式和字符集OutputFormat format = OutputFormat.createPrettyPrint();format.setEncoding("UTF-8");//定义⽤于输出xml⽂件的XMLWriter对象XMLWriter xmlWriter = new XMLWriter(fw,format);xmlWriter.write(doc);xmlWriter.close();} catch (IOException e) {e.printStackTrace();}}}注意:运⾏程序⽣成的mybooks.xmlpackage day1;不⾃动装载,需要刷新⼀下程序运⾏通过后,在项⽬上点击右键"refreash"(或F5)如果是从别的⼯作区导⼊的项⽬,需要去别的⼯作区⽬录下找⽣成的XML⽂件6XPath(w3c的标准)1) XPath:在XML⽂件中查找或定位信息的语⾔,相当于SQL中的 selectXPath 可以通过元素/属性/值来定位或导航2) 节点(Node):相当于xml⽂件中的元素3) 指定条件定位元素的⽅式例⼦:package day1;import java.io.*;import java.util.*;import org.dom4j.*;import org.dom4j.io.*;/*** 测试XPath的功能* @author soft01**/public class XPathDemo {public static void main(String[] args) {findBook("mybook.xml");}public static void findBook(String filename){SAXReader reader = new SAXReader();try {//获得⽂档对象Document doc = reader.read(new File(filename));Node node =doc.selectSingleNode("/booklist");//查找所有的catalog="奇幻"的书2//String sql = "book[@catalog ='奇幻']";//价格>50的书//String sql = "book[price>50]";//作者等于罗林的书,并且价格⼤于50//String sql ="book[author='罗林' and price>50]";//价格⼤于50,且语⾔是zhString sql = "book[price>50 and name[@lang='zh']]"; List<Element> books = node.selectNodes(sql);for(Element e:books){System.out.println(e.getStringValue());}} catch (DocumentException e) {e.printStackTrace();}}}。
DTD使用方法
+内部DTD
-格式如下:
<!DOCTYPE root-element [element-declarations]>
</note>
DTD文件:
note.dtd
<t;
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT foo (#PCDATA)>
<!--close the DOCTYPE declaration-->
]>
-举例如下:
<?xml version="1.0" standalone="yes" ?>
<!--open the DOCTYPE declaration -
+DTD Language
/dtd/dtd_intro.asp
-XML DTD 全称:Document Type Definition
简介:用于定义文档的合法性。它定义了文档应该有哪些元素及其属性,还有其他一些约束性规则。
注意:DTD语言定义的文档类型是SGML家族的标记性语言。包括SGML,XML,HTML),这里探讨的知识定义XML的DTD。
<?xml version="1.0"?>
<!-- Edited by XMLSpy? -->
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
JSP XML 使用DTD规范XML文档
JSP XML 使用DTD规范XML文档
DTD可以指定用在XML文档中的元素、属性和实体,以及这三者之间的联系等,使XML文档具有预定义的逻辑层次结构,从而更容易实现数据共享。
本练习使用DTD来规范XML文件的学生信息。
具体步骤如下所示:
(1)确定与学生有关的核心信息。
与学生有关的信息可以有很多,这里可以简化为包括信息有:姓名、编号、性别、年龄等信息。
(2)编写DTD文件。
学生是学校中的一员,具有层次结构,所以通过班级把
在上述声明中规定,根过元素为“学校”,“学校”可以有一个或多个“班级”子元素,同时“学校”也有自己的属性“编号”;“班级”可以有一个或多“学生”子元素,“班级”也有自己的属性“编号”;同样“学生”可以包含子元素“姓名”、“性别”、“年龄”各一个,同时“学生”也有自己的属性“编号”。
(3)编写XML文档。
在与student.dtd文件所在的目录下创建XML文件:stu
上述XML文件中引用外部DTD规范,使用浏览器中打开XML文档,如图7-21所示。
图7-21 学生信息。
第3章在XML文档中使用DTD解读
• 2. Enumerated型
– 如果属性值并不是任意的字符串,而是在 几个可能的值中进行选择,如书籍的“类 别”属性,其值可为“文艺”,也可为 “自然科学”,而不可能为其他情况时, 则可以将书籍的“类别”属性设定为 Enumerated型。
3. ID型 • 当元素的某个属性值是不能重复时,如 书籍的ISBN属性、个人的“身份证号”属 性等,要定义这样的属性则需使用属性的ID 类型。在一个XML文档中,所有元素的ID类 型属性的属性值必须是唯一的,不可重复, 另外,一个元素不能有超过一个ID类型的属 性。
不限定元素内容的声明
• ANY是DTD中使用很频繁的一个关键字, 特别是对于文档根元素的声明。在定义一个 DTD文档时通常很难准确地确定一个元素是 否具有子元素的情况,此时一般的做法是指 定该元素的子元素为ANY型,这样在它之中 可以包含任何数据、任何声明的子元素及其 数据和子元素的组合。 •
ANY元素lt;!DOCTYPE 根元素名称 [定义的内容]> – 其中“[定义的内容]”是用标签<!ELEMENT>定 义,它包括:
• • • • 元素类型声明; 元素属性声明; 实体声明; 记法声明。
3.1 DTD概述
• 内部DTD文件示例
<?xml version="1.0" encoding="gb2312" standalone="yes"?> <!DOCTYPE 持股信息 [ <!ELEMENT 持股信息 (股东)*> <!ELEMENT 股东 (姓名, 武商股份, 神龙电业, 浦发银行, 兴和基金)> <!ELEMENT 姓名 (#PCDATA)> <!ELEMENT 武商股份 (#PCDATA)> <!ELEMENT 神龙电业 (#PCDATA)> <!ELEMENT 浦发银行 (#PCDATA)> <!ELEMENT 兴和基金 (#PCDATA)> ]>
DTD规范XML文档
DTD规范XML文档DTD是一套关于标记的语法规则,它定义了文档的逻辑结构,规定了文档中所使用的元素、实体、元素的属性、元素与实体之间的关系。
一引入DTD(3种方式)1 内部DTD——内部的DTD紧跟在XML声明和处理指令之间。
< ? xml version=”1.0” encoding=”GB2312” standalone=”yes” ?><! DOCTYPE 根元素名称 [<! ELEMENT 子元素名称 (#PCDATA)>]>2 外部DTD外部文件类型定义存在于独立文件中,文件扩展名为“dtd”。
外部DTD的了处:可以方便地被多个XML文档共享,只需要定义一份DTD文档,即可为多个XML文档定义语义约束。
<!DOCTYPE 根元素名 SYSTEM " DTD-URL ">SYSTEM:关键字,指该外部DTD是私有的DTD-URL:通过URL将外部DTD引用到XML文档中,可以是绝对地址也是可以相对地址。
3公用DTD<!DOCTYPE 根元素名 PUBLIC " DTD-NAME ““DTD-URL”>公用DTD与外部DTD区别在于:公用DTD使用PUBLIC代替了原来的SYSTEM,并增加了DTD标识名。
二 DTD文档的结构<?xml version="1.0" encoding="UTF-8"?> DTD声明部分,DTD注释与XML 注释的语法完全相同<!ELEMENT …>定义一个XML元素<!ELEMENT …>…<!ATTLIST …>定义一个XML元素定义了一个属性<!ATTLIST …>…<!EMTITY…>定义一个实体…<!NOTATION…>定义一个符号...三 DTD对元素声明【重点】使用ELEMENT声明XML元素的语法, <!ELEMENT 元素名元素内容> 注:元素声明以“<!”开始,以“>”结束;元素声明指令“ELEMENT”为关键字,必须大写;元素名:为当前元素指定的元素名称;元素内容:元素名后面的内容用来指定元素的内容类型,可分为EMPTY(空)、子元素类型,混合型、ANY(任意)和#PCDATA 五种类型;DTD必须定义XML文档中允许出现的所有元素。
XML验证——精选推荐
XML验证合法的XML和形式良好的XML ?拥有正确语法的 XML 被称为“形式良好”的 XML。
1. 第⼀⾏是 XML 声明。
它定义 XML 的版本 (1.0) 和所使⽤的编码 (ISO-8859-1 = Latin-1/西欧字符集)。
2. XML ⽂档必须有根元素3. XML ⽂档必须有关闭标签4. XML 标签对⼤⼩写敏感5. XML 元素必须被正确的嵌套6. XML 属性必须加引号通过 DTD 验证的 XML 是“合法”的 XML。
DTD定义:DTD(⽂档类型定义)的作⽤是定义 XML ⽂档的合法构建模块。
它使⽤⼀系列的合法元素来定义⽂档结构。
DTD声明内部的 DOCTYPE 声明代码⽰例:1 <!DOCTYPE note [2 <!ELEMENT note (to,from,heading,body)>3 <!ELEMENT to (#PCDATA)>4 <!ELEMENT from (#PCDATA)>5 <!ELEMENT heading (#PCDATA)>6 <!ELEMENT body (#PCDATA)>7 ]>代码解释:2 此⽂档是 note 类型的⽂档3 note 元素有四个元素:"to、from、heading,、body"4 to 元素为 "#PCDATA" 类型外部⽂档声明<!DOCTYPE note SYSTEM "note.dtd">//note.dtd<!ELEMENT note (to,from,heading,body)><!ELEMENT to (#PCDATA)><!ELEMENT from (#PCDATA)><!ELEMENT heading (#PCDATA)><!ELEMENT body (#PCDATA)>为什么使⽤ DTD1. 通过 DTD,每⼀个 XML ⽂件均可携带⼀个有关其⾃⾝格式的描述。
第三章 XML语法检 查DTD
DTD的属性声明
2、枚举类型 枚举类型并不需要使用一个关键字,它只 是将所有的属性列举出来,并以竖线分隔。枚 举类型的每一个可能值都必须遵循XML的名称 命名规则,然后就可以从这些值中选出一个作 为属性值。 例:<!- - DTD部分 - - > <!ATTLIST PET HOTSELL (TRUE|FALSE) “FALSE” > <!- - 文件元素部分- - > <PET HOTSELL = “TRUE”>热卖中!</PET>
DTD的属性声明
3、NMTOKEN类型 NMTOKEN规定属性值必须是正确的XML名称 (即必须以字母或下划线开头,后面的字符可 以为字母、数字、下划线、连字符和点号,但 不可包含空格)。 如: <!- - DTD部分 - - > <!ATTLIST CUSTOMER COUNTRY NMTOKEN #REQUIRED > <!- - 文件元素部分- - > <CUSTOMER COUNTRY=“CHN”>…… </CUSTOMER>
DTD的元素声明
3、声明空元素的声明格式: <!ELEMENT 元素名 EMPTY> • 该结构当声明的XML文档元素的内容为空时, 有效。如: <!- - DTD部分 - - > <!ELEMENT 位置 EMPTY> <!- - 文件元素部分- - > <位置></位置>
DTD的元素声明
4、声明自由类型元素的格式: <!ELEMENT 元素名 ANY> • 元素的内容可以是任何数据: 任何被声明过的元素,元素出现的顺序和次数不 受限制; 文本内容或CDATA段 例:example3.xml 5、混合类型 若某元素既包含子元素又包含已编译的字符数据,则 该元素具有混合内容。其声明的语法如下: <! ELEMENT pick (#PCDATA | one | two | three)*>
dtd语法
dtd语法DTD是一种用于定义XML文档结构的语法规则。
它包括元素、属性等定义,并规定它们之间的关系和约束条件。
DTD有助于确保XML文档的正确性和可读性。
下面我们来谈谈DTD语法的具体内容。
1. 元素定义DTD的首要任务是定义XML文档中包含的所有元素。
每个元素应该有一个名称和属性列表,可以指定它是必需的还是可选的。
如下:<!ELEMENT 元素名称 (子元素列表)><!ATTLIST 元素名称属性名称属性类型默认值>2. 元素类型每个元素还应该有一个类型,以指定它的内容可以是文本、其他元素、或者需要满足特定规则。
形式包括:- #PCDATA 表示纯文本- EMPTY 表示元素没有内容- CDATA 表示包含字符数据,但不解析标记3. 属性类型属性可以包括一个名称和类型,例如字符串或数字。
属性名称和属性类型都必须在DTD中定义。
属性类型可以是以下之一:- CDATA 表示包含字符数据,但不解析标记- ID 表示属性值必须唯一- IDREF 表示属性值必须是文档中另一个元素的唯一标识符4. 实体定义在DTD中,可以使用实体来定义一些常用的数据,如特殊符号和常用字符串。
实体可以是内联的或外部的,内联的实体用于替换单个字符或字符串,而外部实体用于引用外部文件。
5. 注释DTD中可以包含注释,以便其他人能够轻松理解代码。
注释的格式如下:<!-- 这是一段注释 -->6. 引用当DTD涉及多个文件时,可以在每个文件中引用其他文件。
使用“ SYSTEM”或“ PUBLIC”来指示要使用的外部文件。
DTD语法规则非常棒,它可以确保XML文档中的所有元素都符合预期。
而且,DTD规则还可以作为模板,帮助开发者设计和构建可靠的XML解析器。
然而,DTD语法对于大规模复杂文档的开发可能有些不足。
因此,我们可以使用其他语法规则,如XML Schema或RELAX NG等来取代DTD 规则。
DTD详解
DTD全称为decument type definition,它是文档类型定义,其中规定XML文档中的元素、属性、标记、文档中的实体及其相互关系。
DTD为XML文档结构制定了一套规则。
DTD采用了非XML的语法描述语义约束,可以提供如下功能:1、DTD可以为应用程序提供一种统一的XML文档格式2、DTD有助于数据交流与共享3、DTD可以使用脱离实际数据就能知道文档的逻辑结构4、DTD可以验证数据的有效性5、通过使用DTD可以让每个XML文件带有一个有关其自身的格式描述6、不同的公司、组织可一致的使用某个标准的DTD来交换数据7、应用程序也可以使用某个标准的DTD验证所介绍的XML文档是否符合语义约束8、开发者可以使用DTD来验证所创建的XML文档DTD约束包括以下几个方面1、定义XML的根元素、内容和结构2、定义XML文档中可以接受哪些元素3、定义XML文档里每个元素接受的合法内容包括是否可以为空、是否可以是文本、可以接受哪些子元素、子元素出现的顺序及子元素出现的次数等4、定义XML文档中每个元素能接受哪些属性5、定义XML文档中每个属性的类型、能接受哪些值以及元素对属性的约束等6、定义属性的固定值和默认值7、定义XML文档以及DTD文档中可以使用的实体注:一个合法的文档必须符合DTD指定的约束条件,而且它的基本元素必须是在文档类型声明中指定的。
只有符合DTD规则的XML文档才是有效地文档。
引入DTD的方式:1、内部引用方式2、外部引用方式其中外部引用方式可划分为两种即SYSYTEM引用方式、PUBLIC引用方式。
下面我们逐一介绍DTD的引用方式首先介绍内部DTDDTD语义约束与xml文档的内容放在同一个XML文档中。
内部DTD紧跟在XML声明和处理指令之后,以”<!DOCTYPE “开始,以”]>”结束。
其语法格式如下<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE 根元素名[元素描述[DTD的内容]]>XML文档主体部分<?xml version="1.0" encoding="UTF-8" standalone="yes"?><!DOCTYPE book[<!ELEMENT book (computer)*><!ELEMENT computer (book_name,price,author)><!ELEMENT book_name(#PCDATA)><!ELEMENT price (#PCDATA)><!ELEMENT author (#PCDATA)>]><book><computer><author>redarmychen</author><book_name>JavaWeb开发</book_name><price>30.0</price></computer><computer><book_name>CSS应用程序的开发</book_name><price>1000</price><author>redarmy_Chen</author></computer></book>案例分析:第一行XML声明语句中的standalone属性取”yes” 值表示所有必须的实体声明都包含的文档中说明该文档是独立文档。
dtd声明
一,什么是DTD?1,XMl是一种元标记语言,是描叙语言的语言,定义标记的语法结构,从而生成新标记。
而DTD则是为新标记建立文档并进行规范说明。
也就是说XML定义标记的语法结构是通过DTD来定义,并指定文档结构的规范,而XML文档来使用标记。
2,自描述数据的规范。
二,DTD的作用1,DTD定义了文档中的元素(标记和属性)和实体,以及相互关系。
数据和结构分离。
2,通过DTD验证XML文档的有效性。
DTD为解析器提供了解析XML文档的依据。
所以每个XML文档必须指定对于哪个DTD有效。
三,DTD的结构1,元素的声明:使用元素声明来声明XML文档中的元素⑴,带有数据的元素:<! ELEMENT 元素名(数据类型)>数据类型:#CDATA:指元素包含不通过解析器解析的字符数据。
特殊字符和保留字不需要转义。
#PCDATA:指元素包括解析器可解析字符数据。
特殊字符和保留字需要转义才可以通过解析器。
ANY:元素可以包含任何声明类型的子元素和字符数据。
⑵,带有子元素的元素:<! ELEMENT 元素名(子元素1名,子元素2名)>多个子元素用逗号隔开。
在文档中的顺序和定义中的顺序一致。
子元素可以有自己的子元素。
①相同元素只出现一次:<! ELEMENT 元素名(子元素)>②相同元素至少出现一次:+<! ELEMENT 元素名(子元素+)>③相同元素出现零次或多次:*<! ELEMENT 元素名(子元素*)>④相同元素出现零次或一次:?<! ELEMENT 元素名(子元素?)>⑶,空元素:<! ELEMENT 元素名(EMPTY)>空元素可以有属性⑷,混合声明组可以是序列或选择子元素和/或子组:①序列<! ELEMENT A (B)> :元素A由单个子元素B组成.<! ELEMENT A (B, C)> :元素A由子元素B和C组成.<! ELEMENT A (B, (C | D), E> :元素A由子元素B ,E和选择子组(C或D中之一)组成.②选择子元素和/或子组<! ELEMENT A (B | C)>:元素A由子元素选择子组(B或C)组成.<! ELEMENT A (B | C | (D, E))>:元素A由包括序列子组(D和E)的选择(B或C或D,E之一)组成.2,属性的声明⑴空属性<! ATTTLIST 元素名EMPTY>⑵非空属性<! ATTLIST 元素名属性名属性类型属性值>属性值:①,Default属性值:指定一个默认值<! ATTLIST 元素名属性名属性类型"默认值" >DTD示例:<! ATTLIST 售价货币单位CDATA "人民币">XML示例:<售价货币单位= "人民币">10.90</售价>②,Implied属性值:可以不提供该属性,该属性也没有默认值。
xsd常用语法
XSD(XML Schema Definition)是用于定义XML文档结构的语言。
XSD提供了多种语法规则来描述XML文档的结构和内容。
以下是一些常用的XSD语法:1. 元素声明:使用<element>标签声明XML元素,指定元素的名称和类型。
例如:<element name="student" type="StudentType"/>2. 复杂类型定义:使用<complexType>标签定义复杂类型,可以包含多个<sequence>、<choice>、<simpleContent>等子元素,用于描述元素的复杂结构。
例如:<complexType name="StudentType"><sequence><element name="firstname" type="xs:string"/><element name="lastname" type="xs:string"/><element name="nickname" type="xs:string"/><element name="marks" type="xs:positiveInteger"/></sequence><attribute name="rollno" type="xs:positiveInteger"/></complexType>3. 简单类型定义:使用<simpleType>标签定义简单类型,适用于元素的值是简单数据类型的情况。
第4章 使用DTD
<!ELEMENT 学生 (学号,姓名)>
<!ELEMENT 说明 (#PCDATA)> <!ELEMENT 学号 (#PCDATA)> <!ELEMENT 姓名 (#PCDATA)> 注意:<!ELEMENT 学生 (学号,姓名)>放在最后也可以 注意:DTD文件中元素的作用与其在DTD文件中的书写位置无关。
5.Mixed(混合):可能包含子元素和文本数据的混合体。 说明:这几种类型都允许在元素的起始标记中使用属性。
注意:在DTD中有一个原则,没有明确声明就是禁止,并且同名的元素 只能声明一次。
XML
KMR
教程
4.3.1
纯文本内容
1.设定基本元素的内容(#PCDTTA元素)
纯文本内容(#PCDTTA)元素表示元素内容为可解析的数据,实际上 就是字符数据(文本数据和实体引用),由“(#PCDATA) (Parsed Character DATA)”表明。 语法格式:<!ELEMENT 元素名 (#PCDATA)> 例如:<!ELEMENT 说明 (#PCDATA)> 合法示例:<说明>信管07班为文明班</说明> 非法:<说明><学号>2007999</学号></说明>
就是通过外部DTD来完成的。这样做不仅简化了输入工作,还 保证当你需要对DTD做出改动时,不用一一去改每个引用了它 的XML文件,只要改一个公用的DTD文件就足够了。4.2.2 外部DTD
外部DTD文件的格式:
<?xml version = “1.0” encoding=“GB2312”?> …… 元素、属性或实体的DTD声明 ……
DTD元素属性介绍
DTD元素属性介绍⼀个DTD⽂档实际上就是元素定义的集合,⽽元素可能包含属性,也可能不包含属性,就象在C++的⼀个类中,我们可以有虚函数,也可以没有虚函数。
属性可以通过以下的语法进⾏定义: <! ATTLIST ElementName AttributeName Type Default AttributeName Type Default ….. >ATTLIST是⼀个XML语⾔的保留字,也可以称为是关键字,就象C++语⾔中的保留字struct,class,inline等⼀样。
ElementName表⽰元素的名称,元素的名称相当于程序设计语⾔中变量的名称,你可以任意取,⽐如student、teacher、book等等。
你要取为ttt、kkk也没关系,只是这种名称不能确切的表⽰它所代表的意义⽽已。
⼀个元素可以包含多个属性,⼀个属性有三部分构成:属性名称(AttributeName)、属性类型(Type)和属性特点(Default)。
AttributeName表⽰属性的名字,你可以任意取名,⽐如⾝⾼、体重、性别等等。
Type表明该属性的类型,就象在C++中我们对⼀个变量需要指定它的类型(⽐如int,double,bool等等)。
Default表明这个属性的特点,在XML语⾔中,可以有四种形式:#REQUIRED,#IMPLIED,#FIXED value,defaultvalue。
在后⾯会对这四中形式做详细的说明。
现在我们先来看⼀下XML所定义的属性类型的种类,见图表:类型具体的含义说明CDATA这个类型表明该属性只能包含字符数据,⽐如"strong","23","美⼥","恐龙"等等ID该属性的取值必须是唯⼀的,就象我们每个⼈都有的⾝份证号码⼀样。
在⼀个⽂档内两个ID属性的值⼀定不可以⼀样。
IDREF,IDREFS 这个属性的值实际上就象C++中的指针⼀样,它是⼀个指向⽂档中其他地⽅声明的ID值。
文档类型定义
DTD-name只能包含字母、数字、空格和以下符 号:_%$#@()+:=/!*;?。 同时,DTD名称还必须符合一些标准的规定。例 如,ISO标准的DTD以“ISO”三个字母开头;被 改进的非ISO 标准的DTD以加号“+”开头;未被 改进的非ISO标准的DTD以减号“-”开头。 无论是哪一种情况,开始部分后面都跟着两个 斜杠“//”及DTD所有者的名称。在这个名称之后 又是两个斜杠“//”,再然后是DTD所描述的文件 的类型。最后,在又一对斜杠之后是语言的种类。
<联系人列表> XML名称 <联系人 编号=“1"> <姓名>张三</姓名> <EMAIL>zhang@</EMAIL> </联系人> <联系人 编号=“2"> <姓名>李四</姓名> <EMAIL>li@</EMAIL> </联系人> </联系人列表>
不是有效的
4. IDREF、IDREFS类型
内部DTD文档放在 XML声明之后 或在处理指令后,但 在数据之前
外部DTD文件应用示例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机(软件)学院
案例2-3
学生借阅的图书编号必须是已有的图书编号。
<!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ATTLIST <!ELEMENT <!ATTLIST <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT Title (#PCDATA)> Author (#PCDATA)> Publisher (#PCDATA)> PubDate (#PCDATA)> ISBN (#PCDATA)> Book (Title,Author,Publisher,PubDate,ISBN)> Book Category CDATA "计算机" BookID ID #REQUIRED> BorrowNumber (#PCDATA)> BorrowNumber BID IDREF #REQUIRED> SID (#PCDATA)> Name (#PCDATA)> Class (#PCDATA)> Student (SID,Name,Class,BorrowNumber*)> BorrowBook (Book*,Student)>
训练
• 学生信息如下:
– 姓名为“张三” – 学号为“0709123201”
• 要求:
– “姓名”声明为“学生信息”的子元素 – “学号”声明为“姓名”的属性 – 写出包含DTD文档的XML文档
计算机(软件)学院
任务1:设置属性默认值
任务1-1:直接指定属性缺省值
<!ATTLIST 元素名 属性名 属性类型 "默认值" >
计算机(软件)学院
案例1-3
图书页码可有可无 <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ATTLIST Title (#PCDATA)> Author (#PCDATA)> Publisher (#PCDATA)> PubDate (#PCDATA)> ISBN (#PCDATA)> Book (Title,Author,Publisher,PubDate,ISBN)> BookList (Book)*> Book Category CDATA "计算机" PageCount CDATA #IMPLIED>
计算机(软件)学院
训练1-2
阅读下面的DTD文档声明,写出相应的XML文档,并进行有效 性验证(学号必须声明)。 要求:数据自拟,包含一名男生和一名女生。
计算机(软件)学院
任务1:设值属性默认值
任务1-3: 可有可无的属性设置( #IMPLIED )
<!ATTLIST 元素名 属性名 属性类型 #IMPLIED>
计算机(软件)学院
训练2-2
根据DTD声明写出XML文档(ID类型的使用)。
计算机(软件)学院
任务2:设置属性的类型
任务2-3: IDREF类型设置(IDREF )
IDREF类型允许一个元素的属性使用文件中的另一个元素, 方法就是把那个元素的ID标识值作为该属性的取值。注意 该属性值中空格是非法的。
计算机(软件)学院
训练2-4
使用IDREFS训练2-3中DTD声明,并写出对应的XML文档。 (IDREFS类型使用练习)
计算机(软件)学院
任务2:设置属性的类型
任务2-5 :ENTITY类型设置(ENTITY)
ENTITY类型的属性提供把外部二进制数据和外部不可析实体(如 GIF、JPEG、AVI等格式的文件)链接到文档中的能力。
计算机(软件)学院
案例2-2
图书的编号为ID类型,必须赋值。 <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ATTLIST Title (#PCDATA)> Author (#PCDATA)> Publisher (#PCDATA)> PubDate (#PCDATA)> ISBN (#PCDATA)> Book (Title,Author,Publisher,PubDate,ISBN)> BookList (Book)*> Book Category CDATA "计算机" BookID ID #REQUIRED>
计算机(软件)学院
训练2-1
根据DTD声明编写XML文档,并进行有效性验证(枚举类:设置属性的类型
任务2-2: ID类型设置(ID )
(1)ID是用属性值的方式为文件中的某个元素定义唯一标识的方法
(2)ID由处理文件的程序或脚本语言使用。
(3)ID的值必须是一个有效的XML名称,名称中不能出现空格符。
计算机(软件)学院
第4讲 使用DTD定义XML属性
主讲:郭永洪
E-mail:yh_guo@
计算机(软件)学院
任务
• 任务1:使用DTD设置XML元素属性默认 值 • 任务2:使用DTD设置XML元素属性类型
计算机(软件)学院
目标
• 知识目标
–DTD中定义XML元素属性的默认值和属性类 型的方法
计算机(软件)学院
案例2-4
<!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ATTLIST <!ELEMENT <!ATTLIST <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT Title (#PCDATA)> Author (#PCDATA)> Publisher (#PCDATA)> PubDate (#PCDATA)> ISBN (#PCDATA)> Book (Title,Author,Publisher,PubDate,ISBN)> Book Category CDATA "计算机" BookID ID #REQUIRED> BorrowNumber (#PCDATA)> BorrowNumber BID IDREFS #REQUIRED> SID (#PCDATA)> Name (#PCDATA)> Class (#PCDATA)> Student (SID,Name,Class,BorrowNumber*)> BorrowBook (Book*,Student)>
计算机(软件)学院
案例1-4
图书的类别固定为“计算机” <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ATTLIST Title (#PCDATA)> Author (#PCDATA)> Publisher (#PCDATA)> PubDate (#PCDATA)> ISBN (#PCDATA)> Book (Title,Author,Publisher,PubDate,ISBN)> BookList (Book)*> Book Category CDATA #FIXED "计算机" PageCount CDATA #IMPLIED>
计算机(软件)学院
训练1-1
阅读下面的DTD文档声明,写出相应的XML文档,并进行有效 性验证。 要求:数据自拟,包含一名男生和一名女生。
计算机(软件)学院
任务1:设置属性默认值
任务1-2: 必需赋值的属性设置( #REQUIRED )
<!ATTLIST 元素名 属性名 属性类型 #REQUIRED>
• 能力目标
–学会使用DTD定义XML元素属性默认值 –学生使用DTD定义XML元素属性数据类型
计算机(软件)学院
DTD属性声明语法
<!ATTLIST 元素名 属性名 属性类型 默认值>
ATTLIST表示该指令为定义属性的指令。 ATTLIST为关键字,必须大写。
计算机(软件)学院
案例
计算机(软件)学院
计算机(软件)学院
案例1-2
图书页码必须赋值 <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ATTLIST Title (#PCDATA)> Author (#PCDATA)> Publisher (#PCDATA)> PubDate (#PCDATA)> ISBN (#PCDATA)> Book (Title,Author,Publisher,PubDate,ISBN)> BookList (Book)*> Book Category CDATA "计算机" PageCount CDATA #REQUIRED>
若干空格分隔的NMTOKEN。 指定属性值为DTD中声明的记号名。
计算机(软件)学院
任务2:设置属性的类型
任务2-1: 枚举类型设置( Enumerated )