XML DTD验证

XML DTD验证

一、什么是DTD  

  文档类型定义(DTD:Document Type Definition)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。
  DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。

  

二、DTD的作用

  1、有了DTD,每个XML可以携带一个自身格式的描述。

  2、有了DTD,不同组织可以使用一个通用的DTD来交换数据。

  3、应用程序中使用DTD校检从外部接受的XML数据是否有效。

  

三、DTD中包含的内容

  1、元素的定义规则:在DTD中需要验证XML中能包含哪些元素。

  2、元素之间的关系规则:指元素的父元素是谁,元素和元素之间到底是上下层关系还是平行关系。

  3、属性的定义:可以规定在XML中属性名是什么,属性值是什么类型。

四、DTD的分类:

  1、内部DTD文档:DTD文档和XML文档在同一个文件中。

    <!DOCTYPE 根元素 [定义内容]>

  2、外部DTD文档:DTD文档和XML文档保存在不同文件中。

    <!DOCTYPE 根元素 SYSTEM "DTD文件路径">

  3、内外结合的DTD文档:两种相结合的写法。

    <!DOCTYPE 根元素 SYSTEM "DTD文件路径" [定义内容]>

五、DTD元素定义

  语法:

  <!ELEMENT NAME CONTENT>

  ELEMENT:关键字,表示声明一个DTD文档。

  NAME:元素名称,XML中元素的名称。

  CONTENT:元素类型,

  元素类型包括:EMPTY、#PCDATA、纯元素类型、ANY。

  1、Empty:

  该元素不能包含子元素和文本,但可以有属性(空元素)。

  语法: 

  <!ELEMENT 元素名称 EMPTY>

  例:声明一个空的student元素

  <!ELEMENT student empty>

  XML示例:

  <student />

  

  2、#PCDATA:

  可以包含任何字符数据,但不能包含其他子元素。只有 PCDATA 的元素通过圆括号中的 #PCDATA 进行声明:

  语法:

  <!ELEMENT 元素名称 (#PCDATA)>

  例:声明一个name的元素

  <!ELEMENT name (#PCDATA)>

  XML示例:

  <name>张三</name>  

  3、纯元素类型:

  只能包含子元素,不能包含文本。元素出现的顺序必须和定义一致。

  语法:

  <!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)>

  例:声明学生标记

  <!ELEMENT student(name,age)>

  XML示例:

  <student>

    <name>张三</name>

    <age>18</age>

  </student>

 符号的用途:
符号 用途 示例 说明
() 用来给元素分组 (古龙|金庸|梁羽生),(王朔|余杰),毛毛 分为三组
| 在列出的对象中必须选择一个 (男人|女人) 表示男人或者女人必须出现,两者至少出现其一。
, 对象必须按照指定的顺序出现 (西瓜,苹果,香蕉) 表示西瓜、苹果、香蕉必须出现,并且是按照指定顺序出现。
* 该对象可以出现0次或者多次 (爱好*) 爱好可以出现0次到多次
? 该对象只能出现0到1次 (菜鸟?) 表示菜鸟可以出现0次到1次
+ 改对象可以出现1到多次。 (成员+) 表示成员必须出现1次到多次。

  4、ANY:

  可以包含任何元素类型。

  语法:  

  <!ELEMENT 元素名称 ANY>
  例子:
  <!ELEMENT student ANY>

  例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE studentlist [
    <!--声明根元素下可以包含多个student元素-->
    <!ELEMENT studentlist (student*)>
    <!--声明student下可以包含name,age,sex元素,name必须出现0-1次, age出现0-多次,sex必须出现1次 -->
    <!ELEMENT student (name?, age*, sex)>
    <!--声明name中只能包含文本,不能包含其他标记-->
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT age (#PCDATA)>
    <!--声明sex为空元素-->
    <!ELEMENT sex EMPTY>
]>
<studentlist>
    <student>
        <name>张三</name>
        <age>20</age>
        <sex/>
    </student>
    <student>
        <name>李四</name>
        <sex/>
    </student>
</studentlist>

六、DTD中属性的定义

  语法:

  <!ATTLIST 元素名称 属性名称 属性类型 默认值>

   说明:

  ATTLIST:属性列表关键字。

  元素名称:要修饰的元素名称。

  属性名称:元素谁能够的名称。

  属性类型:CDATA、ID、IDREF/IDREFS、Enumerated。

  属性特点:#REQUIRED、#IMPLIED、#FIXED value、Default value。

  1)#REQUIRED:表示元素属性都必须有该属性的值,不能为空。

  2)#IMPLIED:表示元素属性可以忽略的值,可以为空。

  3)#FIXED value:表示元素属性必须为指定的固定值,固定值在value中指定。

  4)Default value:表示给指定元素默认值,不需要使用Default,直接指定默认值即可。

  属性类型:

  1、CDATA属性

  表示属性值可以是任何字符,包括数字和中文。

  示例:声明student属性name值为任何文本,必须有值

  DTD示例:

  <!ATTLIST student name CDATA #REQUIRED>

  XML示例:

  <student name="zhangsan" />

  2、ID属性

  表示属性取值必须是唯一的

  示例1:对studentid属性设置为唯一值。并且必须有值。

  DTD示例:

  <!ATTLIST student id ID #REQUIRED>

  XML示例:

  <student id="10086" />

  示例2:同时对多个属性设置属性,对student的id

  DTD示例:

  <!ELEMENT student (id,name)>

  <!ATTLIST student

    id ID #REQUIRED

    name CDATA #REQUIRED>

  XML示例:

  <student id="10086" name="zhangsan"></student>

  3、IDREF/IDREFS

  IDREF:表示该属性的值指向其他地方声明的ID类型的值。

  IDREFS:同IDREF,但是可以由空格分开多个引用。

  示例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE categories [
    <!ELEMENT categories (category*)>
    <!ELEMENT category (category*)>
    <!ATTLIST category
        id ID #REQUIRED
        name CDATA #REQUIRED
        parentid IDREF #IMPLIED>  <!--子类中的parentid引用外层的id-->
]>
<categories>
    <category id="c_1" name="电器">
        <category id="c_10" parentid="c_1" name="电视"/>
        <category id="c_11" parentid="c_1" name="冰箱"/>
        <category id="c_12" parentid="c_1" name="冰箱"/>
    </category>
    <category id="c_2" name="手机">
        <category id="c_20" parentid="c_2" name="智能手机"/>
        <category id="c_21" parentid="c_2" name="非智能手机"/>
    </category>
</categories>

  4、Enumerated

  枚举,预定义一些值,属性的值必须在所列出的值得范围类。

  DTD示例:学生性别只能是男或者女

  <!ATTLIST student sex (男|女) #REQUIRED>

  XML示例:

  <student sex="男">

七、实体

  在DTD中定义的常量,在XML中使用。用于定义在XML中多次出现的值。

  实体可以分为内部实体和外部实体:

  1、内部实体

  语法:

  <!ENTITY 实体名 "实体值">

  示例:定义

  DTD示例:  

  <!ENTITY writer "Bill Gates">
  <!ENTITY copyright "Copyright W3School.com.cn">

  XML示例:

  <author>&writer;&copyright;</author>

  注意:一个实体由三部分构成: 一个和号 (&), 一个实体名称, 以及一个分号 (;)。

  2、外部实体

  语法:

  <!ENTITY 实体名称 SYSTEM "URI/URL">  

  DTD 例子:
  <!ENTITY writer SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd">
  <!ENTITY copyright SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd">
  XML 例子:
  <author>&writer;&copyright;</author>

时间: 2024-07-28 19:32:44

XML DTD验证的相关文章

DTD验证XML文档

DTD验证XML文档        1.DTD简介:DTD是Document Type Definition的缩写,即文档定义            1.1:DTD的内容包含:                    元素定义规则                    元素之间的关系规则                    属性的定义规则            1.2:DTD的作用如下:                    DTD使每个XML文件可以携带一个自身格式的描述          

dom4j解析xml时取消DTD验证

解决方式整合一下,就分两种: 1.用setFeature() SAXReader reader = new SAXReader();reader.setValidation(false); reader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);... 2.用setEntityResolver() SAXReader reader = new SAXReader

XML DTD

DTD Document Type Definition,文档类型定义, 格式良好:满足XML最低规范的 有效:通过DTD验证的文档称为有效 文档类型定义 <!DOCTYPE  根 SYSTEM "验证文档.dtd"> 外部DTD 内部DTD 空标记 ANY 混合元素 自定义一般实体 1.DTD如下: 2.XML实体定义如下: 高版本浏览器中实体定义方式xml内部 属性 格式: <!ATTLIST  元素名称  属性的名称  数据类型  附加条件> TIP:声明

udp开发-dtd验证,dom解析

//博主太懒了,并没有提供范例程序 6.基于UDP开发 (1)发送方:socket->准备数据包 DatagramSocket docket = new DatagramSocket(); //准备数据包, InetAddress ia = InetAddress.getByName("对方的ip地址"); DatagramPacket dp = new DatagramPacket(str.getBytes(),字节数足额长度,地址,端口号); //发送数据 Socket.se

XML Schema验证

XML Schema验证 一.什么事Schema(XSD) XML Schema是微软定义的一套用来验证XML技术.是一套预先规定的XML元素和属性创建的,这些元素和属性定义了XML文档的结构和内容模式. DTD的局限性: 1.DTD不遵循XML语法. 2.DTD的数据类型有限,与数据库类型不一致. 3.DTD不可以扩展. 4.DTD是不支持命名空间的. Schema的优势: 1.Schema是一种XML语法结构,编写更加方便. 2.Schema可以支持数据类型. 3.Schema是可以扩展的.

XML&amp;DTD&amp;XML Schema学习

XML(eXtensible Markup Language)可扩展的标记语言.xml在web service编程中尤为重要.在网络传输中可以作为传输数据的载体.xml作为元语言, 它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的元语言. 它非常适合网络传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据.可以实现异构语言.异构平台之间的交互.XML 文档定义方式有:文档类型定义(DTD)和XML Schema.DTD(Document Type Defi

XML DTD详解

一个有效的XML文档必然是结构正规的,结构正规的XML文档不一定是有效的,即有效的是格式正规的一个子集. 本文详细介绍DTD,包括其对元素的定义,属性的定义,以及实体的定义. 元素的定义 DTD中的修饰符号: 这部分符号可以联系正则表达式的符号来记忆. 属性的定义 属性类型——CDATA 比如: <!ATTLIST title name CDATA #REQUIRED> 定义了一个属性,是属于title元素的,属性名叫name,类型是字符串(包括数字和中文),并且是一个必须要有的属性. 属性类

使用mybatis、Struts等框架编写配置文件时添加离线DTD验证

在使用mybatis.Struts等框架编写配置文件时,因配置文件是XML文件并且默认是用在线DTD验证的:若当前系统未联网,并且开发工具中并未集成所需DTD的验证文件时,就需手动设置本地DTD文件验证了. 以下以在mybatis中配置为例: 1.  打开配置文件如图: 复制:http://mybatis.org/dtd/mybatis-3-mapper.dtd 2.  获得DTD验证文件,直接在联网电脑浏览器上输入上步复制的网址:如http://mybatis.org/dtd/mybatis-

自定义基于XML的验证器

1 a.编写一个类,继承FieldValidatorSupport类. 2 b.在public void validate(Object object)编写你的验证逻辑 3 不符合要求的就向fieldErrors中放消息 4 String fieldName=getFieldName(); 5 String fieldValue=(String) getFieldValue(fieldName, object); 6 c.一定注册你的验证器才能使用在src底下建立validators.xml定义