XML验证
合法的XML和形式良好的XML ?
拥有正确语法的 XML 被称为“形式良好”的 XML。
- 第一行是 XML 声明。它定义 XML 的版本 (1.0) 和所使用的编码 (ISO-8859-1 = Latin-1/西欧字符集)。
- XML 文档必须有根元素
- XML 文档必须有关闭标签
- XML 标签对大小写敏感
- XML 元素必须被正确的嵌套
- 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)>
为什么使用 DTD
- 通过 DTD,每一个 XML 文件均可携带一个有关其自身格式的描述。
- 通过 DTD,独立的团体可一致地使用某个标准的 DTD 来交换数据。
- 应用程序也可使用某个标准的 DTD 来验证从外部接收到的数据。
- 使用 DTD 来验证自身的数据。
DTD构建模块
构建模块有如下几种,所有的XML都是由其构成
- 元素
- 属性
- 实体
- PCDATA
PCDATA 的意思是被解析的字符数据(parsed character data)。
可把字符数据想象为 XML 元素的开始标签与结束标签之间的文本。
PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。文本中的标签会被当作标记来处理,而实体会被展开。不过,被解析的字符数据不应当包含任何 &、< 或者 > 字符;需要使用 &、< 以及 > 实体来分别替换它们。 - CDATA
CDATA 的意思是字符数据(character data)。
CDATA 是不会被解析器解析的文本。在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。
DTD元素
//声明一个元素
//grammer
<!ELEMENT 元素名称 类别>
<!ELEMENT 元素名称 (元素内容)>
//声明一个空元素
//grammer
<!ELEMENT 元素名称 EMPTY>
//eg:
<!ELEMENT br EMPTY>
//声明只有 PCDATA 的元素
//grammer
<!ELEMENT 元素名称 (#PCDATA)>
//eg:
<!ELEMENT from (#PCDATA)>
//声明带有任何内容元素
//grammer
<!ELEMENT 元素名称 ANY>
//eg:
<!ELEMENT note ANY>
//带有子元素(序列)的元素
//grammer
<!ELEMENT 元素名称 (子元素名称 1)>
<!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)>
//eg:
<!ELEMENT note (to,from,heading,body)>//后续子元素出现顺序一样
//声明只出现一次的元素
//grammer
<!ELEMENT 元素名称 (子元素名称)>
//eg:
<!ELEMENT note (message)>
//声明最少出现一次的元素
//grammer
<!ELEMENT 元素名称 (子元素名称+)>
//eg:
<!ELEMENT note (message+)>
//声明出现零次或多次的元素
//grammer
<!ELEMENT 元素名称 (子元素名称*)>
//eg:
<!ELEMENT note (message*)>
//声明出现零次或一次的元素
//grammer
<!ELEMENT 元素名称 (子元素名称?)>
//eg:
<!ELEMENT note (message?)>
//声明“非.../既...”类型的内容
//eg:
<!ELEMENT note (to,from,header,(message|body))>
//声明混合型的内容
//eg:
<!ELEMENT note (#PCDATA|to|from|header|message)*>
DTD属性
属性格式
<!ATTLIST 元素名称 属性名称 属性类型 默认值>
属性类型默认值请参考:http://www.w3school.com.cn/dtd/dtd_attributes.asp
DTD实体
什么是实体?
实体是用于定义引用普通文本或特殊字符的快捷方式的变量。
实体引用是对实体的引用。
实体可在内部或外部进行声明。
内部实体声明
//grammer
<!ENTITY 实体名称 "实体的值">
//DTD
<!ENTITY writer "Bill Gates">
<!ENTITY copyright "Copyright W3School.com.cn">
//XML
<author>&writer;©right;</author>
外部实体声明
//grammer
<!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;©right;</author>
XML Schema(XSD)
定义:是基于XML 的 DTD 替代者,描述 XML 文档的结构。
代码示例:
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
XML验证的更多相关文章
- Java工具类——通过配置XML验证Map
Java工具类--通过配置XML验证Map 背景 在JavaWeb项目中,接收前端过来的参数时通常是使用我们的实体类进行接收的.但是呢,我们不能去决定已经搭建好的框架是怎么样的,在我接触的框架中有一种 ...
- 雷林鹏分享:XML 验证
XML 验证 拥有正确语法的 XML 被称为"形式良好"的 XML. 通过 DTD 验证的XML是"合法"的 XML. 形式良好的 XML 文档 "形 ...
- 雷林鹏分享:XML 验证器
XML 验证器 使用我们的 XML 验证器来对您的 XML 文件进行语法检查. XML 错误会终止您的程序 XML 文档中的错误会终止您的 XML 应用程序. W3C 的 XML 规范声明:如果 XM ...
- struts2框架xml验证
struts2验证分为3步: 1.获取需要验证的信息,使用同名属性,提供getter,setter方法.然后框架使用反射将值自动注入. 2.对信息进行验证,成功失败作出对应的选择. xml验证和手动验 ...
- XML 验证器
XML 错误会终止您的程序 XML 文档中的错误会终止你的 XML 程序. W3C 的 XML 规范声明:如果 XML 文档存在错误,那么程序就不应当继续处理这个文档.理由是,XML 软件应当轻巧,快 ...
- Java使用Schema模式对XML验证
XML允许创作者定义自己的标签,因其灵活的特性让其难以编写和解析.因此必须使用某种模式来约束其结构.目前最流行的这种模式有两种:DTD和SCHEMA,而后者以其独特的优势即将取代DTD模式,目前只是过 ...
- DTD -- XML验证
DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块. DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用. DTD简介 内部的 DOCTYPE 声明 假如 DTD 被包含在您的 ...
- XML 验证
拥有正确语法的 XML 被称为“形式良好”的 XML. 通过 DTD 验证的 XML 是“合法”的 XML. 形式良好的 XML 文档 “形式良好”或“结构良好”的 XML 文档拥有正确的语法. “形 ...
- 关闭英文拼写检查,关闭xml验证
http://blog.sina.com.cn/s/blog_70b623e4010173ce.html eclipse里面的许多设置对于国内开发者日常使用不太适用,反而会成为干扰.既然是完全可配置的 ...
随机推荐
- bzoj5328: [Sdoi2018]物理实验
果然我还是太菜了,爆了一天才过....隔壁肉丝都不知道喊了多少句哎╮(╯▽╰)╭我又A了什么傻逼题(然鹅就是wf和国集的题QWQ) 其实这个题就是个裸题,但是我就是不会... 这个题第一步就是明显的旋 ...
- SQL Server 数据库备份策略,第一周运行失败的原因
一般生产库,采用 每10分钟备份Log,每天备份Diff,每周备份Full的策略. 同时存在异地备份.异地备份可使用SQL Server本身的cmdshell存储过程,调用系统命令. 在为新数据库,建 ...
- js操作创建和操作外部样式的例子
兼容IE8及以上的IE浏览器1. [代码][HTML]代码 <!DOCTYPE html><html lang="en"> <head> ...
- pyspark 日期格式
1. 获取当前日期 from pyspark.sql.functions import current_date spark.range(3).withColumn('date',current_da ...
- BZOJ_2225_[Spoj 2371]Another Longest Increasing_CDQ 分治+树状数组
BZOJ_2225_[Spoj 2371]Another Longest Increasing_CDQ 分治+树状数组 Description 给定N个数对(xi, yi),求最长上升子 ...
- 【旧文章搬运】无Device的驱动如何通信
原文发表于百度空间,2009-07-14========================================================================== 标准的驱动 ...
- Task运行带参数的函数
Task<Int32> task = Task.Run(() => fun("s", 9)); 函数定义: private Int32 frun(string ...
- MongoDb Samus c# Find函数的使用说明
长活短说, 网上有一些是不对的 比如 Op.GreaterThan(...).LessThan(..) 不能这么用来表示 ( , ) 而应该这么用: var doc = new Document( a ...
- P3007 [USACO11JAN]大陆议会The Continental Cowngress(2-SAT)
简述:给出 n 个法案, m 头牛的意见, 每头牛有两个表决 格式为 “支持或反对某法案”, 每头牛需要至少满足一个表决, 不可能成立的话输出 IMPOSSIBLE, 否则输出方案, Y代表能, N代 ...
- IT兄弟连 JavaWeb教程 Servlet表单乱码问题
在使用原生的Servlet进行Web应用开发时经常会遇到一些中文乱码问题,造成乱码问题的原因只有一个:即客户端与服务端的字符编码不一致所导致的. 请求参数乱码问题 服务器端获取客户端传递过来的数据出现 ...