schema约束文档与xml文件详解
schema約束文檔與xml文件詳解
- 1.前言
- 2.schema約束文檔(.xsd文件)
- 2.1 targetNameSpace
- 2.2官方文檔與自定義文檔的關系
- 2.3 聲明名稱空間
- 2.4 schema文檔中的全局成分與非全局成分
- 2.5 完整的自定義schema文檔
- 3.xml文件
- 3.1 聲明名稱空間
- 3.2 xml中名稱空間使用的范疇
- 3.3 schemaLocation
- 3.4 noNamespaceSchemaLocation
- 3.5 官方schema,自定義schema,xml之間的關系
- 4.感謝
1.前言
?寫這篇文章的目的是為了不要讓自己知其然而不知其所以然.網上看了幾篇博客后覺得有點亂,自己整理一下以供回顧.
?XML和Schema具有無關平臺,技術廠商,簡單,規范統一等特點,極具開放性,所以使用極為廣泛,而且使用簡單.
?名稱空間是W3C推薦標準\提供的一種統一命名XML文檔中的元素和屬性的機制。使用名稱空間可以明確標識和組合XML文檔中來自不同標記詞匯表的元素和屬性,避免了名稱之間的沖突。
?使用過DTD的人應該知道,命名沖突是DTD的一大問題,而Schema里引入了命名空間的概念,就很好的解決了這個問題。
?先暫時這么理解:.xsd文件中除了文檔聲明,它的根標簽是<schema.>標簽,而xml文檔中的根標簽是他引用的其他schema文件中自定義的根元素
2.schema約束文檔(.xsd文件)
先看兩個schema約束文檔
自定義的schema約束文檔:
Spring官方定義的schema文檔:
?仔細觀察兩張圖片中的內容就會發現幾處不同點,下面詳細解釋自定義schema文檔中的內容,解釋完了就能理解Spring的schema文檔.
2.1 targetNameSpace
targetNameSpace:定義名稱空間(名稱空間又叫命名空間),將當前自定義的schema文檔與這個名稱空間綁定,方便后面的.xml文件引用.
2.2官方文檔與自定義文檔的關系
"http://www.w3.org/2001/XMLSchema"名稱空間是W3C提供的,是所有自定義schema都要遵守的約束規范.其中定義了schema,element, attribute, complexType, group, simpleType等元素,自定義文檔中使用這些元素來定義新的元素,屬性等.
2.3 聲明名稱空間
?名稱空間聲明的一般形式為:第一部分是一個關鍵字xmlns:,第二部分是名稱空間的前綴(別名),第三部分是一個等號,第四部分是雙引號,將第五部分的名稱空間標識URI包括起來。需要注意的是,名稱空間的前綴不能為xml,因為在XML中這個字符串是保留作特殊用途的。如下:
xmlns:tns=“http://www.whtest.com/” //其中tns為前綴。(顯示聲明)
還可以隱式聲明名稱空間,即省略掉冒號和名稱空間前綴。例:
xmlns=“http://www.whtest.com/” //注意在一個文檔中只能有一個隱式聲明的命名空間
?聲明名稱空間的作用:在引用當前schema文檔的.xml文件中可以使用<前綴:元素></前綴:元素>來使用schema文檔中定義的元素,避免了元素名沖突的問題.注意,隱式聲明的名稱空間使用其中定義的元素時可以直接<元素></元素>.這樣就能理解兩張圖中對schema標簽用法的不同.
?schema文檔中只會聲明兩個名稱空間,一個是: “http://www.w3.org/2001/XMLSchema” 官方(一般隱式聲明)
另一個是targetNameSpace綁定的名稱空間(一般顯示聲明)
xml文件中聲明名稱空間的方式相同.
2.4 schema文檔中的全局成分與非全局成分
?全局成分:全局成分指的是元素xsd:schema的直接子節點,包括元素聲明、屬性聲明、復雜/簡單類型定義、組定義、屬性組定義。
?非全局成分:百度了半天都不知道是個什么東西.總之,有時希望將非全局成分定義在目標空間中去,可使用下面方法。
屬性elementFormDefault的默認值是unqualified,也就是規定了只有全局成分才被定義在目標名稱空間中。將elementFormDefault的值賦為qualified,使得目標名稱空間包含非全局的元素定義。同樣,使屬性attributeFormDefault的值賦為qualified,可使得目標名稱空間包含非全局屬性定義。如下:
這樣大致就對schema文檔有了一個完整的概念.
2.5 完整的自定義schema文檔
<?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/book" xmlns:tns="http://www.example.org/book" elementFormDefault="qualified"><!-- 每一個元素對應一個element標簽 --><element name="books"><!-- 包含子元素或屬性的元素被稱為 `復雜元素` --><complexType><!-- 強調子元素出現的順序 --><sequence><element name="book" minOccurs="1" maxOccurs="unbounded"><complexType><sequence><!-- 對于擁有內容的元素, 需要編寫 type 屬性 --><element name="name" type="string"></element><element name="price" type="string"></element></sequence><!-- book 標簽有 author 屬性, 類型是字符串, 該屬性必須填寫 --><attribute name="author" type="string" use="required"></attribute> </complexType> </element> </sequence></complexType></element> </schema>3.xml文件
先看一下Spring的配置文件applicationContext.xml
3.1 聲明名稱空間
?xml中聲明名稱空間的方式與schema文檔中一樣,但是xml文件中會聲明多個名稱空間(引用了多個schema時)
3.2 xml中名稱空間使用的范疇
?在XML中,名稱空間的使用涉及范疇的概念,范疇即名稱空間的覆蓋范圍,它指的是哪些元素和屬性在該名稱空間中,哪些不在該名稱空間中。名稱空間既可以限定整個XML文檔,也可以只針對XML文檔中的一部分。
1.名稱空間限制整個xml文檔:
2.名稱空間只針對XML文檔中的一部分
<?xml version=”1.0”?> <member_details><name xmlns=”http://www.testns.com/ns.xsd”>Tom</name><age>12</age><sex>male</sex> </member_details3.嵌套的命名空間
下面展示一些 內聯代碼片。
3.3 schemaLocation
?在了解schemaLocation之前,先了解一下在xml文件中聲明的一個名稱空間:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"這句話創建了一個可以引入其他schema文件的命名空間.
?schemaLocation 屬性引用具有目標名稱空間的 XML 架構文檔(引用schema文檔,因為schema本質也是xml)。該xml文件中用到的所有新創的元素、屬性等的.xsd文件都必須在這里聲明。
<xsi:schemaLocation=“list of anyURI” >
?其中的anyURI是一個架構位置,該架構包含限定的(具有名稱空間的架構)架構構造。每一對中的第一個 URI 引用是名稱空間名稱,第二個則是描述名稱空間的架構的位置。
將具有目標名稱空間的架構文檔與實例文檔相關聯。可以列出多對 URI 引用,每一對都有不同的名稱空間名稱部分。
根據萬維網聯合會 (W3C) XML 架構建議,XML 實例文檔可以同時指定 xsi:schemaLocation 和 xsi:noNamespaceSchemaLocation 屬性。此外,還可以多次列出同一個命名空間。如圖:
3.4 noNamespaceSchemaLocation
?noNamespaceSchemaLocation 屬性引用沒有目標名稱空間的 XML 架構文檔。
<xsi:noNamespaceSchemaLocation=“anyURI” >
與SchemaLocation相同anyURI是一個架構位置,該架構包含非限定的(沒有名稱空間的架構)架構構造。
?不要求 XML 架構有名稱空間。若要為沒有目標名稱空間的 XML 架構指定位置,請使用 noNamespaceSchemaLocation 屬性。此屬性中引用的 XML 架構不能有目標名稱空間。因為此屬性不接受 URL 列表,所以只能指定一個架構位置。
?根據萬維網聯合會 (W3C) XML 架構建議,XML 實例文檔可以同時指定 xsi:schemaLocation 和 xsi:noNamespaceSchemaLocation 屬性。
下面展示一些 內聯代碼片。
3.5 官方schema,自定義schema,xml之間的關系
官方文檔:"http://www.w3.org/2001/XMLSchema
自定義文檔schema:聲明官方文檔后,在其基礎上自定義新的元素,屬性等
xml:可引入多個自定義文檔
4.感謝
寫這篇文章,參考了https://blog.csdn.net/wanghuan203/article/details/9203621//中的許多內容,在此表示感謝.雖然有我看了很多遍才懂.稍微調侃一下.88
總結
以上是生活随笔為你收集整理的schema约束文档与xml文件详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据科学环境Anaconda及其相关组件
- 下一篇: 聚类分析与相关算法(Kmeans等)详解