知优码

您现在的位置是:首页 > WEB相关 > XML文档

XML文档

XML文档结构详解

知优码 2019-11-17XML文档
XML的学习目标:1)能用XML描述现实中的有层次关系的数据2)能使用程序读取到XML中表示的数据一、XML是什么?作用是什么?1.XML是指可扩展标记语言,用户自定义的标签,是相对于HTML来讲的

XML的学习目标:

1)能用XML描述现实中的有层次关系的数据

2)能使用程序读取到XML中表示的数据

一、XML是什么?作用是什么?

1.XML是指可扩展标记语言,用户自定义的标签,是相对于HTML来讲的(标签预定义的)。

2.XML被设计的宗旨是表示数据(传输和存储数据)。HTML是用来显示数据的。目前经常使用的XML版本是1.0。

3.XML除了表示数据外。在实际的企业开发中,主要用XML作为程序的配置文件。

(在一个软件系统中,通过XML配置文件可以提高系统的灵活性。即程序的行为是通过XML文件来配置的,而不是硬编码。

4.XML是一种通用的数据交换格式。

二、XML文档的组成

一个XML文件一般由以下几个部分组成:

1.文档声明

作用:用于标识该文档是一个XML文档

注:声明必须出现在文档的第一行(之前连空行都不能有,也不能有任何的注释)

最简单的XML声明:<?xml version="1.0"?>

声明中的encoding属性:说明解析当前XML文档时所使用的编码。默认是UTF-8

<?xml version="1.0" encoding="GB2312"?>

声明中的standalone属性:说明XML文档是否是独立的。

<?xml version="1.0" standalone="yes"?>

2.元素

XML元素指XML文件中出现的标签。

一个标签分为起始和结束标签。结束标签不能省略。

eg:包含标签体<mytag>apple</mytag>

   不包含标签体<mytag/>

一个XML文档必须且只能有一个根标签,其他标签都是这个根标签的子标签或孙标签。

XML文档中不会忽略回车和换行及空格(注:在XML文档中不使用回车换行等,可提高在网络上传输效率)

标签的命名规范:元素(标签)的名称可以包含字母、数字、减号、下划线和英文句点。严格区分大小写。

3.元素的属性

一个元素可以有多个属性,每个属性都有它自己的名称和取值。

元素的属性取值一定要用引号引起来(单引号或双引号)

在XML中,标签属性所代表的信息也可以被改成用子元素的形式来描述。

4.注释

<!--这是注释-->

注释不能嵌套

5.CDATA区

作用:把CDATA中的内容都当做是文本。

语法:

<![CDATA[

         文本内容

]]>

例如:

<![CDATA[

         <福建>

                   <厦门></厦门>

                   <福州></福州>

         </福建>

]]>

6.特殊字符

&  -->  &amp;

<   -->  &lt;

>  -->  &gt;

"  -->  &quot;

'  -->  &apos;

7.处理指令(PI)

作用:用来指挥软件如何解析XML文档。

语法:必须以"<?"作为开头,以"?>"作为结尾。

 

<?xml version="1.0"?>

 

demo.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="s.css"?>
<size>
    <big></big>
    <medium></medium>
    <small></small>
</size>
s.css
big{
    font-size:400px;
    color:red;
}
medium{
    font-size:100px;
    color:blue;
}
small{
    font-size:40px;
    color:green;
}

三、XML约束

XML技术中,可以编写一个文档来约束一个XML的书写规范,这个文档称之为约束。

1.格式良好的XML文档:符合XML语法的。

2.有效的XML文档:遵循约束规范的。

格式良好的不一定是有效的,有效的必定格式良好。

四、DTD的基本语法

DTD:文档类型定义

作用:约束XML的书写规范。

DTD文件保存到磁盘时,必须使用UTF-8编码

1.引入外部的DTD文档来约束当前的XML文档

DTD文件在本地:<!DOCTYPE 根元素名称 SYSYTEM "DTD文件的路径">

DTDT文件在网络上:<!DOCTYPE 根元素名称 PUBLIC "DTD名称" "DTD的路径URL">

2.定义元素

语法:<!ELEMENT 元素名称 使用规则>

使用规则:

(#PCDATA):指示元素的主体内容只能是普通的文本。

EMPTY:指示元素不能有主体内容。

ANY:用于指示元素的主体内容为任意类型

(子元素):指示元素中包含的子元素

         如果子元素用逗号分开,说明必须按照声明顺序去编写XML文档

         如果子元素用“|”分开,说明任选其一

         用+、*、?来表示元素出现的次数

         如果元素后面没有+、*、?表示必须且只能出现一次

         +:表示至少出现一次,一次或多处

         *:表示可有可无,零次、一次或多处

         ?:表示可有可无,有的话只能有一次。

3.定义属性

语法:<!ATTLIST 元素名

                            属性名1 属性值类型 设置说明

                            属性名2 属性值类型 设置说明>

属性值类型:

                            CDATA:说明该属性的取值为一个普通文本

                            ENUMERATED (DTD没有此关键字)

                                     语法:<!ATTLIST 元素名称 (值1|值2)  "值1">

                            ID:属性的取值不能重复

设置说明:

                   #REQUIRED:表示该属性必须出现

                   #IMPLIED:表示可有可无

                   #FIXED:表示属性的取值为一个固定值

                                     语法:#FIXED "固定值"

                                     直接值:表示属性的取值为该默认值

4.定义实体(ENTITY)

实体的定义分为引用实体和参数实体

引用实体:

                   作用:在DTD中定义,在XML中使用

                   语法:<!ENTITY 实体名称 "实体内容">

                   在XML中使用:&实体名称;

参数实体:

                   作用:在DTD中定义,在DTD中使用

                   语法:<!ENTITY % 实体名称 "实体内容">

                   在DTD中使用:%实体名称;

eg:

instance.dtd

<!ELEMENT TVSCHEDULE (CHANNEL+)>
<!ELEMENT CHANNEL (BANNER,DAY+)>
<!ELEMENT BANNER (#PCDATA)>
<!ELEMENT DAY (DATE,(HOLIDAY|PROGRAMSLOT+)+)>
<!ELEMENT HOLIDAY (#PCDATA)>
<!ELEMENT DATE (#PCDATA)>
<!ELEMENT PROGRAMSLOT (TIME,TITLE,DESCRIPTION?)>
<!ELEMENT TIME (#PCDATA)>
<!ELEMENT TITLE (#PCDATA)> 
<!ELEMENT DESCRIPTION (#PCDATA)>
<!ATTLIST TVSCHEDULE NAME CDATA #REQUIRED>
<!ATTLIST CHANNEL CHAN CDATA #REQUIRED>
<!ATTLIST PROGRAMSLOT VTR CDATA #IMPLIED>
<!ATTLIST TITLE RATING CDATA #IMPLIED>
<!ATTLIST TITLE LANGUAGE CDATA #IMPLIED>

instance.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE TVSCHEDULE SYSTEM "instance.dtd">
<TVSCHEDULE NAME="XXTV">
    <CHANNEL CHAN="YY">
        <BANNER>AAA</BANNER>
        <DAY>
            <DATE>2013-04-13</DATE>
            <PROGRAMSLOT>
                <TIME>14:57</TIME>
                <TITLE LANGUAGE="ZH">TT</TITLE>
                <DESCRIPTION>DD</DESCRIPTION>
            </PROGRAMSLOT>
        </DAY>
    </CHANNEL>
</TVSCHEDULE>

五、Schema

1.Schema简介

1)XML Schema是一种用于定义和描述XML文档结构与内容的模式语言。

2)XML Schema文件自身就是一个XML文件,但它的扩展名通常为.xsd。

3)一个XML Schema文档通常称为模式文档(约束文档),遵循这个文档书写的XML文件称为实例文档

2.快速入门案例

根据book.xsd编写book.xml

book.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
                      targetNamespace="http://www.lsl.cn"
                      elementFormDefault="qualified">
    <xs:element name='书架' >
        <xs:complexType>
            <xs:sequence maxOccurs='unbounded' >
                <xs:element name='书' >
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name='书名' type='xs:string' />
                            <xs:element name='作者' type='xs:string' />
                            <xs:element name='售价' type='xs:string' />
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

book.xml

<?xml version="1.0" encoding="UTF-8"?>
<lsl:书架 xmlns:lsl="http://www.lsl.cn"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.lsl.cn book.xsd">
        <lsl:>
            <lsl:书名>JavaSE</lsl:书名>
            <lsl:作者>张三</lsl:作者>
            <lsl:售价>80.0</lsl:售价>
        </lsl:书>
</lsl:书架>

分析:(根据xsd约束文档编写xml的步骤)

a、首先看Schema文档,找到根元素

<?xml version="1.0" encoding="UTF-8"?>
<书架></书架>

b、思考:书架来自于哪个名称空间?看Schema文档,targetNamespace就是名称空间。

用xmlns关键字(xmlns名称空间声明)来声明我的元素来自哪个名称空间(xmlns:xml namespace)

<?xml version="1.0" encoding="UTF-8"?>
<lsl:书架 xmlns:lsl="http://www.lsl.cn"></lsl:书架>

c、思考:名称空间与哪个xsd文件对应呢?使用schemaLocation关键字来关联名称空间和xsd的对应关系

<?xml version="1.0" encoding="UTF-8"?>
<lsl:书架 xmlns:lsl="http://www.itcast.cn" 
            schemaLocation="http://www.lsl.cn book.xsd"></lsl:书架>

d、schemaLocation来自哪里?来自一个标准的名称空间

         (http://www.w3.org/2001/XMLSchema-instance)

<?xml version="1.0" encoding="UTF-8"?>
<lsl:书架 xmlns:lsl="http://www.itcast.cn" 
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://www.lsl.cn book.xsd">
</lsl:书架>

3.引用两个Schema文件

company.xsd

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
targetNamespace="http://www.example.org/company" 
elementFormDefault="qualified">
    <element name="company">
        <complexType>
            <sequence>
                <element name="employee">
                    <complexType>
                        <sequence>
                            <any></any>
                            <element name="name"></element>
                        </sequence>
                        <attribute name="age" type="int"></attribute>
                    </complexType>
                </element>
            </sequence>
        </complexType>
    </element>
</schema>

department.xsd

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/department"
elementFormDefault="qualified">
    <element name="name" type="string"></element>
</schema>

company.xml

<?xml version="1.0" encoding="UTF-8"?>
<company xmlns="http://www.example.org/company"
    xmlns:dept="http://www.example.org/department"
    xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.example.org/company
 company.xsd http://www.example.org/department department.xsd"
>
    <employee age="20">
        <dept:name>人力资源部</dept:name>
        <name>小刘</name>
    </employee>
</company>