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)>

为什么使用 DTD

  1. 通过 DTD,每一个 XML 文件均可携带一个有关其自身格式的描述。
  2. 通过 DTD,独立的团体可一致地使用某个标准的 DTD 来交换数据。
  3. 应用程序也可使用某个标准的 DTD 来验证从外部接收到的数据。
  4. 使用 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;&copyright;</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;&copyright;</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> 
posted @ 2017-11-24 15:28  CodingSwallow  阅读(1100)  评论(0编辑  收藏  举报