[XML]學習筆記(二)——DTD的宣告與實體
一、文件型別宣告:
a)內部DTD的宣告:
DTD定義語句與XML文件在同一文件,通常放在頭部。格式如下:
<!DOCTYPE root_tag[
<!ELEMENT xxx (…)>
…
]>
注意在DOCTYPE後面跟的是根標記的名字。
b)外部DTD的宣告:
i.
<!DOCTYPE root_tag SYSTEM “*.dtd”>
<!ELEMENT xxx (…)>
…
ii.引數SYSTEM表明該DTD文件是一份私有DTD;
引數PUBLIC表示該DTD文件是一份公有DTD,而且多了一個引數”LIST”,稱為DTD的名字,用於標誌一個DTD。一些應用程式處理DTD時會根據名字先到自己的DTD文件庫中查詢,當找不到時才到後一個引數指定的路徑上去查詢。
c)外部DTD與內部DTD聯合使用:
<!DOCTYPE root_tag SYSTEM “*.dtd” [ <!ELEMENT xxx (…)> … ]>
當內部DTD和外部DTD在標記的定義和文件的結構定義方面發生衝突時,以內部DTD的定義為準。
二、元素宣告的語法:沒有宣告的就是禁止的
a)#PCDATDA型資料:標記的內容是可解析文字(不包含標記的文字),定義為#PCDATA型的標記是葉子標記,不能具有任何子標記或其他的不可解析性資料內容。
b)ANY:當很難確定一個標記的型別時可以先定義為ANY,但儘量少用(與XML文件的資料結構性相違背)。
c)+:一個或多個;
*:0個或多個;
?:0個或一個;
(tag1|tag2)+:tag1和tag2可以任意組合,只要有一個出現至少一次即可。
(tag1, tag2)*:tag1和tag2作為一個整體,要麼同時出現,要麼同時不出現,且出現次數與順序要嚴格符合定義。等價於:
parenttag*
<!ELEMENT parenttag (tag1, tag2)>
d)混合型標記內容:既可以有自己的字串內容,也可以有子標記的宣告。
e.g. <!ELEMENT person (#PCDATA|name|addr|tel|email)*>
該標記是可以解析的文件內容或上面列表中的子標記,且出現次序和次數都是任意的。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE person [
<!ELEMENT person (#PCDATA|name|addr|tel|email)*>
<!ELEMENT name (#PCDATA)>
<!ELEMENT addr (#PCDATA)>
<!ELEMENT tel (#PCDATA)>
<!ELEMENT email (#PCDATA)>
]>
<person>Chan
<name>Jason</name>
<addr>Shanghai</addr>
<tel>18701772821</tel>
<email> [email protected]</email>
<email>[email protected]</email>
</person>
注意:不能將#PCDATA作為一種特殊標記!
如 <!ELEMENT person (#PCDATA, name, addr, tel, email)>
實際上混合型標記破壞了文件的高度結構化,不利於軟體對XML文件的處理,應該避免。<!ELEMENT person (#PCDATA|name|addr|tel|email)*>可轉變為
<!ELEMENT person (greet|name|addr|tel|email)*>
<!ELEMENT greet (#PCDATA)>
e)空標記:
<!ELEMENT blk EMPTY>
<blk/>(或<blk></blk>)
f)註釋:
<!-- … -->
三、實體:給一段程式碼或資料起一個名字,以便在別的地方引用。
一般實體指代的是將來XML資料文件要用到的文字或資料,而引數實體是在DTD文件內定義的一種DTD資訊,所代表的是DTD定義的一部分,不能在XML文件中使用,也不能在DTD中定義。
a)內部一般實體:在文件內部定義和使用的實體。
實體方法的引用以&開頭,以;結束,中間是實體名。
e.g.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE person [
<!ELEMENT person (name,addr,tel,br,email)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT addr (#PCDATA)>
<!ELEMENT tel (#PCDATA)>
<!ELEMENT br EMPTY>
<!ELEMENT email (#PCDATA)>
<!ENTITY email " [email protected]">
]>
<person>
<name>Jason</name>
<addr>Shanghai</addr>
<tel>18701772821</tel>
<br></br>
<email>&email;</email>
</person>
實體也可以被DTD內部的其他實體所呼叫:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE person [
<!ELEMENT person (name,addr,tel,br,email)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT addr (#PCDATA)>
<!ELEMENT tel (#PCDATA)>
<!ELEMENT br EMPTY>
<!ELEMENT email (#PCDATA)>
<!ENTITY correspondance "email:&email;">
<!ENTITY email "[email protected]">
]>
<person>
<name>Jason</name>
<addr>Shanghai</addr>
<tel>18701772821</tel>
<br></br>
<email>&correspondance;</email>
</person>
注意:一般實體定義只能應用在另一實體的定義中,而不能在元素(ELEMENT)的定義中。除此之外,還要注意實體之間引用的死迴圈問題。
b)外部一般實體:在文件實體以外定義,要通過一個URL才能引用到的實體。
表示引用位於test323.txt的外部一般實體<!ENTITY content SYSTEM "test323.txt">
e.g.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE person [
<!ELEMENT person (name,addr,tel,br,email)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT addr (#PCDATA)>
<!ELEMENT tel (#PCDATA)>
<!ELEMENT br EMPTY>
<!ELEMENT email (#PCDATA)>
<!ENTITY correspondance "email:&email;">
<!ENTITY email "[email protected]">
<!ENTITY content SYSTEM "test323.txt">
]>
<person>
<name>Jason</name>
<addr>Shanghai</addr>
&content;
</person>
test323.txt:
<tel>18701772821</tel>
<br/>
<email>&correspondance;</email>
c)內部引數實體:引數實體不能被應用在元素的聲明當中,不能使用引數實體來定義元素,只有在外部DTD中引數實體才能被應用到元素的聲明當中。
e.g.
test323.dtd
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT person (name,addr,tel,br,email)>
<!ENTITY %name "(#PCDATA)">
<!ELEMENT addr %name;>
<!ELEMENT tel %name;>
<!ELEMENT br EMPTY>
<!ELEMENT email %name;>
test323.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE person SYSTEM "test323.dtd">
<person>
<name>Jason</name>
<addr>Shanghai</addr>
<tel>18701772821</tel>
<br/>
<email>[email protected]</email>
</person>
注意:引數實體必須先定義再使用,而不能像一般實體那樣隨意放置。
d)外部引數實體:能將原來很長的DTD文件轉變成一個很小的、相互呼叫的文件集合,適合大型DTD文件的設計開發。
e.g.
test323.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE person [
<!ELEMENT person (name,addr,tel,br,email)>
<!ENTITY % (注意這裡有個空格)content SYSTEM "test323.dtd">
%content;
]>
<person>
<name>Jason</name>
<addr>Shanghai</addr>
<tel>18701772821</tel>
<br/>
<email>[email protected]</email>
</person>
test323.dtd
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT name (#PCDATA)>
<!ELEMENT addr (#PCDATA)>
<!ELEMENT tel (#PCDATA)>
<!ELEMENT br EMPTY>
<!ELEMENT email (#PCDATA)>
疑問:外部引數實體對應的dtd文件中能定義內部引數實體嗎?
相關推薦
[XML]學習筆記(二)——DTD的宣告與實體
一、文件型別宣告: a)內部DTD的宣告: DTD定義語句與XML文件在同一文件,通常放在頭部。格式如下: <!DOCTYPE root_tag[ <!ELEMENT xxx (…)> … ]> 注意在DOCTYPE後面跟的是根標記的名字。 b)外部
[XML]學習筆記(三)——DTD屬性的宣告及型別
一、屬性的宣告: a) 任何標記的屬性都必須在DTD文件中進行宣告,都要通過關鍵字 <!ATTLIST elem_nameattr_name attr_type default_value> 定義。 b) 所有標記的屬性,即便是同名屬
XML學習筆記(二)
int 3.2 參數 cti per emp 之間 java system 本課程對應視頻教程:https://edu.51cto.com/course/15238.html 1、DTD 1.1、什麽dtd dtd(Document Type Definition):文檔定
IO流學習筆記(二)之BufferedWriter與BufferedReader及例項Demo
在之前的學習筆記(http://blog.csdn.net/megustas_jjc/article/details/72853059)中,FileWriter與FileReader的Demo使用的中轉資料buf實際就是緩衝區,是由我們自己建立的。 緩衝區可以提高效率,Java對緩衝區進行了封裝,封裝成了物
機器學習學習筆記(二)-模型選擇與評估
緒論 模型評估與選擇(3) 線性模型 決策樹 神經網路 支援向量機 貝葉斯分類 整合學習 聚類 降維與度量學習 特徵選擇與稀疏學習 計算學習理論 半監督學習 概率圖模型 規則學習 強化學習 模型評估與選擇 2.1經驗誤差與過擬合 錯誤率:分類錯誤的樣本數
GO語言學習筆記(二)IDE安裝與配置、格式化代碼、生成代碼文檔
dea mit sts eid mark idea current href alt 一、安裝goland IDE1、goland IDE的下載 下載地址:(我這裏是下載的mac版,因為我的是mac本)https://download-cf.jetbrains.com/g
Spring學習筆記(二)後處理器與AOP
1.後處理器 後處理器是對IOC容器功能的擴充套件。按我的理解,擴充套件的原理是在某動作結束後再次呼叫指定的方法進行擴充套件處理。有點類似於AOP。 後處理器分兩種:Bean後處理器和容器後處理器。 1.1 Bean後處理器 Bean後處理器會在Be
周志華《機器學習》 學習筆記(二) 假設空間與歸納偏好
一、假設空間 歸納(induction)與演繹(deduction)是科學推理的兩個大基本手段。前者是從特殊到一半的泛化(generalization)過程,即從具體的事實歸結出一半性規律;後者則是從一般到特殊的“特化”(specialization)過程,即從基礎原理推
Kotlin學習筆記(二):Kotlin與Java對比
本篇文章我們將通過類比Java語法的方式學習Kotlin的基本語法和常用操作 基本型別 Java Kotlin 位寬 double Double 64 float Float 32 long L
jhipster 筆記(二):打包與實體
一、專案打包: 1.mvn專案:./mvnw -Pprod clean package 2.gradle專案:gradle bootRepackage -Pprod
mybatis學習筆記(二)之XML方式的基本用法
在前一篇筆記中,我們建立了配置 mybatis-config.xml 檔案,原來 mappers標籤下的內容為: <mappers> <mapper resource="tk/mybatis/simple/mapper/CountryMa
JavaWeb學習筆記 (二)xml檔案的解析
1.xml解析 就是獲取xml檔案中元素的屬性或資料。 2.xml常用的解析方式 (1)DOM解析(document object model):會將xml檔案中的內容全部讀出,在記憶體中以樹狀形式儲存。整個文件稱為document物件,屬性稱為attribute物件,元素節點稱為ele
opencv學習筆記(二)-對xml和yaml檔案的讀寫操作
一.xml和yaml的簡單介紹 所謂的xml,就是eXtensible Markup Language, 翻譯成中文就是“可擴充套件標識語言“。首先XML是一種元標記語言,所謂“元標記”就是開發者可以根據自己的需要定義自己的標記,比如開發者可以定義如下標記&
Axis2學習筆記(二)通過services.xml釋出ws服務
第一步 建立一個pojo類 package com.service; public class SimpleService { public String getGreeting(String name){ return "Hello,"+name+"service.xml
C# EMGU 3.4.1學習筆記(二)XML和YAML檔案的寫入
以下是《OpenCV3程式設計入門》中5.6.3的示例程式的C# + EMGU 3.4.1版,和C++程式相比,有如下幾點不同: 1. 使用Matrix<>儲存多維陣列,多維陣列的各維需要使用{}擴起來,之間用逗號分隔; 2. C#中無法使用<<和
php laravel框架學習筆記 (二) 數據庫操作
true 數據 mar sql show top 一行 ati del 原博客鏈接:http://www.cnblogs.com/bitch1319453/p/6810492.html mysql基本配置 你可用通過配置環境變量,使用cmd進入mysql,當然還有一種東
java學習筆記(二)圖形用戶接口
star strong per getwidth cep runnable graphics s2d gb2 這個學期主要放在ACM比賽上去了,比賽結束了。不知不覺就15周了,這周就要java考試了,復習一下java吧。java的學習的目的還是讓我們學以致用,讓我們可以
數據結構學習筆記(二) 線性表的順序存儲和鏈式存儲
出錯 初始化 node != test span 輸入 des val 線性表:由同類型數據元素構成有序序列的線性結構 --》表中元素的個數稱為線性表的長度 --》沒有元素時,成為空表 --》表起始位置稱表頭,表結束位置稱表尾 順序存儲: 1 package
Memcache 學習筆記(二)---- PHP 腳本操作 Memcache 服務器
ext status ram var_dump 介紹 修改 memcache local dbn PHP 腳本操作 Memcache 服務器 一、PHP腳本操作Memcache方法 使用 PHP 腳本操作 Memcache,在 PHP 手冊中有詳細的介紹,我們
javascript學習筆記(二):定義函數、調用函數、參數、返回值、局部和全局變量
兩個 cnblogs bsp 結果 value ava ase com 調用 定義函數、調用函數、參數、返回值 關鍵字function定義函數,格式如下: function 函數名(){ 函數體 } 調用函數、參數、返回值的規則和c語言規則類似。 1 <!DOC