XML命名空間的問題

2021-04-26 07:40:30 字數 3160 閱讀 2521

一直對xml檔案中的命名空間問題不清楚,或許今天問題得到了解決。

首先,命名空間是schema中引入的概念,為了解決dtd無法處理的「命名衝突」問題。

其次,為乙個元素定義了namespace則它的所有的子元素都會使用相同的namespace。

命名空間的唯一標識——url

schema規範中的命名空間的值必須用 uri (統一資源標誌符) 指代,一般我們使用url作為namespace。但是parser並不會從中讀取任何資訊。使用url只是為了namespace的唯一性。當然,人們可以通過url提供的**尋找相關的資訊。 使用uri (比如 "http://www.w3.org/1999/xhtml") 去標示乙個命名空間, 而不是用乙個簡短的字串 (比如"xhtml"), 這樣做是為了減少不同命名空間標示符衝突的可能性。

xml schema的導言

xml schema的開頭時是一些導言,之後才是正式的宣告。在schema 元素的導言中可能包含三個可選的屬性。

例如,下面的語法使用的schema元素引用了三個最常使用的命名空間:

前兩個屬性用xml命名空間來標識w3c中的兩個xml schema規範。第乙個 xmlns屬性包含了基本的xmlschema元素,比如element, attribute, complextype, group,******type等。第二個xmlns屬性定義了標準的xml schema屬性型別例如string, float, integer等。

預設命名空間

對於任何乙個xml schema定義文件(xsd)都有乙個最頂層的schema (xsd)元素。而且該schema (xsd)元素定義必須包含命名空間: http://www.w3.org/2001/xmlschema

作為命名空間的識別符號(在宣告中作為元素或屬性的字首),你也可以不使用xsd或xsi。

下面我們分別來觀察schema和xml例項文件中相關的命名空間。

比如前面介紹student.xsd的導言是這樣的:

xmlns="http://www.w3.org/2001/xmlschema"這是標準命名空間,解析器的確會去找的,但由於它是w3c的標準,所以我想每個xml的解析器都應該有乙個備份。

這裡的targetnamespace屬性表示了該shema所對應的命名空間的uri。也就是說在引用該schema的其它文件中要宣告命名空間,其uri應該是targetnamespace的屬性值。

例如在這裡因為要用到student.xsd自己定義的擴充套件資料型別,所以也宣告的命名空間xmlns:sl="http://www.xml.org.cn/namespaces/studentlist"。

我們再來看由該schema規定的xml文件的開頭將是什麼樣子:

其中預設命名空間宣告xmlns="http://www.xml.org.cn/namespaces/studentlist"就是和剛剛宣告的xml schema的命名空間相結合來規定該xml文件。

xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" 是任何xml例項文件固有的命名空間,當然按照前面所說的命名空間名稱xsi是可以自己規定的。

而xsi:schemalocation="http://www.xml.org.cn/namespaces/studentlist student.xsd"則規定了該命名空間所物件的schema的位置,即在相同路徑的student.xsd檔案。

根據上面的知識解析下面的xml檔案:

<?xml version="1.0"?>

tove

jani

reminder

don't forget me this weekend!

根元素中的幾個屬性都指什麼含義? 請看下面的解析:

此句說明文件的預設命名空間是「http://www.w3schools.com」。

「文件的預設命名空間」,語法是:xmlns="namespaceuri",可用來簡化字首。

這裡定義乙個schema的例項命名空間。只有作了這個定義才能使用schemalocation屬性。

xsi是xml schema instance的意思,該命名空間是專門為只在例項文件中使用的屬性而保留的。因為schemalocation是在這個命名空間中的,所以要引用它。

如上所述,因為我們已經定義了xsi命名空間所以可以使用schemalocation屬性了。

schemalocation屬性由成對的值組成可以有多對。

(因為乙個xml文件可以有多個命名空間,所以schemalocation值可以有多對)

第乙個值「http://www.w3schools.com」是要使用schema進行有效驗證的命名空間的元素。

第二個值「note.xsd」是要使用的schema文件的路徑。

XML 命名空間

xml 命名空間提供了一種避免元素命名衝突的方法。因為xml文件中使用的元素不是固定的,那麼兩個不同的xml文件使用同乙個名字來描述不同型別的元素的情況就可能發生。而這種情況又往往會導致命名衝突。請看下面兩個例子 這個 xml 文件在table元素中攜帶了水果的資訊 bananas 這個 xml 文...

XML 命名空間

xml 命名空間 xml 命名空間提供了一種避免元素命名衝突的方法。命名衝突 因為xml文件中使用的元素不是固定的,那麼兩個不同的xml文件使用同乙個名字來描述不同型別的元素的情況就可能發生。而這種情況又往往會導致命名衝突。請看下面兩個例子 這個 xml 文件在table元素中攜帶了水果的資訊 ba...

xml命名空間

xml命名空間 這個理解起來總感覺有些抽象,不太好懂,自己學的也是一知半解,但是感覺它的存在卻是很不同凡響的,在xml的應用中,給我們帶來了很多方便,也讓xml的功能得到了很大的提公升,自己感覺的,呵呵,有說的不對的地方,不要見笑喲 在進入正題之前,我們先引用乙個例子 bananas 在上面這個xm...