一、DTD約束xml
1、約束介紹
由于xml的標簽由用戶自己定義,因此在開發的時候,每個人都可以根據自己的需求來定義xml標簽,這樣導致專案中的xml難以維護,因此需要使用一定的規范機制來約束xml檔案中的標簽書寫,
2、DTD約束快速入門
第一步:先自己定義一個xml檔案
<?xml version="1.0" encoding="UTF-8"?> <users> <user> <name>zhangsan</name> <age>23</age> <addr>shanghai</addr> </user> <user> <name>lisi</name> <age>24</age> <addr>beijing</addr> </user> </users>
第二步:書寫DTD檔案來約束xml檔案
DTD檔案在定義的時候,擴展名就是dtd,
在xml檔案中有多少個標簽,就在dtd中書寫多少個ELEMENT標簽
<?xml version="1.0" encoding="UTF-8" ?> <!ELEMENT users (user+) > <!ELEMENT user (name,age,addr) > <!ELEMENT name (#PCDATA) > <!ELEMENT age (#PCDATA)> <!ELEMENT addr (#PCDATA)>
3、DTD引入方式
DTD主要用來約束xml檔案,DTD可以單獨寫在檔案中,也可以直接定義在xml中,可以在xml中引入第三方的公共DTD, 外部DTD的引入方式:外部DTD主要指的一個獨立的DTD檔案, 首先要書寫DTD檔案,然后在要被約束的xml檔案中引入, <!DOCTYPE 檔案根結點 SYSTEM "DTD檔案的URL"> 檔案根結點 指的是當前xml中的根標簽, SYSTEM 引入的系統中存在檔案 "DTD檔案的URL" DTD存放的位置 引入公共的DTD: <!DOCTYPE 檔案根結點 PUBLIC "DTD名稱" "DTD檔案的URL"> 檔案根結點 指的是當前xml中的根標簽, PUBLIC 表示當前引入的DTD是公共的DTD 在xml中直接書寫DTD <!DOCTYPE 根標簽名 [ 具體的標簽的約束 ]>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE users[ <!ELEMENT users (user+) > <!ELEMENT user (name,age,addr) > <!ELEMENT name (#PCDATA) > <!ELEMENT age (#PCDATA) > <!ELEMENT addr (#PCDATA) > ]> <users> <user> <name>zhangsan</name> <age>23</age> <addr>shanghai</addr> </user> <user> <name>lisi</name> <age>24</age> <addr>beijing</addr> </user> </users>
4、DTD的語法介紹
元素
當定義DTD約束xml時候,這時需要在DTD中使用ELEMENT來定義當前xml中可以出現的標簽名稱, 格式: <!ELEMENT 標簽名 約束> 約束來限定當前標簽中可以有的子標簽,或者當前標簽中可以書寫的內容 在定義標簽名的時候,約束中可以使用一些符號標簽具體出現次數 ? 零次或者一次 * 零次或者多次 + 一次或者多次 users (user+) 表示當前的users標簽下可以有一個或者多個user標簽 , 用來限定當前的子標簽出現的順序user (name,age,addr) user標簽下只能有name age addr 子標簽,并且必須按照name age addr的順序書寫 | user (name|age,addr) user下可以name或者age ,但必須有addr,并且addr必須name或age后面 #PCDATA 表明該元素可包含任何字符資料,但不能在其中包含任何子元素,只有 PCDATA 的元素通過圓括號中的 #PCDATA 進行宣告 EMPTY 表明該元素不能有任何子元素或文本,僅可以使用屬性, ANY 表該元素中可以包含任何DTD中定義的元素內容 如:<!ELEMENT note ANY> <!ELEMENT age EMPTY > 當前的age標簽是個空標簽,它不能有文本內容,
屬性
屬性的型別:
CDATA 屬性的value值可以是文本資料
(值1 | 值2 | 值3.... ) 表示當前的屬性的value值只能是當前括號中的值
ID 表示唯一,對當前標簽上的id屬性進行限定,并且同一個xml中id不能重復
型別 描述
CDATA 值為字符資料 (character data)
(en1|en2|..) 此值是列舉串列中的一個值
ID 值為唯一的 id
IDREF 值為另外一個元素的 id
IDREFS 值為其他 id 的串列
NMTOKEN 值為合法的 XML 名稱
NMTOKENS 值為合法的 XML 名稱的串列
ENTITY 值是一個物體
ENTITIES 值是一個物體串列
NOTATION 此值是符號的名稱
xml: 值是一個預定義的 XML 值
屬性的型別和約束的組合:
CDATA REQUIRED
CDATA Implied
CDATA fixed
CDATA “值”
(值1 | 值2 | 值3.... ) REQUIRED
ID REQUIRED
物體
物體用于為一段內容創建一個別名,以后在XML檔案中就可以使用別名參考這段內容了, 在DTD定義中,一條<!ENTITY …>陳述句用于定義一個物體, 物體可以理解成Java中預先定義好的一個常量,然后xml檔案中就可以引入當前這個定義的物體,
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE users[ <!ELEMENT users (user+) > <!ELEMENT user (name,age,addr) > <!ELEMENT name (#PCDATA) > <!ELEMENT age EMPTY > <!ELEMENT addr (#PCDATA) > <!ATTLIST user id ID #REQUIRED > <!ENTITY abc "上海傳智播客123123"> ]> <users> <user id="u001"> <name>zhangsan</name> <age></age> <addr>&abc;</addr> </user> <user id="u002"> <name>lisi</name> <age/> <addr>&abc;</addr> </user> </users>
二、Schema約束xml
1、xml Schema介紹
Schema它也來約束xml檔案的,DTD在約束xml的時候一個xml中只能引入一個DTD,同時DTD它無法對屬性以及標簽中的資料做資料型別的限定,
Schema它是用來代替DTD來約束xml,
Schema檔案本身就是使用xml檔案書寫的,同時它對需要約束的xml中的資料有嚴格的限定,學習Schema主要來學習W3C組織定義的如何在Schema中去約束xml的標簽以及屬性,還有屬性的資料型別,以及標簽中子標簽的順序,
要定義一個Schema檔案,這時它的擴展名必須是.xsd,在這個檔案中根元素必須是schema,
使用Schema來約束xml,Schema在書寫的時候,只需要使用W3C組織提前定義的限定標簽的,以及限定的屬性的那個標簽即可,
2、Schema快速入門
第一步:書寫xml檔案
<?xml version="1.0" encoding="UTF-8"?> <books> <book> <name>JavaWEB</name> <author>老畢</author> <price>182</price> </book> <book> <name>SSH</name> <author>老于</author> <price>152</price> </book> </books>
第二步:定義schema檔案
在定義Schema檔案的時候,由于這個Schema檔案本身就是xml,它也要受到別的約束,而這個約束是W3C組織提前定義好的, 在Schema檔案中需要提前引入進來在根標簽中使用屬性進行進入: <schema xmlns="http://www.w3.org/2001/XMLSchema" 引入W3C定義的schema書寫的規范 targetNamespace="http://www.itcast.org/book" 給當前的Schema檔案起名字(命名空間) 作用是當哪個xml要引入這個schema約束的時候,必須通過當前targetNamespace 后面書寫的uri地址來引入
<?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.itcast.org/book" elementFormDefault="qualified"> <element name="books"> <complexType> <sequence> <element name="book"> <complexType> <sequence> <element name="name"></element> <element name="author"></element> <element name="price"></element> </sequence> </complexType> </element> </sequence> </complexType> </element> </schema>
第三步:在xml檔案中引入當前的這個Schema
<books xmlns="http://www.itcast.org/book" 它是schema檔案中的targetNamespace 屬性后面的值 xsi:schemaLocation="http://www.itcast.org/book book.xsd" 這個是在引入當前的schema檔案的真實路徑 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 說明當前的xml是schema一個實體檔案 >
3、Schema的名稱空間
在定義Schema檔案的時候,需要在<schema>根標簽中使用 targetNamespace 屬性定義當前schema定義名稱(只是一個分配的名字,根本沒有指向任何檔案),在被約束的xml檔案中先根據這個名稱引入當前的schema檔案,然后在使用 xsi:schemaLocation=”” 引入具體的schema檔案,(因為targetNamespace屬性定義的schema名稱,只是一個名稱而已,所以在xml檔案中需要通過schemaLocation來宣告指定所遵循的Schema檔案的具體位置) (xsi:schemaLocation 使用它引入某個schema時,先要使用名稱空間, 空格 ,檔案名) 名稱空間主要功能是用于來 elementFormDefault="qualified|unqualified" 在schema中書寫qualified ,在限定xml中的定義的標簽名必須使用定義的名稱空間, unqualified 要求根元素必須使用名稱空間,而子元素不能使用名稱空間,
4、Schema中的標簽解釋
<?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.itcast2.org/book" elementFormDefault="qualified"> <element name="books"> <!--name代表當前的xml中可以書寫標簽名稱 type資料型別--> <complexType ><!-- complexType 當前的element宣告的標簽是復雜標簽時 ,需要使用complexType來宣告子標簽--> <sequence> <!-- 復雜標簽是指有屬性,或者有子標簽,或者有屬性有子標簽的標簽 簡單標簽是指只有文本內容的標簽 <name>zhangsan</name> 簡單標簽 <name id="u001"></name> 復雜標簽 sequence 代表當前子標簽的順序 --> <element name="book" maxOccurs="unbounded"> <complexType mixed="true"><!—mixed屬性值為true,book元素間就可以出現字符文本資料了--> <sequence> <element name="name"></element> <element name="author"></element> <element name="price" type="integer"></element> <any></any> </sequence> </complexType> </element> </sequence> </complexType> </element> </schema>
Name.xsd
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/name" elementFormDefault="qualified"> <element name="name"></element> </schema>
Book2.xml
<?xml version="1.0" encoding="UTF-8"?> <aa:books xmlns:aa="http://www.itcast2.org/book" xmlns:bb="http://www.example.org/name" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.itcast2.org/book book2.xsd http://www.example.org/name name.xsd" > <aa:book> aa:sjdlkfjlkdsjflk <aa:name >JavaWEB</aa:name> <aa:author >老畢</aa:author> <aa:price>182</aa:price> <bb:name>sdgs</bb:name> </aa:book> </aa:books>
此文轉載于https://www.cnblogs.com/cb0327/ 詳細請看https://www.cnblogs.com/cb0327/p/4967782.html#_label2_0
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/293479.html
標籤:Java
下一篇:curl的基本使用
