说起XML,大家都会想起HTML,连接中是我HTML的简单总结,这篇我将重点总结一下XML的基础知识。
首先:HTML(HyperText Markup Language),即超文本标记语言,是用于描述网页文档的一种描述标记语言。而XML(Extensible Markup Language),是一种类似HTML的可扩展标记语言,它的标记都是自定义的,其设计宗旨是包含和传输数据。
下边我们看一下他们的历史发展:
这里我简单列一下HTML和XML的差异:
1,XML不是用来替换HTML的技术;
2,XML和HTML为不同的目的而设计;
3,XML设计的核心是包含和传输数据,而HTML设计的核心是显示数据。
下边我来重点总结一下XML的相关知识:
先看一个XML的实例:
从上边这个实例,我们可以看出XML的组成:声明,标签,元素,子元素,父元素,注释等等。
这里重点说一下XML中字符和实体应用:
还有一种方法就是使用CDATA:<![CDATA[文本内容]]>。文本内容就是可以直接使用。
例如:
再者,我们说一下XML的语法要求:
1,XML文档必须有一个顶层元素,即文档元素,所有其他元素必须嵌入在文档元素中。
2,元素嵌套要正确,即如果一个元素在另一个元素中开始,那么必须在同一个元素中结束。
4,起始标记中的元素类型名必须与相应结束标记中的名称完全匹配。
5,元素类型名区分大小写。
6,元素类型名称中可以包含字母,数字以及其他字母元素类型,也可以使用非英文字符,但名称 不能以数字或者符号“-”开头,另外,名称中不能包含空格和冒号“:”。
上边是XML语言本身的相关知识,下边我讲述一下XML的两种语法规则:XML文档是一种结构化的标记文档,XML文档结构有两种描述数据的方法,分别为文档类型定义(Document Type Definition,DTD)和Schema模式。
先说DTD:
1,DTD的概述:
DTD(Document TypeDefinition),定义了XML文件的结构,为XML文件提供了语法与规则,内容既可以定义在XML文件中,也可以定义在XML文件之外(分为内部DTD和内部DTD(效果一样)),使用XML进行数据教书的行业或组织可定义自己的DTD。
分类:
每个XML文档可单独定义的DTD,也可以推广为一个系统共享的公用DTD。
外部DTD,一个由权威机构制定的,提供给特定行业或公众使用哦的DTD。
语法:
<!ELEMENT NAMECONTENT>,说明:NAME表示一个标准的XML的标记名称,CONTENT为下边介绍的内容模型。
2,为什么要使用DTD:
(1),通过 DTD,您的每一个 XML 文件均可携带一个有关其自身格式的描述。
(2),通过 DTD,独立的团体可一致地使用某个标准的 DTD 来交换数据。
(3),而您的应用程序也可使用某个标准的 DTD来验证从外部接收到的数据。
(4),您还可以使用 DTD来验证您自身的数据。
总而言之就是给我们规章可循,使XML文件可以按照DTD很好的交换和表现。
3,内容模型介绍:
CONTENT |
解释 |
EMPTY |
如果一个元素的CONTENT被声明为EMPTY的话,表示该元素不能包含任何子元素和文本 |
ANY |
表示该元素其中可以包含任何本身有效的元素内容,也就是说,它能够包含在DTD其他位置已经声明过的元素。 |
#PCDATA |
表明该元素可以包含任何字符数据,但是不能在其中包含任何子元素。 |
子元素类型 |
表明元素可以包含一系列的子元素 |
混合模型 |
指元素既包含子元素,又包含已编译的字符数据。(以#PCDATA开始,后面是混合类型中可能出现的子元素类型,在右括号之后加符号“*”) |
一些符号的含义:
符号 |
符号类型 |
描述 |
示例 |
() |
括号 |
用来给元素分组 |
(古龙|金庸|梁羽生),(王朔|余杰),毛泽东 |
| |
竖条 |
表明在列出的对象中选择一个 |
(男人|女人) |
+ |
加号 |
表示该对象最少出现一次,可以出现多次 |
(成员+) |
* |
星号 |
表示该对象允许出现任意多次,也可以是零次 |
(爱好*) |
? |
问号 |
表示该对象可以出现,但只能出现一次 |
(菜鸟?) |
, |
逗号 |
表示对象必须按指定的顺序出现 |
(西瓜、苹果、香蕉) |
4,DTD属性:
(1),属性声明参数及说明
参数 |
说明 |
ATTLIST |
ATTLIST关键字用于定义元素所具有的属性 |
Element_name |
元素名称 |
Attribute_name |
元素所具有的属性名 |
Type |
属性的类型 |
Default_value |
属性的默认值 |
(2),属性类型:
类型 |
具体的含义说明 |
CDATA |
这个类型表明该属性只能包含字符数据, |
ID |
该属性的取值必须是唯一的。 |
IDREF,IDREFS |
这个属性的值实际上就象C++中的指针一样,它是一个指向文档中其他地方声明的ID值。所以如果具体的文档中该属性的取值和它所指向的ID值不匹配的话,就会返回错误。IDREFS和IDREF类似,但是可以具有由空格分隔的多个引用。 |
NMTOKEN,NMTOKENS |
NMTOKEN和CDATA非常类似,不同之处在于它是CDATA的一个子集。它所使用的字符必须是字母、数字、句点、破折号、下划线或冒号。NMTOKENS和NMTOKEN类似,不同之处在于它可以包含多个值,每个值之间用空格进行分隔 |
NOTATION |
|
POSTTION |
举例说明:上边一个XML例子的DTD文档。
- <!DOCTYPEResume
- [
- <!--说明Resume元素中包含子元素Name,Email,HomePage,Publication-->
- <!ELEMENTResume(Name,Publication)>
- <!--说明Name,Emal,HomePage元素只能包含字符数据,不能包含子元素-->
- <!ELEMENTName(#PCDATA)>
- <!ELEMENTEmail(#PCDATA)>
- <!ELEMENTHomePage(#PCDATA)>
- <!--说明Publication包含Book子元素-->
- <!ELEMENTPublication(Book)>
- <!ELEMENTBook(Title,Pages)>
- ]>
最后我们简单介绍一下Schema模式:
1,概述:Schema模式使用的是一种类似于XML的语言,该模式中既有全局声明也有局部声明。Schema模式具有一套完整的数据类型系统,以便对数据类型进行详细定义,Schema模式文档是一个独立于XML文档的文本文件,其扩展名为.xsd。
2,举例: