Document Type Definition


1. Document Type Definition

DTD(Document Type Definition)文件格式定义作用是给予文件一种格(Type)式使用户知道所使用的XML文件需包含哪些标记(Tag)、属性(Attribute)、实体(Entities)

3.1内部DTD文件

ANY元素的声明格式

<?xml version="1.0" encoding="UTF-8"?>

<!ELEMENT booklist (book+)>

<!ELEMENT book ANY>

<!ELEMENT author (#PCDATA)>

<!ELEMENT title (#PCDATA)>

子元素列表的设定

子元素列表的设定语法如下:

<!ELEMENT Element_Name(Child_Element1, Child_Element2,…)>

其中“(Child_Element1, Child_Element2,…)”部分为Element_Name所拥有的子元素列表。

可选择的子元素

<!ELEMENT Emnt_Name(Child_Emnt1|Child_Emnt2|……)>

其中,“(Child_Emnt1|Child_Emnt2|…)”部分为选择性元素组合,具体使用时必须要在这个列表中选择其一。

符号

含义

+

最少一次

*

零次或多次

零次或一次

|

子元素列表之一

(…)

将元素列表括起来

DTD 属性声明

DTD 属性

简单来讲就是元素的附加特性,在DTD中声明元素时,也必须对该元素的属性进行声明。

声明格式:

<!ATTLIST Element_name Attribute_name TYPE Default_value>

其中,<!ATTLIST>为关键字,Element_name为元素名,Attribute_name为属性名,TYPE是属性类型,Default_value为没有设定属性值时的默认值。

元素内容说明

含义

CDATA

属性是字符数据

Enumerated

枚举型数据

ENITITY

在DTD中声明的实体

ENITITYES

在DTD中声明的若干实体,实体间用空格分隔

ID

该属性的值唯一地标识包含其的元素

IDREF

其属性值须映射到XML文件已经存在的ID类型属性

IDREFS

文档中若干个元素的ID属性值

NMTOKEN

任意不含空格的XML名称,但可用数字为名称开头

NMTOKENS

多个XML名称,每个NMTOKEN间以空格分隔

NOTATION

在DTD中声明的记号名

属性有4种不同类型的默认值,可在属性声明中的Default_value部分指定。

① default:表示使用提供的默认值,default不是一个关键字,它代表一个预设的字符串。

<!ATTLIST bookinfo bookcat("文艺"|"自然科学")"文艺" >

此例句表示当在XML文档中省略了对bookinfo元素的bookcat属性值进行设定时,该属性的默认值就是“文艺”。

② #REQUIRED:表示属性值必须指定。

③ #IMPLIED:表示元素的这个属性可用可不用。

④ #FIXED:表示元素的这个属性值是一个固定值,且必须是指定的值。

1. CDATA型

CDATA型表明属性值为不包含“<”和“””的任意字符串,如果属性值中需要包含“<”和“””,则可使用特殊字符来代替

<?xml version="1.0" encoding="UTF-8"?>

<!ELEMENT booklist (book+)>

<!ELEMENT book ANY>

<!ELEMENT author (#PCDATA)>

<!ELEMENT title (#PCDATA)>

<!ATTLIST book sales CDATA #REQUIRED >

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE booklist SYSTEM "char03-tutorial.dtd">

<booklist>

<book sales="已售出">

<author>Francis Glassborow</author>

<title>You Can Do It!</title>

</book>

<book sales="未售出">

<title>Tom Swan'Code Secrets</title>

<author>Tom Swan</author>

</book>

<book sales="未售出">

<title>Digital Control System</title>

</book>

</booklist>

2. Enumerated型

如果属性值并不是任意的字符串,而是在几个可能的值中进行选择,如书籍的“类别”属性,其值可为“文艺”,也可为“自然科学”,而不可能为其他情况时,则可以将书籍的“类别”属性设定为Enumerated型。

3. ID型

当元素的某个属性值是不能重复时,如书籍的ISBN属性、个人的“身份证号”属性等,要定义这样的属性则需使用属性的ID类型。在一个XML文档中,所有元素的ID类型属性的属性值必须是唯一的,不可重复,另外,一个元素不能有超过一个ID类型的属性。

<?xml version="1.0" encoding="UTF-8"?>

<!ELEMENT booklist (book+)>

<!ELEMENT book ANY>

<!ELEMENT author (#PCDATA)>

<!ELEMENT title (#PCDATA)>

<!ATTLIST book id ID #REQUIRED >

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE booklist SYSTEM "char03-tutorial.dtd">

<booklist>

<book id="ISBN7-302-2">

<author>Francis Glassborow</author>

<title>You Can Do It!</title>

</book>

<book id="ISBN7-302-3">

<title>Tom Swan'Code Secrets</title>

<author>Tom Swan</author>

</book>

<book id="ISBN7-302-4">

<title>Digital Control System</title>

</book>

</booklist>

4. IDREF与IDREFS型

IDREF为Identifier Reference的缩写,IDREF与ID类型属性的关系为子元素与父元素的关系,即IDREF类型属性的值必须是其他元素的ID类型属性的值,且该ID类型属性的值必须在文档的其他地方被设定过。IDREFS类型属性的属性值可有多个,每一个都必须是在文档其他地方被设定了的ID类型属性的值,而这多个属性值之间用空格隔开。<?xml version="1.0" encoding="GB2312"?>

<!ELEMENT BookOrder (Customer+, book+)>

<!ELEMENT Customer (name*)>

<!ELEMENT name (#PCDATA)>

<!ELEMENT book (publishing+)>

<!ELEMENT publishing (#PCDATA)>

<!ATTLIST Customer id IDREF #REQUIRED >

<!ATTLIST book  id ID #REQUIRED >

<?xml version="1.0" encoding="GB2312"?>

<!DOCTYPE BookOrder SYSTEM "IDREF.dtd">

<BookOrder>

<Customer oid="ISBN7-302-07916-2">

<name>Larry</name>

</Customer>

<Customer oid="ISBN0-03-057568-0">

<name>Tom</name>

</Customer>

<book id="ISBN7-302-07916-2">

<publishing>清华大学出版社</publishing>

</book>

<book id="ISBN0-03-057568-0">

<publishing>科学出版社</publishing>

</book>

</BookOrder>

5. ENTITY与ENTITIES型

ENTITY类型的属性提供了把外部二进制形式的文件(如.jpeg、.mp3等)和外部不可解析实体链接到XML文档的功能。因此其属性值也必须为不可解析的链接外部实际数据的通用实体名。ENTITIES类型属性的属性值可由多个不可解析的外部实体名称组成,各实体名称之间使用空格隔开。

6. NMTOKEN与NMTOKENS型

NMTOKEN类型的属性限定属性值是有效的XML名称,这个属性值可以由英文、数字、“.”、 “_”、“-”、“:”等组成,这里有几点需要注意。

(1) 不能包括空格。

(2) 以上字符中除“:”以外,其他字符都可以作为开头字符。

(3) “:”可以出现在中间,但由于它是命名域的关键字符,所以一般不提倡使用。

7. NOTATION型

XML文档中引入了外部不可解析的实体后,解析器无法解析这些二进制文件,这时,就可以使用NOTATION类型的属性为这些二进制文件指定与其对应的应用软件以对其进行处理。

空白属性类型

xml:space是XML中用来设置解析器与应用程序之间处理方法的属性

是枚举类型的属性,有default和preserve两个值

default:表示解析器将空格符传递给应用程序后,由应用程序决定如何处理空格符

preserve:表示解析器将空格符传递给应用程序后,要求应用程序保留这些空格符

语法:

<!ATTLIST 元素名称 xml:space (default|preserve)>

Eg.

<!ATTLIST ele xml:space (default|preserve) “default”>

语系属性类型

Xml:lang属性是用来设置元素中文字的语言信息

语法:

<!ATTLIST 元素名称 xml:lang (en|TW) “en”>

la:拉丁文   en:英文

tw:繁体中文  zh-CN:检体中文

语系的作用:搜索数据时,应用程序可根据这个属性决定是否对元素内的数据进行处理

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE bookstore [

<!ELEMENT bookstore (book*)>

<!ELEMENT book (title,author,year,price)>

<!ELEMENT title (#PCDATA)>

<!ELEMENT author (#PCDATA)>

<!ELEMENT year (#PCDATA)>

<!ELEMENT price (#PCDATA)>

]>

<bookstore>

<book>

<title>Everyday Italian</title>

<author>Giada De Laurentiis</author>

<year>2005</year>

<price>30.00</price>

</book>

<book>

<title>Harry Potter</title>

<author>J K. Rowling</author>

<year>2005</year>

<price>29.99</price>

</book>

<book>

<title>Learning XML</title>

<author>Erik T. Ray</author>

<year>2003</year>

<price>39.95</price>

</book>

</bookstore>

3.2外部DTD文件

<?xml version="1.0" encoding="UTF-8"?>

<!ELEMENT bookstore (book*)>

<!ELEMENT book (title,author,year,price)>

<!ELEMENT title (#PCDATA)>

<!ELEMENT author (#PCDATA)>

<!ELEMENT year (#PCDATA)>

<!ELEMENT price (#PCDATA)>

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE bookstore SYSTEM "bookstore.dtd">

<bookstore>

<book>

<title>Everyday Italian</title>

<author>Giada De Laurentiis</author>

<year>2005</year>

<price>30.00</price>

</book>

<book>

<title>Harry Potter</title>

<author>J K. Rowling</author>

<year>2005</year>

<price>29.99</price>

</book>

<book>

<title>Learning XML</title>

<author>Erik T. Ray</author>

<year>2003</year>

<price>39.95</price>

</book>

</bookstore>

02Document Type Definition的更多相关文章

  1. 【转】使用Mybatis时遇到的延迟加载造成返回异常的问题——HttpMessageConversionException: Type definition error

    在使用Mybatis的过程中,使用了resultMap延迟加载. 延迟加载:association联表查询的过程中,查询另外两个表的对象.而延迟加载是指只有在使用这两个对象的时候才会进行查询. 问题的 ...

  2. java webservice wsimport 无法将名称 'soapenc:Array' 解析为 'type definition' 组件 时对应的解决方法

    (一):代码如下: package com.enso.uploaddata; import org.apache.axis.client.Call; import org.apache.axis.cl ...

  3. Cannot find type definition file for '.svn'

    描述: Ionic项目在执行ionic build --prod过程中,出现如下错误: 看来是.svn文件影响了编译. 解决办法:升级TortoiseSVN版本(https://tortoisesvn ...

  4. window date type

    Most string operations can use the same logic for Unicode and for Windows code pages. The only diffe ...

  5. input type=file accept中可以限制的文件类型

    在上传文件的时候,需要限制指定的文件类型. <input type="file" accept="image/*" /> accept表示可以上传文 ...

  6. 不一样的go语言-不同的语法之type

    前言   在go语言中,type用于类型定义(type definition)与类型别名(type alias).这两者的差别从名字上已经可以初见端倪.   类型定义即定义新类型,是一个全新的类型,但 ...

  7. input输入框type=file时accept中可以限制的文件类型(转载)

    转载自: input type=file accept中可以限制的文件类型 在上传文件的时候,需要限制指定的文件类型. <input type="file" accept=& ...

  8. Python笔记 #01# Convert Python values into any type

    源:DataCamp datacamp 的 DAILY PRACTICE  + 日常收集. How much is your $100 worth after 7 years? Guess the t ...

  9. 上传文件时文件类型限制 <input id="File1" type="file" accept=""/>

    在做项目项目中经常需要上传文件,类型也就那几种.虽然在js中加了上传文件类型的限制,但是为了减少因为用户选择不当而造成的反复检验.可以在input标签上加上accept属性.这种限制只是优化了选择文件 ...

随机推荐

  1. 并不对劲的bzoj3998:loj2102:p3975:[TJOI2015]弦论

    题目大意 对于一个给定的长度为n(\(n\leq5*10^5\))的字符串, 分别求出不同位置的相同子串算作一个.不同位置的相同子串算作多个时,它的第k(\(k\leq10^9\))小子串是什么 题解 ...

  2. Java-Runoob-高级教程-实例-字符串:09. Java 实例 - 字符串小写转大写

    ylbtech-Java-Runoob-高级教程-实例-字符串:09. Java 实例 - 字符串小写转大写 1.返回顶部 1. Java 实例 - 字符串小写转大写  Java 实例 以下实例使用了 ...

  3. postgresql数据库基本信息查看

    切换至postgresql数据库用户pguser 或 postgres(根据自己实际情况) 1.   SELECT version(); 2.对的 2. 查看数据库大小: SELECT pg_size ...

  4. python pip安装第三方模块

    一.pip工具使用 安装windows版本python,自带pip工具.2者路径相同. 如果设置了环境路径,可以直接在命令提示符窗口下尝试运行pip.如果没有设置环境路径,可以先cd命令到pip工具的 ...

  5. IIS重新注册

    打开程序-运行-cmd:输入一下命令重新注册IISC:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i

  6. Luogu P2327 [SCOI2005]扫雷【递推/数学】By cellur925

    题目传送门 推了好久啊.看来以后要多玩扫雷了qwq. 其实本题只有三种答案:0.1.2. 对于所有第一列,只要第一个数和第二个数确定后,其实整个数列就确定了,我们可以通过这个递推式得出 sec[i-] ...

  7. A - I'm bored with life

    Holidays have finished. Thanks to the help of the hacker Leha, Noora managed to enter the university ...

  8. [poj2096] Collecting Bugs【概率dp 数学期望】

    传送门:http://poj.org/problem?id=2096 题面很长,大意就是说,有n种bug,s种系统,每一个bug只能属于n中bug中的一种,也只能属于s种系统中的一种.一天能找一个bu ...

  9. XOR and Favorite Number Codeforces - 617E || [CQOI2018]异或序列

    https://www.luogu.org/problemnew/show/P4462 http://codeforces.com/problemset/problem/617/E 这个是莫队裸题了吧 ...

  10. DFS Gym 100553J Jokewithpermutation

    题目传送门 /* 题意:将字符串分割成一个全排列 DFS:搜索主要在一位数和两位数的处理,用d1, d2记录个数,在不饱和的情况下,两种都试一下 DFS还是写不来,难道是在家里懒? */ #inclu ...