xsd中schemaLocation使用
xsi:schemaLocation有何作用?
xsi:schemaLocation屬性其實是Namespace為http://www.w3.org/2001/XMLSchema-instance裡的schemaLocation屬性,正是因為我們一開始宣告瞭
1 | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
這裡才寫作xsi:schemaLocation(當然一般都使用這個字首)。它定義了XML Namespace和對應的 XSD(Xml Schema Definition)文件的位置的關係。它的值由一個或多個URI引用對組成,兩個URI之間以空白符分隔(空格和換行均可)。第一個URI是定義的 XML Namespace的值,第二個URI給出Schema文件的位置,Schema處理器將從這個位置讀取Schema文件,該文件的targetNamespace必須與第一個URI相匹配。例如:
1 2 | xsi:schemaLocation="http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd" |
這裡表示Namespace為http://www.springframework.org/schema/context的Schema的位置為http://www.springframework.org/schema/context/spring-context.xsd。這裡我們可以開啟這個Schema的位置,下面是這個文件的開始部分:
1 2 3 4 5 6 7 8 9 | < xsd:schema xmlns = "http://www.springframework.org/schema/context" xmlns:xsd = "http://www.w3.org/2001/XMLSchema" xmlns:beans = "http://www.springframework.org/schema/beans" xmlns:tool = "http://www.springframework.org/schema/tool" <!-- 這裡的targetNamespace和上方xsi:schemaLocation中的第一個URI匹配 --> targetNamespace="http://www.springframework.org/schema/context" elementFormDefault="qualified" attributeFormDefault="unqualified"> |
在例項中引用模式文件
XML Schema提供了兩個在例項文件中使用的特殊屬性,用於指出模式文件的位置。這兩個屬性是:xsi:schemaLocation和xsi:noNamespaceSchemaLocation,前者用於宣告瞭目標名稱空間的模式文件,後者用於沒有目標名稱空間的模式文件,它們通常在例項文件中使用。
xsi:schemaLocation屬性
xsi:schemaLocation屬性的值由一個URI引用對組成,兩個URI之間以空白符分隔。第一個URI是名稱空間的名字,第二個URI給出模式文件的位置,模式處理器將從這個位置讀取模式文件,該模式文件的目標名稱空間必須與第一個URI相匹配。我們看例4-28。
例4-28 book6.xml
<?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)。
② 宣告XML Schema例項名稱空間(http://www.w3.org/2001/XMLSchema-instance),並將xsi字首與該名稱空間繫結,這樣模式處理器就可以識別xsi:schemaLocation屬性。XML Schema例項名稱空間的字首通常使用xsi。
③ 使用xsi:schemaLocation屬性指定名稱空間http://www.sunxin.org/book和模式位置http://www.sunxin.org/book.xsd相關。要注意,在這個例子中,book.xsd中宣告的目標名稱空間要求是http://www.sunxin.org/book。
一個可能的模式文件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屬性。
、、、、、、、、、、、、、、、、、、、、
我來給你解釋一下吧,首先這個檔案是一個xml檔案,那麼他裡面的所有內容都符合xml語法規範,開頭的<project></project>這最外層同樣也是一個xml檔案的標籤,後面那一長串也就是所謂的屬性,其中xmlns表示名稱空間,xmlns="http://maven.apache.org/POM/4.0.0" 這表示預設名稱空間,而下面xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 這個名稱空間裡面的元素或者屬性就必須要以xsi:這種方式來寫,比如schemaLocation就是他的一個屬性,所以寫成xsi:schemaLocation,而預設名稱空間不帶類似xsi這種,其實xml標籤名稱有個專業叫法叫做QName,而如果沒有前面的xsi:這種一般叫做NCName。所以你看mvn裡面的<dependency>這種就是預設名稱空間下面的元素,最後那一行就表示把定義這個名稱空間的schema檔案給引用進來,好讓eclipse這型別工具能夠解析和驗證你的xml檔案是否符合語法規範。等同於<import namespace="xxx" schemaLocation="xxx.xsd"/>。
相關文章
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">報錯HTTPMavenApache
- XSD 使用概述
- Web service,XSD及WSDL的一些使用Web
- XSD 空元素概述
- XSD 複合元素概述
- XSD 指示器概述
- XSD 僅含元素概述
- XSD 簡易元素概述
- XSD 數值資料型別資料型別
- IntelliJ IDEA 新增本地xsd檔案IntelliJIdea
- XSD 日期和時間資料型別資料型別
- Dobbo的xsd更換為apache地址之後,SpringMVC中無法找到名稱空間的問題ApacheSpringMVC
- XML Schema(XSD)詳解:定義 XML 文件結構合法性的完整指南XML
- 轉載:為什麼在 Spring 的配置裡,最好不要配置 xsd 檔案的版本號Spring
- wepy 使用中...
- sqlalchemy中relationship使用SQL
- JPA中@ElementCollection使用
- MySql 中 select 使用MySql
- Golang中context使用GolangContext
- Redis在.net中的使用(2).net專案中的Redis使用Redis
- html中如何使用svg?HTMLSVG
- Mybatis中foreach的使用MyBatis
- Docker中Mq的使用DockerMQ
- django中orm的使用DjangoORM
- SMP PPI中斷使用
- drools中query的使用
- python中*args的使用Python
- php中foreach的使用PHP
- python中ThreadPoolExecutor如何使用Pythonthread
- mxgraph中mxStencil使用教程
- Java 中 RMI 的使用Java
- Intellij IDEA 中 使用 GitIntelliJIdeaGit
- Dart中的Future使用Dart
- springboot中RedisTemplate的使用Spring BootRedis
- docker中command的使用Docker
- java中Scanner類使用Java
- spring boot中zookeeper使用Spring Boot
- spring boot中redis使用Spring BootRedis