XML,即可扩展标记语言。他可以跨越互联网上任何的平台,不受编程语言和操作系统的限制,可以说它是拥有互联网最高级别通行证的数据携带者。
XML特点:1、XML与操作系统、编程语言的开发平台都无关。2、实现不同系统之间的数据交互。
作用:1、配置应用程序和网站。2、可以跨平台进行数据交互。3、是Ajax技术的基石。
XML文档的声明是XML文档当中非常重要的一部分,一般写在XML文档的第一行,它是以“<?”开始以及以“?>”结束。前面写xml,中间加空格然后跟上
“version="1.0"”它是符合文档规范xml1.0版本的,后面有一个encoding,可以不写,不写默认为“UTF-8”
例如:
<?xml version="1.0" encoding="UTF-8"?>
在声明下面写根元素,对于根元素,每一个xml文档必须且只能有一个。它的开始是放在最前面,结束放在最后面。
元素是XML中最重要的组成部分,其实根元素也是元素。
例如:元素title
<title>XML编程</title><title>是该元素的开始标签,XML编程是该元素的内容,</title>是该元素的结束标签,开始标签和结束标签的区别在于结束标签在开始标签前多一个/
注意:所有的xml元素都必须有结束标签。xml标签对大小写敏感。xml必须正确嵌套。
元素命名规则:1、名称中可以包含字母、数字或者其他的字符。2、名称不能以数字或者标点符号开始。3、名称中不能含空格。
例如,一个简单的xml文件
<?xml version="1.0"?> <students> <student> <id>$100</id> <name>tong</name> </student> </students>空元素表示形式
<title></title> <title> </title> <title/>
属性的语法:<元素名属性名="属性值" 属性名="属性值"/>
<?xml version="1.0" encoding="UTF-8"?> <student id="S101"></student>
注意:属性值用双引号包裹。一个元素可以有多个属性。属性值中不能直接包含小于号、引号、和and符号等。
XML中5个预定义实体:<(<)、>(>)、&(&)、"(")、'(')。
如果XML文件中含有很多><&等符号,每个都需要使用预定义实体替换比较麻烦,因此我们可以使用CDATA节。
CDATA节,主要是将XML文档中的一些特殊内容给他转换成为是不需要我们XML文档区解析的内容,也就是,在CDATA节当中的所有的字符都被当成是元素字符的
数据,而不是xml文档里的标签。
语法:<![CDATA[要显示的字符]]>
<?xml version="1.0" encoding="UTF-8"?> <info> <description> <span style="white-space:pre"> </span><![CDATA[ <span style="white-space:pre"> </span>在XML文件中,<、>、&、'、"等符号必须使用相应的预定于字符表示。 ]]> </description> </info>
注释,语法:<!--注释内容-->,注意:注释中不能出现“--”。不要把注释方法标签中间。注释不能嵌套。
解析器分为两类,一类是非验证解析器(检查文档格式是否良好),另一类是验证解析器(使用DTD检查文档的有效性)。
如果两个相同元素存放在同一个xml文件中,我们可以使用命名空间将这两个元素进行区分
命名空间定义语法,xmlns:名称=“地址”;这个地址是唯一的。
例如:
<?xml version="1.0" encoding="UTF-8"?> <cameras xmlns:canon = "this is cannon" xmlns:nikon = "this is nikon"> <canon:camera prodId = "P663" name = "傻瓜相机"/> <nikon:camera prodId = "k29B3" name = "超级相机"/> </cameras>
DTD:是文档类型定义。DTD用来描述XML文档的结构,一个DTD文档包含:元素的定义规则(在DTD里面去定义要验证的xml文档里面能包含那些元素);元素之间的关系规则(就是这个元素它的父元素是谁?两个元素是上下层还是平行);属性的定义规则(DTD里,可以规定最终的xml文档里它的属性名是什么,属性值是什么类型。
DTD的作用:1、每个XML文件可以携带一个自身格式的描述。2、不同组织的人可以使用同一个通用的DTD用来交换数据。3、应用程序可以使用一个标准DTD校验外部接收的XML数据是否有效。
DTD文档的声明及引用:
内部DTD文档(Students.xml)他是和xml文档定义在同一个文档当中,这个xml文档当中既包含xml定义,又包含DTD的定义。
<!DOCTYPE根元素[定义内容]>;
例如:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE CCTV-6 [ <!ELEMENT CCTV-6 (电影+)> <!ELEMENT 电影 (名称,主演+,类型?,片长)> <!ELEMENT 名称 (#PCDATA)> <!ELEMENT 主演 (#PCDATA)> <!ELEMENT 类型 (#PCDATA)> <!ELEMENT 片长 (#PCDATA)> ]> <CCTV-6> <电影> <名称>霍元甲</名称> <主演>李连杰</主演> <类型>动作</类型> <片长>1小时35分钟</片长> </电影> <电影> <名称>宝贝计划</名称> <主演>成龙</主演> <主演>古天乐</主演> <片长>1小时40分</片长> </电影> </CCTV-6>外部DTD文档(Students.xmlStudents.dtd)所谓的外部就是DTD的定义和我们的xml文档时在不同的文件里面。
<!DOCTYPE 根元素 SYSTEM "DTD文件路径">;
例如:
首先看dtd文档定义
<!ELEMENT 家庭 (人+,家电*)> <!ELEMENT 人 EMPTY> <!ELEMENT 家电 EMPTY> <!ATTLIST 人 名字 CDATA #required 年龄 CDATA #required 性别 (男 | 女) "女" 住址 CDATA #FIXED "北京" 爱好 CDATA #IMPLIED > <!ATTLIST 家电 名称 CDATA #required 数量 CDATA #required >然后看xml文档使用
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE 家庭 SYSTEM "Family.dtd"> <家庭> <人 名字="郭大路" 性别="男" 年龄="25" 住址="北京"/> <人 名字="杨柳" 年龄="38" 爱好="做个教育家和伟人"/> <家电 名称="彩电" 数量="3"/> </家庭>
内外部DTD文档结合
<!DOCTYPE 根元素 SYSTEM "DTD文件路径" [定义内容]>
外部dtd文档定义
<!ELEMENT poem (author,title,content)> <!ELEMENT author (#PCDATA)>xml文档定义
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE poem SYSTEM "poem.dtd" [ <!ELEMENT title (#PCDATA)> <!ELEMENT content (#PCDATA)> ]> <poem> <authour>王维</authour> <title>鹿柴</title> <content>空山不见人,但闻人与声。返景入深林,复照青苔上。</content> </poem>
下面看dtd具体定义
元素定义语法:<!ELEMENT 元素名称 元素类型>。
元素类型:
EMPTY-该元素不能包含子元素和文本,但可以有属性。
例如:
<!ELEMENT 人 EMPTY>则符合该dtd格式的xml元素是
<家> <人 名字="小明" 年龄="12"/> </家>注意:这个人元素元素内容为空,但可以有属性。
#PCDATA-可以包含任何字符数据,但是不能在其中包含任何子元素。
例如:
<!ELEMENT 人 (#PCDATA)>则符合该dtd格式的xml元素是
<家> <人 年龄="12">小刚</人> </家>
纯元素类型-只包含子元素,并且子元素外没有文本。
符号的用途:
()用来给元素分组。
|在列出的对象中选择一个。
,对象必须按指定的顺序出现。
*该对象允许出现0到任意多次。
?该对象可以出现,但只能出现0到一次。
+该对象最少出现一次,可以出现多次。
注意:+*?为基数操作符,若没有基数操作符,则表示必须有且仅有一个子元素。
具体示例可以看上述内部dtd定义,这里不再赘述。
ANY-该元素可以包含任何在DTD中定义的元素内容。
DTD中定义属性语法:<!ATTLIST 元素名称 属性名称 属性类型 属性特点>
属性类型:
CDATA(属性的值可以是任何字符)
<!ATTLIST 木偶 姓名 CDATA #required >
ID(表示该属性的值是唯一的)
<!ATTLIST 公司职员 编号 ID #required 姓名 CDATA #required >
IDREF/IDREFS(IDREF表示它的值要指向文档中其他地方声明的ID。IDREFS表示将多个值指向文档中其他位置声明的ID。多个ID用空格隔开。注意:在属性里面一定要先有ID,然后才能定义IDREFS)
ID与IDREF和IDREFS可以理解为数据库中的主键和外键
例如,家庭中有父母和孩子,孩子的IDREFS指向其父母
<!ELEMENT 家庭 (人+)> <!ELEMENT 人 EMPTY> <!ATTLIST 人 relID ID #required parentID IDREFS #IMPLIED name CDATA #required >满足该dtd的xml文档为:
<家庭> <人 relID="P_1" name = "父亲"/> <人 relID="P_2" name = "母亲"/> <人 relID="P_3" parentID="P_1 P_2" name = "孩子"/> </家庭>
Enumerated(预定义一些值,属性的值必须在所列出的值的范围内)。
<!ATTLIST person 性别 (男|女) #required>
表明person元素中的性别属性只能是男或女。
属性特点:
#required(元素的所有实例都必须有该属性的值,即元素里的文本必须填写。)
<!ATTLIST person number CDATA #required>表明person元素中的number属性是CDATA类型的,并且这个number必须填写。
#IMPLIED(表示该属性的值可以被忽略的)
#FIXED "value"(元素中该属性的值必须为指定的固定值,这个固定值是之前指定的,即为value的值。)
Default "value"(为属性提供一个默认值)。
<!ATTLIST 元素名称 属性名称 属性类型 "value">
当一个xml文档中反复出现一个文本,而且这个文本需要多次修改,这时我们可以使用实体。
实体是在DTD中定义,在xml中使用。实体的定义<!ENTITY 实体名 "实体值">
使用的时候是“&实体名称;”
实体定义:
<!ELEMENT name "小红">实体使用:
<author>&name;</author>
对xml进行验证还可以用到Schema技术。
Scheme:是微软定义的一套用来验证xml文档的技术。XML Scheme是用一套预先规定的XML元素和属性创建的,这些元素和属性定义了
XML文档的结构和内容模式。
XML Scheme规定XML文档实例的结构和每个元素/属性的数据类型。
DTD的局限性:DTD不遵循XML语法(写XML文档时候用一种语法,写DTD的时候用另外一种语法);DTD数据类型有限(与数据库数据类型不一致);DTD不可扩展;DTD不支持命名空间。
Schema的新特性:Schema基于XML语法;Schema大大扩充了数据类型,可以自定义数据类型;Schema支持属性组。
Schema实际上就是一个xml文档,对于一个xml文档,首先要有声明,其次要有根元素。
Schema文档的根元素是“xs:schema”。
Schema数据类型分为:简单类型、复合类型(通过complexType定义)。简单类型又分为:内置的数据类型(基本的数据类型和扩展的数据类型)和用户自定义(通过SimpleType定义)简单类型。
用于定义元素和属性的元素:element,attribute、group、attributeGroup。
用于定义简单类型:simpleType。
用于定义复杂类型:complexType。
用于进行类型约束:choice、list、sequence、restriction。
声明一个元素:
属性name、type、ref、minOccurs、maxOccurs
name是将来要限制xml文档元素的名字,type是元素类型,是元素里包含数据类型。minOccurs和maxOccurs是该元素在xml文档中最大和最小出现次数。ref是当元素嵌套层数较多时,我们可以在嵌套外部使用,在该元素出现的位置使用ref调用。
例如:
<xs:element name="dog" type="xs:string" minOccurs="0" maxOccurs="3"/>
如果在xml文档中我们要去将几个元素捆绑一起出现,将一组元素声明组合在一起,使用group。
语法:<xs:group name><xs:sequence></xs:sequence></xs:group>
其中<xs:sequence>是限制元素出现次数。
例如,在一个xml中要求以元素组的形式出现以下元素,学生姓名、班级。
<students> <student>jack</student> <class>1班</class> <student>tony</student> <class>2班</class> </students>我们可以做如下限定:
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:group name="sutdentGroup"> <xs:sequence> <xs:element name="student" type="xs:string"></xs:element> <xs:element name="class" type="xs:string"></xs:element> </xs:sequence> </xs:group> <xs:element name="students"> <xs:complexType> <xs:sequence> <xs:group ref="studentGroup"></xs:group> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
声明一个属性:<xs:attribute name=" " type="xs:string" use="require"/>
name是将来xml文档中要出现的属性名称,type是设置属性值的类型,use="required"表示该属性是必填项。
如下xml文档属性进行限制:
<school xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="E:\XML案例\student.xsd"> <student id="S101" name="jack"/> <teacher id="T101" name="tony"/> </school>将scheme文档定义为:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:attributeGroup name="message"> <xs:attribute name="id" type="xs:string"/> <xs:attribute name="name" type="xs:string"/> </xs:attributeGroup> <xs:element name="school"> <xs:complexType> <xs:sequence> <xs:element name="student"> <xs:complexType> <xs:attributeGroup ref="message"/> </xs:complexType> </xs:element> <xs:element name="teacher"> <xs:complexType> <xs:attributeGroup ref="message"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
simpleType元素,作用:定义一个简单类型,它决定了元素和属性值的约束和相关信息(主要用来限制包含文本的一些元素)。两种常用的约束:restriction(用于定义一个约束条件)、list(从列表中选取)。
例如限制学生年龄在18到30之间。我们可以定义一个简单类型数据。
<xs:simpleType name="stuAge"> <xs:restriction base="xs:int"> <xs:minExclusive value="18"></xs:minExclusive > <xs:maxInclusive value="50"></xs:maxInclusive> </xs:restriction> </xs:simpleType>
complexType,作用:定义一个复合类型,它决定了一组元素和属性值的约束和相关信息。常用的两种方式:sequence(给一组元素一个特定的序列)、choice(把一组属性声明组合在一起,以便可以被复合类型应用)。
例如:
<交通工具 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="student.xsd"> <自行车>捷安特</自行车> </交通工具>
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:element name="交通工具"> <xs:complexType> <xs:choice> <xs:element name="自行车" type="xs:string"></xs:element> <xs:element name="公交车" type="xs:string"></xs:element> <xs:element name="小汽车" type="xs:string"></xs:element> </xs:choice> </xs:complexType> </xs:element> </xs:schema>原文链接:https://www.f2er.com/xml/298254.html