JavaWeb学习笔记(XML语言)
知識點總結于崔希凡+王澤(廣陵散)的JavaWeb視頻教程,侵權請聯系刪除。
XML
- XML
- 簡介
- XML的應用
- XML常見應用
- XML的語法規則
- 文檔聲明
- 元素(標簽)定義
- 屬性定義
- 注釋
- 特殊字符
- CDATA區
- 處理指令
- 小結
- XML約束
- 概述
- DTD約束
- 使用DTD定義元素
- 使用DTD定義屬性
- 定義實體
- Schema約束
- XMLSchema文檔基本結構
- XMLSchema簡易元素和復雜元素
- XMLSchema復雜元素指示器
- 約束屬性
- 對XML Schema的引用
- 名稱空間的概念
- 使用名稱空間引入Schema
- 示例
XML
簡介
XML(eXtensible Markup Language): 指可擴展標記語言
- 標記型語言:html是標記型語言,XML也是使用標簽來操作的
- 可擴展:html里面的標簽是固定,每個標簽都有特定的含義例如:<h1> <br/> <hr/>,但是XML標簽可以自己定義,可以寫中文的標簽 例如:<person></person>、<貓></貓>
XML標簽沒有被預定義,需要用戶自行定義標簽。 - XML的用途:XML 被設計用來傳輸和存儲數據(XML也可顯示數據,但不是主要功能)。
- XML技術是W3C組織(World Wide Web Consortium萬維網聯盟)發布的,目前遵循的是W3C組織于2000年發布的XML1.0規范。
xml有兩個版本:1.0 1.1
使用都是1.0版本,(1.1版本不能向下兼容) - XML被廣泛認為是繼Java之后在Internet上最激動人心的新技術。
XML的應用
- XML語言出現的根本目的在于描述向上圖那種有關系的數據。
- XML是一種通用的數據交換格式。
- 在XML語言中,它允許用戶自定義標簽。一個標簽用于描述一段數據;一個標簽可分為開始標簽和結束標簽,在起始標簽之間,又可以使用其它標簽描述其它數據,以此來實現數據關系的描述。
- XML中的數據必須通過軟件程序來解析執行或顯示,如IE;這樣的解析程序稱之為Parser(解析器)。
XML常見應用
- 用于描述qq直接傳輸數據,使用xm格式進行描述,具有可讀性和可維護性
- XML技術除用于保存有關系的數據之外,它還經常用作軟件配置文件,以描述程序模塊之間的關系。(如Struts、Spring和Hibernate都是基于XML作為配置文件的)
- 在一個軟件系統中,通過XML配置文件可以提高系統的靈活性。即程序的行為是通過XML文件來配置的,而不是硬編碼。
XML的語法規則
文檔聲明
- 在編寫XML文檔時,需要先使用文檔聲明來聲明XML文檔,且必須出現在文檔的第一行。(寫了文檔聲明之后,表示寫xml文件的內容)
最簡單的語法:<?xml version=“1.0”?> - 用encoding屬性說明文檔所使用的字符編碼。保存在磁盤上的文件編碼要與聲明的編碼一致,否則會出現亂碼。
因為碼表中存儲的相同字符的位置不一樣,如果按照GBK碼表存儲字符,假定“你好”位置分別在1和2,而通過UTF-8打開,因為UTF-8碼表中1 2位置上的字符是其它字符,所以會出現亂碼。
字符編碼強行將每一個字符對應一個十進制數字,再將十進制數字轉換成計算機理解的二進制,而計算機讀到這些1和0之后就會顯示出對應的文字或符號。
如:<?xml version=“1.0” encoding=“GB2312”?> - 用standalone屬性說明文檔是否獨立,即是否依賴其他文檔。
如:<?xml version=“1.0” standalone=“yes”?>
元素(標簽)定義
-
XML元素指XML文件中出現的標簽。一個標簽分為起始和結束標簽(不能省略)。一個標簽有如下幾種書寫形式:
1.包含標簽主體:<mytag>some content</mytag>
2.不含標簽主體:<mytag/> -
一個標簽中可以嵌套若干子標簽,但所有標簽必須合理的嵌套,不允許有交叉嵌套。
錯誤示例:<mytag1><mytag2></mytag1></mytag2> -
一個XML文檔必須有且僅有一個根標簽,其他標簽都是這個根標簽的子標簽或孫標簽。
-
對于XML標簽中出現的所有空格和換行,XML解析程序都會當作標簽內容進行處理。例如下面兩段內容的意義是不一樣的:
- <網址>www.itcast.cn</網址>
- <網址>
????www.itcast.cn
</網址>
由于在XML中,空格和換行都作為原始內容被處理,所以,在編寫XML文件時,使用換行和縮進等方式來讓原文件中的內容清晰可讀的“良好”書寫習慣可能要被迫改變。
-
一個XML元素可以包含字母、數字以及其它一些可見字符,但必須遵守下面的一些規范:
- 區分大小寫,例如,<P>和<p>是兩個不同的標記
- 不能以數字或"_" (下劃線)開頭
- 不能以xml(或XML、或Xml 等)開頭
- 不能包含空格
- 名稱中間不能包含冒號(:)
屬性定義
-
一個元素可以有多個屬性,每個屬性都有它自己的名稱和取值,例如:<mytag name=“value” …/>
-
屬性值一定要用引號(單引號或雙引號)引起來
-
屬性名稱的命名規范與元素的命名規范相同
-
元素中的屬性是不允許重復的
-
在XML技術中,標簽屬性所代表的信息也可以被改成用子元素的形式來描述,例如:
<mytag><name><firstName/><lastName/></name></mytag>
注釋
- XML中的注釋語法為:<!–這是注釋–>
- 注意:
1.XML聲明之前不能有注釋(即第一行)
2.注釋不能嵌套,例如:
特殊字符
- 在xml文檔中有些字符是特殊的,不能使用它們作為文本數據。例如:不能使用“<”或“>”等字符作為文本數據,所以需要使用轉義字符來表示。
例如在xml中直接輸入 a<b ,結果不能正常顯示,因為把<當做了標簽
如果就想要顯示,需要對特殊字符 < 進行轉義:a < b
CDATA區
當大量的轉義字符出現在xml文檔中時,會使xml文檔的可讀性大幅度降低。這時如果使用CDATA段就會好一些。
在CDATA段中出現的“<”、“>”、“””、“’”、“&”,都無需使用轉義字符。這可以提高xml文檔的可讀性。
- 書寫格式(紅色部分):
<a><![CDATA[ <a> ]]></a>
處理指令
處理指令,簡稱PI(Processing instruction)。處理指令用來指揮解析器如何解析XML文檔內容。
- 例如,在XML文檔中可以使用xml-stylesheet指令,通知XML解析器,應用css文件顯示xml文檔內容:<?xml-stylesheet type="text/css" href="a.css"?>
處理指令以“<?”開頭,以“?>”結束,這一點與xml文檔聲明相同。
CSS:
gj1 {font-size: 200px; color: red;}
gj2 {font-size: 100px; color: green;}
gj3 {font-size: 10px;}
gj4 {font-size: 50px; color: blue;}
XML:
<?xml version="1.0" encoding="gbk"?> <?xml-stylesheet type="text/css" href="a.css" ?><gjm>
?<gj1>中國</gj1>
<gj2>美國</gj2>
<gj3>日本</gj3>
<gj4>英國</gj4>
</gjm>
小結
- 所有 XML 元素都須有關閉標簽
- XML 標簽對大小寫敏感
- XML 必須正確地嵌套順序
- XML 文檔必須有根元素(只有一個)
- XML 的屬性值須加引號
- 特殊字符必須轉義 — CDATA
- XML 中的空格、回車換行會解析時被保留
XML約束
概述
在XML技術里,可以編寫一個文檔來約束一個XML文檔的書寫規范(與xml語法無關),這稱之為XML約束。
- 為什么需要XML約束?
因為xml文檔是可以自定義元素的,這會讓使用xml文檔的應用程序無法知道xml文檔的真實結構。通常應用程序都會要求xml文件的結構是固定的,以滿足自己的需求,這就說明,不同的應用程序要求自己的xml文檔必須符合一定的要求。 - 兩個概念:
格式良好的XML:遵循XML語法的XML
有效的XML:遵循約束文檔的XML
總之:約束文檔定義了在XML中允許出現的元素名稱、屬性及元素出現的順序等等。 - 常用的約束技術:
XML DTD
XML Schema
DTD約束
DTD(Document Type Definition),全稱為文檔類型定義。dtd是平面式文檔,dtd文件不是xml文檔,通常擴展名為“.dtd”。它是最早的xml約束。
什么是DTD約束?
DTD(Document Type Definition),文檔類型定義,用來約束XML文檔。例如要求xml文檔的根元素必須是,在元素下可以包含0~n個元素,每個元素必須有一個number屬性,而且還要有三個子元素,分別<name>、<age>、<sex>,這三個子元素的內容必須為文本內容,而不能是子元素。
創建步驟:
復雜元素:有子元素的元素
<!ELEMENT 元素名稱 (子元素)>
簡單元素:沒有子元素
<!ELEMENT 元素名稱 (#PCDATA)>
注意:元素名稱和括號之間存在空格,不然格式錯誤
注意:如果我們打開xml文件是用瀏覽器打開的,由于瀏覽器只負責校驗xml的語法,不負責校驗約束,所以不會起到約束作用。
如果想要校驗xml的約束,需要使用工具(myeclipse工具、Idea)。
DTD的三種引入方式:
DTD約束即可以作為一個單獨的文件編寫,也可以在XML文件內編寫。
<!DOCTYPE 根元素名稱 SYSTEM “dtd路徑”>
<!DOCTYPE person [
<!ELEMENT person (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
]>
<!DOCTYPE 根元素 PUBLIC “DTD名稱” “DTD文檔的URL”>
框架 struts2 使用配置文件就是外部的dtd文件
示例:<!DOCTYPE struts PUBLIC “-//Apache Software Foundation//DTD Struts Configuration 2.0//EN” “http://struts.apache.org/dtds/struts-2.0.dtd”>
使用DTD定義元素
-
在DTD文檔中使用ELEMENT關鍵字來聲明一個XML元素。
-
語法:<!ELEMENT 元素名稱 使用規則>
規則:
(#PCDATA):指示元素的主體內容只能是普通的文本.(Parsed Character Data)
EMPTY:用于指示元素的主體為空。比如<br/>
ANY:用于指示元素的主體內容為任意類型(可以為空)。
(子元素):指示元素中包含的子元素 -
定義子元素及描述它們的關系:
- 如果子元素用逗號分開,說明必須按照聲明順序去編寫XML文檔。
如: <!ELEMENT FILE (TITLE,AUTHOR,EMAIL) 標簽要從TITLE開始到EMAIL結束的順序書寫 - 如果子元素用“|”分開,說明任選其一。
如:<!ELEMENT FILE (TITLE|AUTHOR|EMAIL)(只能在三個標簽中選擇一個) - 用+、*、?來表示元素出現的次數
+:表示至少出現一次,一次或多次
*:表示可有可無,零次、一次或多次
?:表示可以有也可以無,有的話只能有一次。零次或一次
- 如果子元素用逗號分開,說明必須按照聲明順序去編寫XML文檔。
圖例:
使用DTD定義屬性
- 屬性的定義格式:
- 示例:
- 屬性值類型:
CDATA:表示屬性的取值為普通的文本字符串
ENUMERATED (DTD沒有此關鍵字):表示枚舉,只能從枚舉列表中任選其一,如(雞肉|牛肉|豬肉|魚肉)
ID:表示屬性的取值不能重復,屬性的值只能由字母,下劃線開始,不能出現空白字符
如果把student元素的number屬性設定為ID類型,那么每個student元素的number屬性值必須是唯一的,并且ID類型的屬性值不能以數字開頭。 - 屬性約束設置說明:
#REQUIRED:表示該屬性必須出現
#IMPLIED:表示該屬性可有可無
#FIXED:表示屬性的取值為一個固定值。語法:#FIXED “固定值”
直接值(直接輸入一個值):表示屬性的取值為該默認值
示例:
<!ATTLIST 頁面作者 姓名 CDATA #IMPLIED 年齡 CDATA #IMPLIED 聯系信息 CDATA #REQUIRED 網站職務 CDATA #FIXED "頁面作者" 個人愛好 CDATA "上網">根元素為 頁面作者 ,姓名元素和年齡元素的文本內容可有可無,聯系信息元素的文本內容必須出現。
定義實體
實體用于為一段內容創建一個別名,以后在XML文檔中就可以使用別名引用這段內容了。相當于在Java中的用final定義一個常量值。
- 語法:<!ENTITY 實體名稱 “實體內容”>
- 概念:在DTD中定義,在XML中使用
- 引用方式(注意是在XML中使用):&實體名稱;
Schema約束
XML Schema 也是一種用于定義和描述 XML 文檔結構與內容的模式語言,其出現是為了克服 DTD 的局限性。
概念:
- XML Schema 文件自身就是一個XML文件,但它的擴展名通常為.xsd
- 和XML文件一樣,一個XML Schema文檔也必須有一個根結點,但這個根結點的名稱為Schema
- 應用schema約束,開發xml過程
- 編寫了一個XML Schema約束文檔后,通常需要把這個文件中聲明的元素綁定到一個URI地址上,這個URI地址叫namespace名稱空間,以后XML文件就可以通過這個URI(即名稱空間)引用綁定指定名稱空間的元素
XML Schema的特點:
- XML Schema符合XML語法結構。
- DOM、SAX等XML API很容易解析出XML Schema文檔中的內容。
- XML Schema對名稱空間支持得非常好。
- XML Schema比XML DTD支持更多的數據類型,并支持用戶自定義新的數據類型。
- XML Schema定義約束的能力非常強大,可以對XML實例文檔作出細致的語義限制。
- XML Schema不能像DTD一樣定義實體,比DTD更復雜,但Xml Schema現在已是w3c組織的標準,它正逐步取代DTD。
Schema和DTD區別:
XML從SGML中繼承了DTD,并用它來定義內容的模型,驗證和組織元素。同時,它也有很多局限:
- DTD不遵守XML語法;
- DTD不可擴展;
- DTD不支持命名空間的應用;
- DTD沒有提供強大的數據類型支持,只能表示很簡單的數據類型。
Schema完全克服了這些弱點,使得基于Web的應用系統交換XML數據更為容易。下面是它所展現的一些新特性:
- Schema完全基于XML語法,不需要再學習特殊的語法;
- Schema能用處理XML文檔的工具處理,而不需要特殊的工具;
- Schema大大擴充了數據類型,支持booleans、numbers、dates and times、URIs、integers、decimal numbers和real numbers等;
- Schema支持原型,也就是元素的繼承。如:我們定義了一個“聯系人”數據類型,然后可以根據它產生“朋友聯系人”和“客戶聯系”兩種數據類型;
- Schema支持屬性組。我們一般聲明一些公共屬性,然后可以應用于所有的元素,屬性組允許把元素、屬性關系放于外部定義、組合;
- 開放性。原來的DTD只能有一個DTD應用于一個XML文檔,現在可以有多個Schema運用于一個XML文檔。
XMLSchema文檔基本結構
- 在W3C XML schema規范中規定:所有的Schema文檔都使用 <schema>作為其根元素
- <schema>元素可以包含一些屬性。一個XML schema聲明看起來經常以如下的形式出現:
<schema xmlns=“http://www.w3.org/2001/XMLSchema”
targetNamespace=“http://www.itcast.cn/20140213”
elementFormDefault=“qualified”>
xmlns="http://www.w3.org/2001/XMLSchema"代表當前xml文件是一個約束文件;
targetNamespace="http://www.itcast.cn/20140213"代表如果要使用schema約束文件,直接通過這個地址引入約束文件;
elementFormDefault="qualified"代表在xml中,所有引用xsd的全局的元素都必須加上命名空間的前綴
XMLSchema簡易元素和復雜元素
- 簡易元素:指那些僅包含文本的元素。它不會包含任何其他的元素或屬性。
<element name=“xxx” type=“string"/> - 復雜元素:復雜類型元素是包含子元素或者屬性的元素
使用<complexType>:表示復雜類型 - <sequence>:表示有順序
示例:XML文件有一個根元素person,根元素中有一個元素person,其中包含兩個子類元素to和from
<?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/1111" elementFormDefault="qualified"><element name="person"><complexType><sequence><element name="man"><complexType><sequence><element name="name" type="string"></element><element name="age" type="string"></element></sequence></complexType></element></sequence></complexType></element> </schema>XMLSchema復雜元素指示器
All:表示只能出現一次
Choice: 只能出現其中的一個
Sequence:元素按照順序出現
maxOccurs=“unbounded” 表示出現次數沒限制
定義屬性(必須是復雜元素):<attribute name=“p1” type=“string” use=“required”></attribute>
<any></any>:表示任意元素
約束屬性
- 寫在復雜元素里面
- 寫在</complexType>之前
例如:
<attribute name=“id1” type=“int” use=“required”>
代表該元素名稱為id1,屬性類型為int,且必須出現
對XML Schema的引用
- Schema和被約束的xml都是xml文檔,如何區分哪個是被約束的文檔?
使用名稱空間區分被約束文檔(使用w3c名稱空間)
xmlns=“http://www.w3.org/2001/XMLSchema-instance” 代表當前的文檔是一個實例文檔(被約束的文檔) - 引用自定義的schema,使用自定義的名稱空間
由于一個標簽上不能出現兩個同名的屬性,所以需要給名稱空間起一個別名xsi。xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
引用本地xsd文件存放位置,使用schemaLocation:代表的是Schema文檔存放的路徑
名稱空間的概念
- 在XML Schema中,每個約束模式文檔都可以被賦以一個唯一的名稱空間,名稱空間用一個唯一的URI(Uniform Resource Identifier,統一資源標識符)表示。 在Xml文件中書寫標簽時,可以通過名稱空間聲明(xmlns),來聲明當前編寫的標簽來自哪個Schema約束文檔。如:
<itcast:書架 xmlns:itcast=“http://www.itcast.cn”>
<itcast:書>……</itcast:書>
</itcast:書架>
此處使用itcast來指向聲明的名稱,以便于后面對名稱空間的引用。 - 注意:名稱空間的名字語法容易讓人混淆,盡管以 http:// 開始,那個 URL 并不指向一個包含模式定義的文件。事實上,這個 URL:http://www.itcast.cn根本沒有指向任何文件,只是一個分配的名字。
使用名稱空間引入Schema
- 為了在一個XML文檔中聲明它所遵循的Schema文件的具體位置,通常需要在Xml文檔中的根結點中使用schemaLocation屬性來指定,例如:
<itcast:書架 xmlns:itcast=“http://www.itcast.cn”
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=“http://www.itcast.cn book.xsd"> - schemaLocation此屬性有兩個值。第一個值是需要使用的命名空間。第二個值是供命名空間使用的 XML schema 的位置,兩者之間用空格分隔。
- 注意,在使用schemaLocation屬性時,也需要指定該屬性來自哪里。
示例:
company.xml
company.xsd
department.xsd
示例
為students.xml編寫DTD:
<!ELEMENT students (student+)> <!ELEMENT student (name,age,sex)> <!ELEMENT name (#PCDATA)> <!ELEMENT age (#PCDATA)> <!ELEMENT sex (#PCDATA)> <!ATTLIST student number CDATA #REQUIRED>為students.xml編寫schema:
<?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"><xsd:element name="students" type="studentsType"/><xsd:complexType name="studentsType"><xsd:sequence><xsd:element name="student" type="studentType" minOccurs="0" maxOccurs="unbounded"/></xsd:sequence></xsd:complexType><xsd:complexType name="studentType"><xsd:sequence><xsd:element name="name" type="xsd:string"/><xsd:element name="age"><xsd:simpleType><xsd:restriction base="xsd:integer"><xsd:maxInclusive value="100"/><xsd:minInclusive value="0"/></xsd:restriction></xsd:simpleType></xsd:element><xsd:element name="sex"><xsd:simpleType><xsd:restriction base="xsd:string"><xsd:enumeration value="男"/><xsd:enumeration value="女"/></xsd:restriction></xsd:simpleType></xsd:element></xsd:sequence><xsd:attribute name="number" type="xsd:string"/></xsd:complexType> </xsd:schema>參照Schema編寫XML文檔:
我們參照上面的Schema文檔編寫一個studens.xml文件
總結
以上是生活随笔為你收集整理的JavaWeb学习笔记(XML语言)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 智能语音将成下一代人机交互新入口
- 下一篇: 【1】初识pr界面布局和工作流