華恩JAVA班第35天

Amare丶發表於2017-06-08

華恩JAVA班第35天

 

XML名稱空間

XML名稱空間表示XML名稱的使用範圍,因為XML可自定義元素標籤,所以有不同XML應用間XML名稱重名的機會是很大的。如果沒有一種方法來區分不應用的名稱,就會造成混亂。XML名稱空間就是為了解決這個問題而設計的。通過XML名稱空間,我們可以區分來自不同的XML應用的具有相同名稱的元素和屬性。可以將來自單一XML應用的相關元素和屬性集合在一起,方便軟體識別和處理。

名稱空間由字首和本地部分組成,中間用冒號分隔。字首標識元素或屬性的所在名稱空間,本地部分標識名稱空間中的某個元素或屬性。整個名稱也稱為限定名稱(qualified name)。字首可以用除XML(大小寫任意組合)三個字母外的任何合法的XML名稱字元組成。每個限定名稱中的字首都必須與唯一的一個URI關聯。帶有相同URI關聯的字首的名稱屬於同一名稱空間。

http://www.w3.org/TR/REC-rdf-syntax#">
 http://www.example.com/test.xml">
  
   linuxsir
   ...
 

上例rdf:RDF元素的xmlns:rdf屬性將字首rdf繫結到名稱空間http://www.w3.org/TR/REC-rdf-syntax#。屬性xmlns:rdf為rdf:RDF元素及其子元素宣告瞭字首rdf。RDF處理器將把rdf:RDF和rdf:Description作為RDF元素,因為兩個元素都具有與RDF規範定義的某個URI相繫結的字首。處理器不會認為title,author等元素為RDF元素,因為它沒有繫結到相同URI的rdf字首。

字首一般在使用該字首的最上層元素中定義。在下層元素中也可定義不同的字首:

http://www.w3.org/TR/REC-rdf-syntax#">
 http://www.w3.org/dc/"
                  about="http://www.example.com/test.xml">
   example
   linuxsir
   ...
 

不帶字首的屬性,如about,不屬於任何的名稱空間。如xlink:type和xlink:href屬性屬於xlink名稱空間,當然,前提是你要先把xlink繫結到一個URI。URI不必須是一定存在的http連結,它只是一種表示的方法,以區分不同的名稱空間。

通過將無字首的xmlns屬性附加到根元素中,可以指定不帶字首的元素及所有不帶字首的子元素屬於某個名稱空間。

http://www.w3.org/2000/svg">
  
  

這裡,雖然所有元素都沒有字首,但它都同屬一個名稱空間。但屬性屬不同名稱空間,因為預設名稱空間只應用於元素。預設名稱空間在子元素中也用相同的方法重新設定。

如果名稱空間只用來識別來自某種XML應用的元素和屬性,而不是用來區分具有相同名稱的不同元素,則可在DTD的元素中定義一個固定的xmlns屬性,而不需要文件中定義。定義方法如下:

http://www.w3.org/svg/">
在定義DTD時,需要使用名稱空間字首的在定義時也要把字首寫到DTD定義裡,如:


使用引數實體引用來定義名稱空間字首可方便DTD文件的維護,如:



接著,利用該引數實體名稱定義更多的引數實體引用,如:



這樣,如果需更改字首,只需修改一個地方就可以了,不用整篇文件修改。



 
不能在ATTLIST和ELEMENT宣告中直接使用%prefix;和%colon;,因為在另一個實體的外部使用這些引數實體時,XML解析器會在實體替換文字的兩邊新增額外的空格。

XHTML

XHTML是W3C推薦的一種標準,它定義了一種與XML相容的HTML版本。XHTML文件是一個有效的XML文件,所以編寫格式比HTML嚴格。如果需從HTML文件轉換成XHTML文件,需作以下更改:

在XHTML中不允許省略結束標籤,所以需補齊缺少的標籤。

元素需按正確的順序巢狀。

所有元素和屬性的名稱都採用小寫。

屬性值需新增引號,如

所有屬性都需有屬性值。

採用&和<等的實體形式表示這些字元。

確保文件有單一根元素,最好用html。


這樣的空元素要改成


註釋應由的形式改成。

文件編碼應採用UTF-8或UTF-16,或者新增XML宣告指定文件的編碼方式。

需去掉非標準的元素。如:marguee。

新增一個DOCTYPE宣告,用PUBLIC來指向XHTML的三種DTD中的一種。分別是Strict、Transitional和Frameset,一般使用Strict。

Strict(嚴格型),W3C推薦的XHTML形式。不包括一些非標準的元素和屬性,如applet和center等。宣告方式如下:

                     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
Transitional(過渡型),一種不太嚴格的XHTML格式,可使用一些非標準的元素和屬性,如applet和bgcolor等。宣告方式如下:

                     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Frameset(框架型),與過渡型DTD類似,允許使用與框架相關的元素,如frameset和iframe。宣告方式如下:

                     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
文件的根元素必須具有xmlns屬性,標識預設的名稱空間提http://www.w3.org/1999/xhtml

下面是一個標準的XHTML文件的示例:

                     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
http://www.w3.org/1999/xhtml">






...


由HTML轉到XHTML是一種枯燥而乏味的工作,現在有一種叫tidy的開源工具可幫我們完成大部份的工作,它是一個C程式,使用方法如下:

% tidy --output-xhtml yes test.html test.xml
XHTML 1.1把XHTML的三種DTD分成獨立模組。我們可根據實際情況包含或省去某些模組。這些模組是:

Structure Module(結構模組)--->%xhtml-struct.module;,包含HTML文件主要的元素,如:html、head、title和body。

Text Module(文字模組)--->%xhtml-text.module;,包含文字的基本元素和其內聯元素,如:h1、h2、...、strong、span等。

Hypertext Module(超連結模組)--->%xhtml-hypertext.module;,包含用於連結的元素,如:a元素。

List Module(列表模組)--->%xhtml-list.module;,包含用於列表的元素,如:dl、dt、dd、ul、ol和li。

Applet Module(applet模組)--->%xhtml-applet.module;,Java所需要元素,如:applet和param。

Presentation Module(表示模組)--->%xhtml-pres.module;,面向表示的標記:b、big、hr、I、small、sub、sup和tt。

Edit Module(編輯模組)--->%xhtml-edit.module;,用於修正的元素,如:del和ins。

Bidirectional Text Module(文字方向模組)--->%xhtml-bdo.module;,用於指定文字閱讀的方向,如bdo元素。

Basic Forms Module(基本表單模組)--->%xhtml-basic-form.module;,用於HTML 3.2的表單元素,如:form、input、select、option和textarea。

Forms Module(表單模組)--->%xhtml-form.module;,用於HTML 4.0的表單元素,如:form、input、select、option、textarea、button、fieldset、label、legend和optgroup。

Basic Tables Module(基本表格模組)--->%xhtml-basic-table.module;,基本的表格元素,如:table、caption、th、tr和td。

Table Module(表格模組)--->%xhtml-table.module;,安全功能的表格支援,如:table、caption、th、tr、td、col、colgroup、tbody、thead和tfoot。

Image Module(影象模組)--->%xhtml-image.module;,包含img元素。

Client-side Image Map Module(客戶端影象映像模組)--->%xhtml-csismap.module;,包含map和area元素以及支援客戶端影象映像所需要的元素的屬性。

Server-side-Image Map Module(伺服器端影象映像模組)--->%xhtml-ssismap.module;,該模組沒有新增新元素,但對img元素新增了一個ismap屬性。

Object Module(物件模組)--->%xhtml-object.module;,用於在網頁中嵌入可執行內容,如:java程式。

Param Module(引數模組)--->%xhtml-param.module;,網頁中可執行內容中傳遞引數的param元素。

Frames Module(框架模組)--->%xhtml-frames.module;,包含實現框架所需的元素,如:frame、frameset和noframes。

Iframe Module(內聯框架模組)--->%xhtml-iframe.module;,包含內聯框架的iframe元素。

Intrinsic Events(固有事件模組)--->%xhtml-events.module;,支援如onSubmit和onFocus等指令碼的屬性。

Meta-information Module(元資訊模組)--->%xhtml-meta.module;,包含meta元素。

Scripting Module(指令碼模組)--->%xhtml-script.module;,支援JavaScript等指令碼。

Stylesheet Module(樣式表模組)--->%xhtml-style.module;,用於定義CSS的style元素。

Link Module(連結模組)--->%xhtml-link.module;,指定外部檔案,如樣式表、庫等關係的link元素。

Base Modue(基模組)--->%xhtml-base.module;,包含base元素,指定解析相對URL所參照的基URL。

Target Module(目標模組)--->%xhtml-target.module;,用於指定目標框架或框架中某個視窗的target屬性。

Style Attribute Module(樣式屬性模組)--->%xhtml-inlstyle.module;,將CSS樣式應用於文件中單個元素的style屬性。

Name Identification Module(名稱標識模組)--->%xhtml-nameident.module;,name屬性是id屬性的早期版本,現在不推薦使用。

Legacy Module(傳統模組)--->%xhtml-legacy.module;,不推薦使用的元素和屬性,如:basefont、center、fonts、strike和u元素。

Ruby Module(Ruby模組)--->%xhtml-ruby.module;,東亞文字中用於將少量文字放於正文文字旁邊的ruby、rbc、rtc、rb、rt和rp元素,一般用來指示發音。

 

更多資訊可以參見同學富曉磊的部落格:http://blog.sina.com.cn/u/1798827371

相關文章