一、认识XML

参考:尚学堂-XML技术视频

一 xml

1.1 简介

  • eXtensible Markup Language ,可扩展标记语言,是一种标记语言
  • 是一种非常灵活的语言,没有固定的标签,所有的标签都可以自定义
  • 通常,xml用于信息的记录和传递。也经常用于作配置文件
image.png

1.2 格式良好的xml

  1. 声明信息,用于描述xml的版本和编码方式

2.xml有且仅有一个根元素
3.xml是大小写敏感的
4.标签成对的,而且要正确嵌套
5.属性值要要使用双引号

1.3 有效的xml

  • 首先格式良好
  • 使用DTD和XSD(xml Schema) 定义语义约束

二 使用DTD

2.1 简介

Document Type Definition 文档类型定义

DTD可以分为两种,内部DTD,外部DTD

2.2 使用

2.2.1 内部DTD

  • 内部的 DOCTYPE 声明

  • 元素声明语法

  • 数量词

    • +:表示出现1次或多次,至少一次
    • ?:表示出现0次或1次
    • *:出现任意次
  • 属性声明语法

    • 属性类型:CDATA,表示字符数据(character data)
    • 默认值:
      • #REQUIRED,表示必须出现
      • #IMPLIED,表示不是必须的

范例




    
    
    
    
    
]>

    
        java编程
        zhuc
        120
    
    
        厨房宝典
        小明
        20
    

注意点:

  1. 元素和(之间要有空格
  2. PCDATA和CTATA的区别

PCDATA
PCDATA 的意思是被解析的字符数据(parsed character data)。可把字符数据想象为 XML 元素的开始标签与结束标签之间的文本。PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。文本中的标签会被当作标记来处理,而实体会被展开。不过,被解析的字符数据不应当包含任何 & < > 字符;需要使用 & < > 实体来分别替换它们。

CDATA
CDATA 的意思是字符数据(character data)。CDATA 是不会被解析器解析的文本。在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。
几个实体引用字符:
< <
> >
& &
" "
' '

2.2.2 外部DTD

*1.创建一个dtd文件








2.创建一个文件



    
        java编程
        zhuc
        120
    
    
        厨房宝典
        小明
        20
    

3.引入
格式






    
        java编程
        zhuc
        120
    
    
        厨房宝典
        小明
        20
    

三 xml的命名空间

参考:http://www.w3school.com.cn/xml/xml_namespaces.asp

在 XML 中,元素名称是由开发者定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突。
当两个含有相同元素名的XML 文档被一起使用时,XML 解析器无法确定如何处理这类冲突。

3.1 使用前缀来避免命名冲突

例如:


   
   Apples
   Bananas
   



   African Coffee Table
   80
   120

现在,命名冲突不存在了,这是由于两个文档都使用了不同的名称来命名它们的

元素 ()。
通过使用前缀,我们创建了两种不同类型
元素。

3.2 使用命名空间(Namespaces)


   
   Apples
   Bananas
   



   African Coffee Table
   80
   120

与仅仅使用前缀不同,我们为

标签添加了一个 xmlns 属性,这样就为前缀赋予了一个与某个命名空间相关联的限定名称。

3.3 XML Namespace (xmlns) 属性

XML 命名空间属性被放置于元素的开始标签之中,并使用以下的语法:

xmlns:namespace-prefix="namespaceURI"

当命名空间被定义在元素的开始标签中时,所有带有相同前缀的子元素都会与同一个命名空间相关联。
注释:用于标示命名空间的地址不会被解析器用于查找信息。其惟一的作用是赋予命名空间一个惟一的名称。不过,很多公司常常会作为指针来使用命名空间指向实际存在的网页,这个网页包含关于命名空间的信息。

3.4 默认的命名空间(Default Namespaces)

xmlns="namespaceURI"//没有了namespace-prefix

这个 XML 文档携带着某个表格中的信息:

Apples Bananas

四 schema

参考:http://www.w3school.com.cn/schema/index.asp

XML Schema是DTD的替代者,更复杂,但功能也更强大
XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD)。

4.1 什么是 XML Schema?

  • 定义可出现在文档中的元素
  • 定义可出现在文档中的属性
  • 定义哪个元素是子元素
  • 定义子元素的次序
  • 定义子元素的数目
  • 定义元素是否为空,或者是否可包含文本
  • 定义元素和属性的数据类型
  • 定义元素和属性的默认值以及固定值

XML Schema 是 DTD 的继任者
理由如下:

  • XML Schema 可针对未来的需求进行扩展
  • XML Schema 更完善,功能更强大
  • XML Schema 基于 XML 编写
  • XML Schema 支持数据类型
  • XML Schema 支持命名空间

4.2 dtd对比schema

简单的xml文件



George
John
Reminder
Don't forget the meeting!


DTD 文件







XML Schema





    
      
    
    
    
    
      
    



对 XML Schema 的引用




George
John
Reminder
Don't forget the meeting!

4.3 元素

元素

元素是每一个 XML Schema 的根元素
元素可包含属性。一个 schema 声明往往看上去类似这样:


 


...
...

代码解释:

xmlns:xs="http://www.w3.org/2001/XMLSchema"

显示 schema 中用到的元素和数据类型来自命名空间 "http://www.w3.org/2001/XMLSchema"。同时它还规定了来自命名空间 "http://www.w3.org/2001/XMLSchema" 的元素和数据类型应该使用前缀 xs:


targetNamespace="http://www.w3school.com.cn" 

显示被此 schema 定义的元素 (note, to, from, heading, body) 来自命名空间: "http://www.w3school.com.cn"。


xmlns="http://www.w3school.com.cn" 

指出默认的命名空间是 "http://www.w3school.com.cn"。


elementFormDefault="qualified" 

指出任何 XML 实例文档所使用的且在此 schema 中声明过的元素必须被命名空间限定。

XSD 简易元素

简易元素指那些仅包含文本的元素。它不会包含任何其他的元素或属性。
不过,“仅包含文本”这个限定却很容易造成误解。文本有很多类型。它可以是 XML Schema 定义中包括的类型中的一种(布尔、字符串、数据等等),或者它也可以是您自行定义的定制类型。
您也可向数据类型添加限定(即 facets),以此来限制它的内容,或者您可以要求数据匹配某种特定的模式。

定义简易元素


简易元素的默认值和固定值




XSD 属性

简易元素无法拥有属性。假如某个元素拥有属性,它就会被当作某种复合类型。但是属性本身总是作为简易类型被声明的。

声明属性


属性的默认值和固定值同元素规则
可选的和必需的属性


4.4 XSD 限定 / Facets

限定(restriction)用于为 XML 元素或者属性定义可接受的值。对 XML 元素的限定被称为 facet
对值的限定
下面的例子定义了带有一个限定且名为 "age" 的元素。age 的值不能低于 0 或者高于 120:




  
    
    
  


 

等等

4.4 XSD 复合元素

有四种类型的复合元素:

  • 空元素
  • 包含其他元素的元素
  • 仅包含文本的元素
  • 包含元素和文本的元素

定义
第一种: 通过命名此元素,可直接对"employee"元素进行声明,就像这样:


  
    
      
      
    
  

第二种:"employee" 元素可以使用 type 属性,这个属性的作用是引用要使用的复合类型的名称:




  
    
    
  

4.5 targetNamespace、xsi:schemaLocation等等

参考:https://blog.csdn.net/freelk/article/details/80869439

整理总结:

  1. targetNamespace:本XML Schema文档中定义的元素是属于targetNamespace属性指定的命名空间(URI)下的。一般和xmlns的uri相等
  2. xmlns:默认命名空间。
    xmlns和targetNamespace指定的命名空间一致时。在默认命名空间下使用的元素(如:type="booksType")就有了定义。
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"一般时固定的,作用:告知xml文档解析器,用某个schema实例来验证该xml文档。这个URI指向一个xsd文档,该xsd的targetNamespace的值就是这个URI
  4. xsi:schemaLocation
    其语法是:schemaLocation=“{namespaceURI} {xsd名称}”
    其作用是告知解析器,schemaLocation指定的命名空间下的元素要用该xsd的schema来约束。就像该属性的名称的字面意义,确定schema的定位。
    如果要让该schema起到作用,需要在xml中使xmlns的URI和该xsd文档的targetNamespace的URI相同,且在schemaLocation中,namespaceURI的值一定要和该xmlns相同,也就是和xsd文件的targetNamespace相同,这样,解析器才能准确的知道在该xmlns下的元素要遵循哪个schema。
    也就是:xmlns=schemaLocation=xsd的targetNamespace
    5.将namespace(命名空间),当作java中的package。我们要使用元素,必须确定一个元素的全名(namespace+元素名)。很多我们没加命名空间名,时因为有默认命名空间

你可能感兴趣的:(一、认识XML)