全面复习xml及验证机制DTD

    呵呵,就要面对着找工作了,我得复习以前学过的东东了,以便将来面试与笔试用到,当然最重要的就是巩固学过的知识。

 

复习1——认识

XML     extensible markup language(可扩展标记语言)。这里什么是标记呢?对于计算机来说,标记指计算机所能理解的信息符号。那XML是用来作用什么的呢的?简单的来说就是用来存储数据及数据的结构,以便计算机能够识别这些数据以及数据之间的关系。它的常用的用途就是在软件中作为一种配置文件。如我的所用的ssh中,xml形式的配置文件是很常见的。

 

DTD    Document Type Definition)。在XML技术里,可以编写一个文档来约束一个xml文档的书写规范,DTDXML的一种约束技术。那DTD到底是什么?用XML的一种约束机制来描述是不够的,DTDXML文件组成的一部分,DTDXML文件所扮演的角色就是定义xml文件的元素架构、元素标记和属性!

 

 

复习2——语法

 

XML语法    对于XML语法,其实是很简单的,它的语法就只有如下的几个部分。

1)文档声明

2)元素

3)属性

4)注释

5)CDATA区、特殊字符

6)处理指令(Processing instruction)

 

2.1.1    XML文档——声明

对于文档声明这是xml中的可选项,但如果要添加的话一定要位于文档的第一行。XML文档声明中包括版本声明(Version)、编码声明(encoding)和独立声明(standalone)。如果XML中有文档声明的话,那个版本声明(Version)是必须要加入那个声明的。下面就是一个完整的XML文档声明示例。

<?xml  version=1.0  encoding=utf-8  standalone=no ?>

 

(详解: encoding用来指定文档的字符编码   standalone用来指定文档的信息是否依赖于外部源的信息,其取值有yes/noyes是的是不依赖于外部源的信息,no这个值是默认的指的是依赖于外部源的信息,简单的说就是这份xml文档的内容是否依赖于另外一份文档。)

 

2.1.2   XML文档——元素

对于xml文档来说,其元素就是xml的标签,一个标签分为开始标签与结束标签,同时对于标签也可分为含内容体的标签与无内容体的标签。对于格式良好的标签必须只有一个根标签。

对于XML标签的书写规范就是:

1、区分大小写。   

2、不能以数据和下划线及xml开头。

3、不能包含空格及名称中加冒号。

 

2.1.3  XML文档——属性

Xml中标签有自己的属性,属性有自己的名称与值,属性值用单引号与双引号来表示,同时和xml文档有相同的命名规范。当然我们可以把标签的属性作为这个标签的子标签。

 

2.1.4  XML文档——注释

Xml中的注释示例为:<!--   注释内容   -->  。要补充的一点就是注释不能像XML元素那样有嵌套的形式。

 

2.1.5  XML文档——CDATA

Xml文档中如果有些内容我们想原封不动的输出,这里我们可以把这些内容放到XMLCDATA区中示例如:<![CDATA[原封不动的内容]]>。当然对于单个特殊字符,如果我们想要显示其原始的样式,那么我们也可用转义字符来进行表示。如下我就例出几个常用的转义字符。

特殊字符 转义字符

&         &amp;

<         &lt

>        &gt;

        &quot;

        &apos;

 

2.1.6  XML文档——处理指令(Processing instruction)

 处理指令是用来指挥解析引擎如何解析XML文档中的内容。处理指令必须以“<?”开头,以“?>”来作为结束。

 

 

 

 

 DTD语法      DTD的书写,其即可在一个单独的文件中进行编写也可在XML文件中进行编写。对于DTD的语法有如下几个部分。

1)元素定义

2)属性定义

3)实体定义

 

3.2.1 DTD约束——元素定义

DTD文档中使用ELELMENT来声明一个XML元素,语法格式如下所示:

<!ELEMENT 元素名称  元素类型>

详解:元素类型可是元素内容或类型,如是元素类型可直接写,类型有ANY/EMPTY

如  <!ELEMENT content ANY> 

    <!ELEMENT content EMPTY>

      如果是元素内容则要括号括起来。

        如  <!ELEMENT books  (book+) >  

            <!ELEMENT books (book*)> 

            <!ELEMENT books (book?)> 

            <!ELEMENT  books  (#PCDATA)>  

            <!ELEMENT book (name ,price)> 

            <!ELEMENT book (name|bookname)> 

     这里我们要请注意的符号为:

            *  ?表示该子元素出现0或一次

            + 表示该子元素出现1次或多次

            element1|element2 表示子元素非element1element2;

           用逗号来分割表示元素的顺序要依括号中的顺序;

 

3.2.2   DTD约束——属性定义

DTD中,我们用ATTLIST(attribute list)来设置元素的属性,语法格式如下所示:

<!ATTLIST 元素名

属性1  属性值类型   设置说明   默认值

属性2  属性值类型   设置说明   默认值

........

>

属性类型描述

类型描述
CDATA 值为字符数据 (character data)
(en1|en2|..) 此值是枚举列表中的一个值
ID 值为唯一的 id
IDREF 值为另外一个元素的 id
IDREFS 值为其他 id 的列表
NMTOKEN 值为合法的 XML 名称
NMTOKENS 值为合法的 XML 名称的列表
ENTITY 值是一个实体
ENTITIES 值是一个实体列表
NOTATION 此值是符号的名称
xml: 值是一个预定义的 XML 值

 

 

设置描述

 

解释

属性的默认值

#REQUIRED

属性值是必需的

#IMPLIED

属性是非必需的

#FIXED VALUE

属性值是固定的

Value

直接写一个默认值

 

示例

<!ATTLIST  liang  

 

id   ID  #REQUIRED  

age  CDATA  #REQUIRED

tel   CDATA  #IMPLIED

alias  CDATA  #FIXED  liang01

love     (lina|yuanhong|kula) kula

     >

细述:属性id的属性类型为ID,则id的取值在其文档中其值必需是唯一的,要以字母或下划线开始不能有空白。love取值为lianyuanhongkula中的一个,默认为kula(呵呵)。

 

3.2.2   DTD约束——实体定义

实体其实就是用一个变量来引用一个值,实体的定义类型有引用实体与参数实体。其格式如下:

 <!ENTITY 实体名称  “实体内容”>

示例

<!ENTITY lover kula>

<!ATTLIST liang

lover  &lover>

  细述:在我们的属性是ENTITY类型时,我们首先要定义一个实体,格式是  <!ENTITY 实体名称  实体内容(这是一个引用实体),引用实体时我们用 &实体名称  这种形式来引用那个我们定义的实体,这样我们元素的liang lover属性的默认值就是kula。对于实体,还有一个参数实体的定义。格式是<!ENTITY  %实体名称  实体内容>。如<!ENTITY  %info_value  name,age>   引用方式如  <!ELEMENT  people (%info_value)>相当于(!ELEMENT  people  (name,age)>

原文地址:https://www.cnblogs.com/liangjingguo/p/3366999.html