Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >XML中的DTD语法

XML中的DTD语法

作者头像
HUC思梦
发布于 2020-09-03 07:18:28
发布于 2020-09-03 07:18:28
1.1K00
代码可运行
举报
运行总次数:0
代码可运行

DTD(Document Type Definition),全称为文档类型定义。

文件清单:book.xml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" ?>
<!DOCTYPE 书架 SYSTEM "book.dtd">
<书架>
    <>
        <书名>Java就业培训教程</书名>
        <作者>张孝祥</作者>
        <售价>39.00</售价>
    </>
    <>
        <书名>JavaScript网页开发</书名>
        <作者>张孝祥</作者>
        <售价>28.00</售价>
    </>
</书架>

文件清单:book.dtd

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!ELEMENT 书架 (+)>
    <!ELEMENT  (书名,作者,售价)>
    <!ELEMENT 书名 (#PCDATA)>
    <!ELEMENT 作者 (#PCDATA)>
    <!ELEMENT 售价 (#PCDATA)>

验证XML的有效性

IE5以上浏览器内置了XML解析工具:Microsoft.XMLDOM,开发人员可以编写javascript代码,利用这个解析工具装载xml文件,并对xml文件进行dtd验证。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?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)直接值:表示属性的取值为该默认值

定义属性示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!ATTLIST 页面作者 
         姓名 CDATA #IMPLIED 
         年龄 CDATA #IMPLIED 
         联系信息 CDATA #REQUIRED 
         网站职务 CDATA #FIXED "页面作者" 
         个人爱好 CDATA "上网"
       > 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version = "1.0" encoding="GB2312" standalone="yes"?>
<!DOCTYPE 购物篮 [
    <!ELEMENTEMPTY>
    <!ATTLIST品种 ( 鸡肉 | 牛肉 | 猪肉 | 鱼肉 ) "鸡肉">
]> 
<购物篮>
    <肉 品种="鱼肉"/>
    <肉 品种="牛肉"/>
    </>
</购物篮>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?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中使用):&实体名称; 注意:最后的“;”一定需要

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DTD中定义:
    <!ENTITY copyright "思梦科技">
XML中引用:
    &copyright;

定义参数实体(了解)

概念:在DTD中定义,在DTD中使用

语法:<!ENTITY % 实体名称 “实体内容”>

引用方式(注意是在DTD中使用):%实体名称;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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表示输出文件;

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-10-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
有效的xml文档--DTD
DTD(document type define,简称DTD)是有效的xml文档基础,是一套关于标记符的语法规则,后缀名为 .dtd。 DTD可以在xml文档中直接写入,称为内部DTD;也可以单独形成文件,称为外部DTD.外部dtd文件可以被多个xml文件共享。
热心的社会主义接班人
2018/04/27
1.6K0
有效的xml文档--DTD
XML文件约束与DTD的简单介绍
我们编写文档来约束一个XML文档的书写规范,这称之为XML约束。
MonroeCode
2018/01/12
2K0
XML文件约束与DTD的简单介绍
最详细的XML操作学习笔记
以上这种数据, 如果通过我们学习的集合来存储的话, 需要通过多个集合的嵌套使用.
Java学习
2018/07/25
1.9K0
最详细的XML操作学习笔记
XML学习笔记2
1.3 DTD约束 1.什么是约束:在xml文档中,咱们可以通过一个文件来约束xml文档中的内容规范。、 简单来说:约束就是规定xml文件中可以些什么,不可以些什么。 为什么要有约束? 因为xml文件可以随意写,如果标记随意些,在解析xml文件时,程序员就不清楚xml文件中的标记具体表示什么含义,所以说用约束规范xml文件的书写。 2.创建约束文件 什么是DTD:文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。 DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。
别团等shy哥发育
2023/02/27
2710
XML 约束
一个 XML 文档一旦有了约束,那么这个 XML 文档就只能使用约束中创建的元素及属性。
栗筝i
2023/10/16
2770
XML(二)之DTD——XML文件约束
前面介绍了XML的作用和基本的格式,今天我给大家分享的是关于XML的约束。废话不多说,我们直接来正题! 一、DTD简介 1.1、DTD概述   DTD(Document Type Definition,文档类型定义)   1)DTD是一套关于标记符的语法规则。它是XML1.0版规格的一部分,是XML文件的验证机制,属于XML文件组成的一部分。   2)XML文件提供应用程序一个数据交换的格式,DTD正是让XML文件能够成为数据交换的标准,因为不同的公司只需定义好标准的DTD,     各公司都能够依照DTD
用户1195962
2018/01/18
3K0
XML(二)之DTD——XML文件约束
16.XML语法、CDATA、约束(DTD、Schema)讲解
xml主要用来描述数据,比如配置文件,网络之间传输数据等,并且在android中也经常用xml来布局,,接下来便来学习xml常用的东西
诺谦
2019/09/25
2.2K0
16.XML语法、CDATA、约束(DTD、Schema)讲解
XML约束
由于XML的标签是完全自定义的可以去写任何标签,标签内也可以写任何内容,为了去规范去定义只能有哪些标签,标签的内容只能有哪些类型只能是什么。这个时候就需要写约束文件来应用到需要的XML里面。约束有两种方式一种是dtd,第二种是schema,前者相对简单但功能相比schema较弱
木瓜煲鸡脚
2019/07/22
6500
XML快速入门学习笔记
问:什么是 XML? 答:XML 指可扩展标记语言(EXtensible Markup Language);且是一种很像HTML的标记语言;设计宗旨是传输数据,而不是显示数据。 XML 标签没有被预定义,您需要自行定义标签,它设计为具有自我描述性。 目前,XML 在 Web 中起到的作用不会亚于一直作为 Web 基石的 HTML;XML 是各种应用程序之间进行数据传输的最常用的工具。
全栈工程师修炼指南
2020/10/23
8.9K0
XML快速入门学习笔记
XML的约束——DTD
1.什么是DTD?有什么作用? 简单来说:文档类型定义(约束) 规范一点就是:是一套关于标记符的语法规则。它是XML1.0版规格的一部分,是XML文件的验证机制,属于XML文件组成的一部分。DTD 是一种保证XML文档格式正确的有效方法,可通过比较XML文档和DTD文件来看文档是否符合规范,元素和标签使用是否正确。XML文件提供应用程序一个数据交换的格式,DTD正是让XML文件能成为数据交换标准,因为不同的公司只需定义好标准DTD,各公司都能依DTD建立XML文件,并且进行验证,如此就可以轻易的建立标准和
用户10196776
2022/11/22
5320
xml文件-1
1969 gml(通用标记语言) [主要的目的是要在不同的机器进行通信的数据规范]
用户5927264
2019/07/31
1.4K0
【xml】DTD文档和内部DTD 实验三
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
韩旭051
2019/11/08
4510
Spring周边:XML
DOCTYPE 声明为文档提供一个空间,通过引用外部文件、通过直接声明或通过这两种方式来标识其根元素和文档类型定义 (DTD)。DOCTYPE 声明可以包含下列内容:
WEBJ2EE
2019/10/24
1.8K0
Spring周边:XML
Javaweb学习笔记——Javaweb概述
XML是类似于HTML的标记语言,称为可扩展标记语言,用户可以按照XML规则自定义标记。
颜颜yan_
2022/12/01
1.3K0
Javaweb学习笔记——Javaweb概述
DTD 简易教程
文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。
acc8226
2022/05/17
3950
常用 XML 解析技术
现在的软件项目都不是独立的一个项目,都是多系统协调工作。这样的话就涉及到系统间的通讯,通讯就会跟报文传输挂上关系。系统间使用怎样的报文格式进行通讯呢?有的使用固定长度格式报文;有的使用变长格式报文;有的使用 XML 格式报告。本分享主要和大家分享一下 XML 格式报文的解析。
CSDN技术头条
2018/07/30
8140
常用 XML 解析技术
Web Hacking 101 中文版 十四、XML 外部实体注入(一)
XML 外部实体(XXE)漏洞涉及利用应用解析 XML 输入的方式,更具体来说,应用程序处理输入中外部实体的包含方式。为了完全理解理解如何利用,以及他的潜力。我觉得我们最好首先理解什么是 XML 和外部实体。
ApacheCN_飞龙
2022/12/01
4650
android学习笔记----xml语法、约束、解析
xml文件的encoding默认是:"utf-8",但是如果用记事本编辑xml,保存的时候默认ANSI,代表使用平台的编码表gbk保存,不指定编码的话,在解析的时候可能会出现问题。在保存的时候选择UTF-8保存就可以不指定编码,最好还是要指定编码。
砖业洋__
2023/05/06
5410
android学习笔记----xml语法、约束、解析
java基础第十九篇之Xml
1:xml的概述 1.1 xml是什么 标记语言:语言中出现了的标签 a:HTML 超文本标记语言 (语法非常严格,不能随意的定义标签) b:XML 可扩展的标记语言(用户可以根据自己的需求,随意的定义标签) 开发的组织:w3c 版本:使用 1.0
海仔
2019/08/05
1.4K0
DTD的概念及编写
目录 1.什么是DTD? 2.什么是XML? 3.XML的两种文档约束:DTD:Schema 4.XML格式要求(合法XML) 5.使用DTD ---- 1.什么是DTD? 文档类型定义(约束) 2.什么是XML?    HTML:超文本标记语言   a/b/c/z         XML:可扩展标记语言   3.XML的两种文档约束:DTD:Schema 4.XML格式要求(合法XML)    1)有且只有一个根节点;             2)由开始标签和结束标签组成;  
天蝎座的程序媛
2022/11/18
3640
相关推荐
有效的xml文档--DTD
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验