溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

XML系列:(2)XML約束

發布時間:2020-06-24 20:11:47 來源:網絡 閱讀:578 作者:lsieun 欄目:開發技術

1、什么是XML約束


在XML技術中,可以編寫一個文檔來約束一個XML文檔的書寫規范,這稱之為XML約束。

2、XML語法和XML約束的區別


XML語法和XML約束的區別

作用制定者
XML語法規范XML文件的基本編寫規則由w3c組織制定的
XML約束規范XML文件數據內容格式的編寫規則由開發者自行定義


3、常用的XML約束技術


DTD約束:語法相對簡單,功能也相對簡單。學習成本也低。

Schema約束:語法相對復雜,功能也相對強大。學習成本相對高?。。。Q空間)

4、XML約束DTD


DTD(Document Type Definition):文檔類型定義

4.1、DTD與XML文件關聯的三種方式


三種方式:內部DTD、引用本地DTD和引用公共DTD

4.1.1、內部DTD


語法:

<!DOCTYPE 根元素 [元素聲明]>

實例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note[
   <!ELEMENT note (to,from,heading,body)>
   <!ELEMENT to (#PCDATA)>
   <!ELEMENT from (#PCDATA)>
   <!ELEMENT heading (#PCDATA)>
   <!ELEMENT body (#PCDATA)>
]>
<note>
   <to>美國</to>
   <from>中國</from>
   <heading>Hello</heading>
   <body>主體</body>
</note>




4.1.2、引用本地DTD


語法:

<!DOCTYPE 根元素 SYSTEM "文件名">

實例:

文件note.dtd

<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>

文件note.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
   <to>美國</to>
   <from>中國</from>
   <heading>Hello</heading>
   <body>主體</body>
</note>




4.1.3、引用公共DTD


語法:

<!DOCTYPE 根元素 PUBLIC "DTD名稱" "DTD文件的URL">

實例:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">



4.2、DTD語法



4.2.1、元素


元素聲明使用下面的語法:

<!ELEMENT 元素名稱 類別>

或者

<!ELEMENT 元素名稱 (元素內容)>

類別:


元素的類別
類型類型值作用
空標簽EMPTY表示元素一定是空元素
普通字符串(#PCDATA)表示元素的內容一定是普通字符串(不能含有子標簽)
任何內容ANY表示元素的內容可以是任意內容(包括子標簽)

(元素內容)

順序問題:<!ELEMENT 元素名稱 (子元素名稱 1,子元素名稱 2,.....)>  按順序出現子標簽

次數問題:

元素出現的次數
標簽含義語法示例
(空)必須且只出現1次<!ELEMENT 元素名稱 (子元素名稱)><!ELEMENT note (message)>
+至少出現1次<!ELEMENT 元素名稱 (子元素名稱+)><!ELEMENT note (message+)>
*0或n次<!ELEMENT 元素名稱 (子元素名稱*)><!ELEMENT note (message*)>
?0 或1次<!ELEMENT 元素名稱 (子元素名稱?)><!ELEMENT note (message?)>



4.2.2、屬性


語法:

<!ATTLIST 元素名稱 屬性名稱 屬性類型 默認值>

<!ATTLIST 元素名稱
                屬性名稱 屬性類型 默認值
                屬性名稱 屬性類型 默認值
                ...
>


默認值:

#REQUIRED 屬性值是必需的

#IMPLIED   屬性不是必需的

#FIXED value 屬性不是必須的,但屬性值是固定的

屬性類型:控制屬性值的

CDATA :表示普通字符串

(en1|en2|..): 表示一定是任選其中的一個值,枚舉值

ID:表示在一個xml文檔中該屬性值必須唯一。值不能以數字開頭



4.2.3、實體


實體是用于定義引用普通文本或特殊字符的快捷方式的變量。

在DTD定義中,通過定義一個實體,在 XML文件中就可以引用這個實體了。

語法:

<!ENTITY 實體名稱 "實體的值">

實例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Persons[
	<!ENTITY author "張三">
	<!ENTITY home "中國 北京">
]>
<Persons>
&author;住在&home;
</Persons>

展示:

XML系列:(2)XML約束

注釋: 一個實體由三部分構成: 一個和號 (&), 一個實體名稱, 以及一個分號 (;)。

5、Schema


XML Schema 是基于 XML 的 DTD 替代者。

XML Schema 描述 XML 文檔的結構。

XML Schema 語言也稱作 XML Schema 定義(XML Schema Definition,XSD)。


5.1、XML Schema與DTD


XML Schema符合XML語法結構,本身就是XML文檔

DTD文檔的結構是平鋪性,如果定義復雜的XML文檔,很難把握各元素之間的嵌套關系, Schema相對文檔結構較強

XML Schema比DTD支持更多的數據類型,并支持用戶自定義數據類型

XML Schema定義約束的能力更強大

XML Schema 對命名空間進行支持


5.2、XML Schema快速入門


Schema本身就是一個XML文檔,但擴展名為.xsd。

一個Schema文檔通常稱之為約束文檔,遵循這個約束書寫的XML文件稱之為實例文檔。

和XML文件一樣,一個Schema文檔必須有一個根節點,并且這個根節點的名稱必須為schema。

編寫一個Schema文檔后,通常需要把這個文件中聲明元素綁定到一個URI上, 在XML Schema技術中有一個專業術語來描述這個過程,即把XML Schema文檔聲明的元素綁定到一個名稱空間上, 以后XML文件就可能通過這個URI(即名稱空間)來告訴解析引擎,XML文檔中編寫的元素來自哪里,被誰約束。

5.3、實例


books.xsd(XML Schema文件)

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
	targetNamespace="http://www.rk.com/books" 
	elementFormDefault="qualified">
	<!-- targetNamespace 表示當前XML Schema文檔中聲明的元素定義在http://www.rk.com/books命名空間中 -->
	<!-- elementFormDefault="qualified"表示在此schema中聲明過的元素必須被命名空間限定 -->
	<element name="books"><!-- name屬性表示當前元素的“標簽名” -->
		<complexType><!-- 復雜元素,由complexType進行定義 -->
			<sequence><!-- 子元素序列 -->
				<element name="book" maxOccurs="unbounded">
					<complexType>
						<sequence>
							<element name="title" type="string"/><!-- 簡單元素,由type屬性進行定義 -->
							<element name="price" type="double"/>
							<any></any><!-- 后面可以任意寫 -->
						</sequence>
						<!-- 屬性的聲明 一般寫到 sequence 的后面 -->
						<attribute name="id" type="ID" use="required"/>
					</complexType>
				</element>
			</sequence>
		</complexType>
	</element>
</schema>


books.xml(XML實例文件)

<?xml version="1.0" encoding="UTF-8"?>
<rk:books xmlns:rk="http://www.rk.com/books" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://www.rk.com/books books.xsd ">
	<!-- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 是固定寫法,實例命名空間 -->
	<!-- xsi:schemaLocation此屬性就有兩個值:第一值是需要使用的命名空間;第二個值是該命名空間使用的XML Schema的位置 -->
  <rk:book id="b1">
    <rk:title>往事并不如煙</rk:title>
    <rk:price>49.9</rk:price>
  </rk:book>
  <rk:book id="b02">
  	<rk:title>XML學習</rk:title>
  	<rk:price>23.2</rk:price>
  </rk:book>
</rk:books>

booksWithDefaultNameSpace.xml(XML實例文件)

<?xml version="1.0" encoding="UTF-8"?>
<books xmlns="http://www.rk.com/books" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://www.rk.com/books books.xsd ">
	<!-- 使用默認命名空間 格式:xmlns="http://www.rk.com/books" -->
	<!-- 一個XML實例文檔只允許有一個默認命名空間 -->
  <book id="b1">
    <title>最后的貴族</title>
    <price>49.9</price>
  </book>
</books>





向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女