xmlns:xsi=」http://www.w3.org/2001/XMLSchema-instance(xsi:schemaLocation詳解)

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"中xsi的意思是 :
本xml文件中要用到某些來自xsi表明的「http://www.w3.org/2001/XMLSchema-instance」這個命名空間的元素  
好比用來引入無命名空間schema文件的noNamespaceSchemaLocation="XXX";
以及引入自帶命名空間的schema文件的schemaLocation="XXX"這些元素。
這些元素是包含在xsi命名空間中的,全部的xml文件只要引用這些元素 就要引入xsi這個命名空間。   
xsi這三個字母不是硬性規定,只是你們都這麼用,方便閱讀而已。html

 

xsi是http://www.w3.org/2001/XMLSchema-instance的別名。
這樣用於下面元素的時候能夠這樣<xsi:element />而不用帶上長長的uri。
有了命名空間之後,在同一級元素就可使用同一個元素名稱而不會混亂:
<xsi1:element />
<xsi2:element />spring

 

 

在實例中引用模式文檔編程

XML Schema提供了兩個在實例文檔中使用的特殊屬性,用於指出模式文檔的位置。這兩個屬性是:xsi:schemaLocation和xsi:noNamespaceSchemaLocation,前者用於聲明瞭目標名稱空間的模式文檔,後者用於沒有目標名稱空間的模式文檔,它們一般在實例文檔中使用。架構

4.5.7.1  xsi:schemaLocation屬性post

xsi:schemaLocation屬性的值由一個URI引用對組成,兩個URI之間以空白符分隔。第一個URI是名稱空間的名字,第二個URI給出模式文檔的位置,模式處理器將從這個位置讀取模式文檔,該模式文檔的目標名稱空間必須與第一個URI相匹配。咱們看例4-28。spa

例4-28  book6.xmlcode

 

<?xml version="1.0" encoding="GB2312"?>
<book xmlns="http://www.sunxin.org/book"   ①
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  ②
xsi:schemaLocation="http://www.sunxin.org/book http://www.sunxin.org/ 
book.xsd">  ③
<title>《Struts 2深刻詳解》</title>
<author>孫鑫</author>
</book>

① 聲明默認的名稱空間(http://www.sunxin.org/book)。orm

② 聲明XML Schema實例名稱空間(http://www.w3.org/2001/XMLSchema-instance),並將xsi前綴與該名稱空間綁定,這樣模式處理器就能夠識別xsi:schemaLocation屬性。XML Schema實例名稱空間的前綴一般使用xsi。xml

③ 使用xsi:schemaLocation屬性指定名稱空間http://www.sunxin.org/book和模式位置http://www.sunxin.org/book.xsd相關。要注意,在這個例子中,book.xsd中聲明的目標名稱空間要求是http://www.sunxin.org/bookhtm

一個可能的模式文檔book.xsd如例4-29所示。

例4-29  book.xsd

 

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns="http://www.sunxin.org/book" 
targetNamespace="http://www.sunxin.org/book" 
elementFormDefault="qualified">

<xs:element name="book" type="bookType"/>
<xs:complexType name="bookType">
<xs:sequence>
<xs:element name="title" type="xs:string"/>
<xs:element name="author" type="xs:string"/>
</xs:sequence>  
</xs:complexType>
</xs:schema>

實際上,xsi:schemaLocation屬性的值也能夠由多個URI引用對組成,每一個URI引用對之間使用空白符分隔。例4-30的實例文檔使用了多個名稱空間,xsi:schemaLocation屬性的值包含了兩對URI。

例4-30  books.xml

 

<?xml version="1.0" encoding="GB2312"?>
<books xmlns="http://www.sunxin.org/bks" xmlns:p="http://www.sunxin.org/people"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sunxin.org/bks bks.xsd
http://www.sunxin.org/people people.xsd">
<book>
<title>JSP深刻編程</title>
<author>
<p:name>張三</p:name>
<p:title>做家</p:title>
</author>
</book>
<book>
<title>XML從入門到精通</title>
<author>
<p:name>李四</p:name>
<p:title>教師</p:title>
</author>
</book>
</books>

XML Schema推薦標準中指出,xsi:schemaLocation屬性能夠在實例中的任何元素上使用,而不必定是根元素,不過,xsi:schemaLocation屬性必須出如今它要驗證的任何元素和屬性以前。

此外,要注意的是,XML Schema推薦標準並無要求模式處理器必需要使用xsi:schemaLocation屬性,某些模式處理器能夠經過其餘的方式來獲得模式文檔的位置,而忽略xsi:schemaLocation屬性。

xsi:noNamespaceSchemaLocation屬性

xsi:noNamespaceSchemaLocation屬性用於引用沒有目標名稱空間的模式文檔。與xsi:schemaLocation屬性不一樣的是,xsi:noNamespaceSchemaLocation屬性的值是單一的值,只是用於指定模式文檔的位置。例4-31顯示了在實例文檔中xsi:noNamespaceSchema Location屬性的使用。

例4-31  book7.xml

 

<?xml version="1.0" encoding="GB2312"?>
<book xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:noNamespaceSchemaLocation="book.xsd" 
isbn="978-7-121-06812-6" >
<title>《Struts 2深刻詳解》</title>
<author>孫鑫</author>
</book>

與xsi:schemaLocation屬性同樣,xsi:noNamespaceSchemaLocation屬性也能夠在實例中的任何元素上使用,而不必定是根元素,不過,xsi:noNamespaceSchemaLocation屬性必須出如今它要驗證的任何元素和屬性以前。

此外,要注意的是,XML Schema推薦標準並無要求模式處理器必需要使用xsi:noNamespaceSchemaLocation屬性,某些模式處理器能夠經過其餘的方式來獲得模式文檔的位置,而忽略xsi:noNamespaceSchemaLocation屬性。

 

 

=============

http://xj84.iteye.com/blog/1135958

xmlns 說明參見
http://www.cnblogs.com/jhxk/articles/1619105.html

xsi:schemaLocation說明參見http://www.w3school.com.cn/schema/schema_example.asp

 

xsi:schemaLocation中的模式文檔.xsd文件通常都在本地,好比spring

 

<beans default-autowire="byName"

xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:aop="http://www.springframework.org/schema/aop" xmlns:util="http://www.springframework.org/schema/util"

xsi:schemaLocation="http://www.springframework.org/schema/beans 

http://www.springframework.org/schema/beans/spring-beans-2.0.xsd 

http://www.springframework.org/schema/aop 

http://www.springframework.org/schema/aop/spring-aop-2.0.xsd 

http://www.springframework.org/schema/util 

http://www.springframework.org/schema/util/spring-util-2.5.xsd ">

中的.xsd文件都在spring包內,以下圖:


 spring.schemas中定義了文檔的具體地址:

 

 

=============================

http://www.programfan.com/club/showpost.asp?id=24294

schemaLocation 屬性是在 XML 架構實例命名空間 http://www.w3.org/2001/XMLSchema-instance(一般與前綴 xsi 關聯)中定義的,它僅適用於 XML 實例文檔,而不適用於 XML 架構文檔。它區別於在 XML 架構命名空間 http://www.w3.org/2001/XMLSchema 中定義的 schemaLocation 屬性。 

xsi:schemaLocation 屬性提供一種方法來查找在 XML 實例文檔中定義的命名空間的 XML 架構定義。它的值是用空白分隔的統一資源標識符 (URI) 對的列表,其中的每一對 URI 都依次包含一個命名空間以及該命名空間的 XML 架構定義(一般爲 .xsd 文件)的位置。 

當將 XML 文檔反序列化爲對象時,XmlSerializer 類忽略 xsi:schemaLocation 屬性。可是,在驗證 XML 文檔時,XmlValidatingReader 類可使用該屬性值來獲取 XML 架構定義。

//JDom裏面Namespace是單體模式,報「xsi命名空間已定義」的錯誤就是由於程序裏實例化了兩個URL都爲xsi而Value不一樣的Namespace實例

相關文章
相關標籤/搜索