加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

通用数据XML

发布时间:2020-12-15 22:32:54 所属栏目:百科 来源:网络整理
导读:XML,即可扩展标记语言。他可以跨越互联网上任何的平台,不受编程语言和操作系统的限制,可以说它是拥有互联网最高级别通行证的数据携带者。 XML特点:1、XML与操作系统、编程语言的开发平台都无关。2、实现不同系统之间的数据交互。 作用:1、配置应用程序

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个预定义实体:&lt;(<)、&gt;(>)、&amp;(&)、&quot;(")、&apos;(')。

如果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>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读