日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

xml的约束

發布時間:2023/12/10 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 xml的约束 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
為什么需要約束?
? ? ? ?比如現在定義一個person的xml文件,只想要這個文件里面保存人的信息,比如name age等,但是如果在xml文件中寫了一個標簽<貓>,發現可以正常顯示,因為符合語法規范。但是貓肯定不是人的信息,xml的標簽是自定義的,需要技術來規定xml中只能出現的元素,這個時候需要約束。

? ? ? ?xml的約束的技術 : dtd約束schema約束?

dtd約束
* 創建一個文件 后綴名 .dtd
步驟:
(1)看xml中有多少個元素 ,有幾個元素,在dtd文件中寫幾個 <!ELEMENT>
(2)判斷元素是簡單元素還是復雜元素
- 復雜元素:有子元素的元素
<!ELEMENT 元素名稱 (子元素)>
- 簡單元素:沒有子元素
<!ELEMENT 元素名稱 (#PCDATA)>
(3)需要在xml文件中引入dtd文件
<!DOCTYPE 根元素名稱 SYSTEM "dtd文件的路徑">


dtd的三種引入方式
(1)引入外部的dtd文件
<!DOCTYPE 根元素名稱 SYSTEM "dtd路徑">
(2)使用內部的dtd文件
<!DOCTYPE 根元素名稱 [
<!ELEMENT person (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>]>
(3)使用外部的dtd文件(網絡上的dtd文件)
<!DOCTYPE 根元素 PUBLIC "DTD名稱" "DTD文檔的URL">
- 后面學到框架 struts2 使用配置文件 使用 外部的dtd文件
- <!DOCTYPE struts PUBLIC ? "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" ? ?
? "http://struts.apache.org/dtds/struts-2.0.dtd">


使用dtd定義元素
* 語法: <!ELEMENT 元素名 約束>


* 簡單元素:沒有子元素的元素
<!ELEMENT name (#PCDATA)>
*** (#PCDATA): 約束name是字符串類型
*** EMPTY : 元素為空(沒有內容)
- <sex></sex>
*** ANY:任意
* 復雜元素:
<!ELEMENT person (name,age,sex,school)>
- 子元素只能出現一次
* <!ELEMENT 元素名稱 (子元素)>


* 表示子元素出現的次數
+ : 表示一次或者多次
? :表示零次或者一次
* :表示零次或者多次

* 子元素直接使用逗號進行隔開 ,
** 表示元素出現的順序


* 子元素直接使用|隔開
** 表示元素只能出現其中的任意一個

使用dtd定義屬性
* 語法: <!ATTLIST 元素名稱
屬性名稱 屬性類型 屬性的約束>

* 屬性類型
- CDATA: 字符串
-<!ATTLIST birthday
ID1 CDATA #REQUIRED>

- 枚舉 : 表示只能在一定的范圍內出現值,但是只能每次出現其中的一個
** 紅綠燈效果
** (aa|bb|cc)
- <!ATTLIST age
ID2 (AA|BB|CC) ?#REQUIRED>

- ID: 值只能是字母或者下劃線開頭
- <!ATTLIST name?
ID3 ID ? #REQUIRED>

* 屬性的約束
- #REQUIRED:屬性必須存在

- #IMPLIED:屬性可有可無

- #FIXED: 表示一個固定值 #FIXED "AAA"
- 屬性的值必須是設置的這個固定值
- <!ATTLIST sex
ID4 CDATA #FIXED "ABC">
- 直接值
* 不寫屬性,使用直接值
* 寫了屬性,使用設置那個值
- <!ATTLIST school
ID5 CDATA "WWW">


schema約束

* 創建一個schema文件 后綴名是 .xsd
** 根節點 <schema>
** 在schema文件里面
** 屬性 ?xmlns="http://www.w3.org/2001/XMLSchema"
- 表示當前xml文件是一個約束文件
** targetNamespace="http://www.cust.edu.cn/20151111"
- 使用schema約束文件,直接通過這個地址引入約束文件
** elementFormDefault="qualified"
步驟
(1)看xml中有多少個元素
<element>
(2)看簡單元素和復雜元素
* 如果復雜元素
<complexType>
<sequence>
子元素
</sequence>
</complexType>
(3)簡單元素,寫在復雜元素的
<element name="person">
<complexType>
<sequence>
<element name="name" type="string"></element>
<element name="age" type="int"></element>
</sequence>
</complexType>
</element>
(4)在被約束文件里面引入約束文件
<person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.itcast.cn/20151111"
xsi:schemaLocation="http://www.itcast.cn/20151111 1.xsd">

** xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-- 表示xml是一個被約束文件
** xmlns="http://www.cust.edu.cn/20151111"
-- 是約束文檔里面 targetNamespace
** xsi:schemaLocation="http://www.itcast.cn/20151111 1.xsd">
-- targetNamespace 空格 ?約束文檔的地址路徑

<sequence>:表示元素的出現的順序
<all>: 元素只能出現一次
<choice>:元素只能出現其中的一個
maxOccurs="unbounded": 表示元素的出現的次數
<any></any>:表示任意元素

* 可以約束屬性
* 寫在復雜元素里面
***寫在 </complexType>之前

<attribute name="id1" type="int" use="required"></attribute>
- name: 屬性名稱
- type:屬性類型 int stirng
- use:屬性是否必須出現 required

復雜的schema約束
<company xmlns = "http://www.example.org/company"
xmlns:dept="http://www.example.org/department"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/company company.xsd http://www.example.org/department department.xsd"?>
* 引入多個schema文件,可以給每個起一個別名

<employee age="30">
<!-- 部門名稱 -->?
<dept:name>100</dept:name>
* 想要引入部門的約束文件里面的name,使用部門的別名 detp:元素名稱
<!-- 員工名稱 -->
<name>王曉曉</name> ??
</employee>

總結

以上是生活随笔為你收集整理的xml的约束的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。