XML:Schema、三種編寫Schema的方式
針對DTD檔案的不足之處:(不能出現相同名稱的元素,DTD的語法不是xml的語法)出現的Schema,需要使用什麼名稱空間的東西就先引入,使用xmlns,後面加字尾,不加就不用字尾
定義Schema檔案,字尾名為xsd
引入XMLSchema那個名稱空間,你就可以使用schema、targetNamespace等元素了,它的定義文件在eclipse工具中已經有了,肯定由dtd校驗,最初始的。
在xml中引入schema檔案校驗、提示
DTD和Schema其實可以看做解析XML的程式(比如框架)和書寫XML檔案之間的約定(比如我們程式設計師),DTD和Schema由框架提供,就約定了XML的書寫模式,你按照這個模式寫,那麼框架的程式在解析的時候就不會出錯。比如dtd中定義*,表示可以定義0到多個元素,那我框架的解析程式就會提供一個list來儲存;dtd中定義user?,表示可以出現0或1個User型別,那解析程式就會定義一個User變數來接收。否則你們之間就會出錯。
編寫Schema的三種方式:
1. Russia Roll(俄羅斯玩偶)
<?xmlversion="1.0" encoding="UTF-8"?>
<schemaxmlns="http://www.w3.org/2001/XMLSchema"targetNamespace="http://www.example.org/02"
xmlns:tns="http://www.example.org/02"elementFormDefault="qualified">
<element name="books">
<complexType>
<!-- maxOccurs表示最大出現次數-->
<sequencemaxOccurs="unbounded">
<elementname="book">
<complexType>
<sequenceminOccurs="1" maxOccurs="unbounded">
<elementname="title" type="string" />
<elementname="content" type="string" />
<choice>
<elementname="author" type="string" />
<elementname="authors">
<complexType>
<all><!--每個元素只能出現一次 -->
<elementname="author" type="string"/>
</all>
</complexType>
</element>
</choice>
</sequence>
<attributename="id" type="int" use="required"/>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>
優點:結構清晰;缺點:型別不能重用
根據它寫的xml檔案
<?xmlversion="1.0" encoding="UTF-8"?>
<book:booksxmlns:book="http://www.example.org/02"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="02.xsd">
<book:book id="1">
<book:title>Java inaction</book:title>
<book:content>Java isgood</book:content>
<book:author>Bruce</book:author>
</book:book>
<book:book id="2">
<book:title>SOA inaction</book:title>
<book:content>soa isdifficult</book:content>
<book:authors>
<book:author>Jike</book:author>
</book:authors>
</book:book>
</book:books>
2. Salami Slice(臘肉切片)
<?xml version="1.0"encoding="UTF-8"?>
<schemaxmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/03"
xmlns:tns="http://www.example.org/03"
elementFormDefault="qualified">
<elementname="book" type="tns:bookType"></element>
<elementname="id" type="int"/>
<elementname="title" type="string"/>
<elementname="content" type="string"/>
<complexTypename="bookType">
<sequence>
<elementref="tns:id"/>
<elementref="tns:title"/>
<elementref="tns:content"/>
</sequence>
</complexType>
</schema>
優點:型別最大程度重用;缺點:結構不清晰,根節點都不好確定
<?xml version="1.0"encoding="UTF-8"?>
<titlexmlns="http://www.example.org/03"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/03">
12asdasdasd
</title>
3. Venetian Blind(百葉窗)
<?xml version="1.0"encoding="UTF-8"?>
<schemaxmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/04"
xmlns:tns="http://www.example.org/04"
elementFormDefault="qualified">
<elementname="person" type="tns:personType"/>
<complexTypename="personType">
<sequence>
<elementname="name" type="string"/>
<elementname="age" type="tns:ageType"/>
<elementname="email" type="tns:emailType"/>
</sequence>
<attributename="sex" type="tns:sexType"/>
</complexType>
<simpleTypename="emailType">
<restrictionbase="string">
<patternvalue="(\w+\.*)*\[email protected]\w+\.[A-Za-z]{2,6}"/>
<minLengthvalue="6"/>
<maxLengthvalue="255"/>
</restriction>
</simpleType>
<simpleTypename="ageType">
<restrictionbase="int">
<minInclusivevalue="1"/>
<maxExclusivevalue="150"/>
</restriction>
</simpleType>
<simpleTypename="sexType">
<restrictionbase="string">
<enumerationvalue="男"/>
<enumerationvalue="女"/>
</restriction>
</simpleType>
</schema>
根據以上寫就的xml
<?xml version="1.0"encoding="UTF-8"?>
<personxmlns="http://www.example.org/04"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/04"sex="男">
<name>搜尋</name>
<age>149</age>
<email>[email protected]</email>
</person>
最好的使用Schema的方式【一個Schema表示一個類,做到分離、模組化】
Student.xsd
<?xml version="1.0"encoding="UTF-8"?>
<xsd:schemaxmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/classroom"
xmlns:tns="http://www.example.org/classroom"
elementFormDefault="qualified">
<xsd:elementname="student" type="tns:studentType"/>
<xsd:complexTypename="studentType">
<xsd:sequence>
<xsd:elementname="name" type="xsd:string"/>
<xsd:elementname="sex" type="tns:sexType"/>
</xsd:sequence>
</xsd:complexType>
<xsd:simpleTypename="sexType">
<xsd:restrictionbase="xsd:string">
<xsd:enumerationvalue="男"/>
<xsd:enumerationvalue="女"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
classroom.xsd
<?xml version="1.0"encoding="UTF-8"?>
<xsd:schemaxmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/classroom"
xmlns:tns="http://www.example.org/classroom"
elementFormDefault="qualified">
<xsd:includeschemaLocation="student.xsd"/>
<xsd:elementname="classroom" type="tns:classroomType"/>
<xsd:complexTypename="classroomType">
<xsd:sequence>
<xsd:elementname="grade" type="tns:gradeType"/>
<xsd:elementname="name" type="xsd:string"/>
<!-- <xsd:element name="stus">
<xsd:complexType>
<xsd:sequenceminOccurs="1" maxOccurs="unbounded">
<xsd:elementname="student" type="tns:studentType"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
-->
<xsd:sequenceminOccurs="1" maxOccurs="unbounded">
<xsd:elementname="student" type="tns:studentType"/>
</xsd:sequence>
</xsd:sequence>
</xsd:complexType>
<xsd:simpleTypename="gradeType">
<xsd:restrictionbase="xsd:int">
<xsd:minInclusivevalue="2000"/>
<xsd:maxInclusivevalue="3000"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
相關推薦
XML:Schema、三種編寫Schema的方式
針對DTD檔案的不足之處:(不能出現相同名稱的元素,DTD的語法不是xml的語法)出現的Schema,需要使用什麼名稱空間的東西就先引入,使用xmlns,後面加字尾,不加就不用字尾 定義Schema檔案,字尾名為xsd 引入XMLSchema那個名稱空間
框架源碼系列九:依賴註入DI、三種Bean配置方式的註冊和實例化過程
ejb sed life ace nts 參數 找到 目標 不同 一、依賴註入DI 學習目標1)搞清楚構造參數依賴註入的過程及類2)搞清楚註解方式的屬性依賴註入在哪裏完成的。學習思路1)思考我們手寫時是如何做的2)讀 spring 源碼對比看它的實現3)Spring 源碼
Spring第一課:基於XML裝配bean(四),三種例項化方式:預設構造、靜態工廠、例項工廠
Spring中基於XML中的裝配bean有三種方式: 1.預設構造 2.靜態工廠 3.例項工廠 1.預設構造 在我們在Spring的xml檔案中直接通過: <bean id="名字" class="全限定類名" ></bea
Spring之jdbcTemplate:查詢的三種方式(單個值、單個對象、對象集合)
res finally 結構 execute date rep frame 參數 system JdbcTemplateDemo2.java 1 package helloworld.jdbcTemplate; 2 3 import org.springf
Kubernetes的三種外部訪問方式:NodePort、LoadBalancer和Ingress
ClusterIP ClusterIP 服務是 Kubernetes 的預設服務。它給你一個叢集內的服務,叢集內的其它應用都可以訪問該服務。叢集外部無法訪問它。 ClusterIP 服務的 YAML 檔案類似如下: apiVersion: v1 kind: Ser
Spring之jdbcTemplate:查詢的三種方式(單個值、單個物件、物件集合)
1 package helloworld.jdbcTemplate; 2 3 import org.springframework.jdbc.core.JdbcTemplate; 4 5 import java.sql.*; 6 import j
01:雲計算三種服務模式SaaS、PaaS和IaaS
運行 並行 均衡 方案 統計 調度 軟件 strong 基礎設施 1.1 雲計算 1、什麽是雲計算 1. 雲計算服務是指將大量用網絡連接的計算資源統一管理和調度,構成一個計算資源池向用戶按需服務。 2. 用戶通過網絡以按需、易擴展的方式獲得
LVS:三種負載均衡方式比較+另三種負載均衡方式
bytes com 方式 工作 domain rtu href 端口號 速度 轉:http://blog.csdn.net/u013256816/article/details/50705578 什麽是LVS? ??首先簡單介紹一下LVS (Linux Virtual
設計模式:單例模式的三種創建方式及其各自的優缺點
singleton dmi 創建 檢查 public pos return style tin 單例模式: 確保一個類僅僅有一個實例,並提供全局訪問點。在Java中實現單例模式須要私有的構造器,一個靜態方法和一個靜態變量。確定在性能和資源上 的限制,怎樣選擇適當的方案來
LVS:三種負載均衡方式比較
什麽是 redirect cti enter 通過 主服務器 ip隧道 一般來說 lvs 轉載於http://soft.chinabyte.com/25/13169025.shtml 1、什麽是LVS? 首先簡單介紹一下LVS (Linux Virtual Serve
常見三種存儲方式DAS、NAS、SAN的架構及比較
DAS NAS SAN存儲的分類 根據服務器類型分為: 封閉系統的存儲(封閉系統主要指大型機) 開放系統的存儲(開放系統指基於window Unix Linux等操作系統的服務器) 開放系統的存儲分為:內置存儲和外掛存儲 外掛存儲根據連接方式分為:直連式存儲(DAS)和網絡化存儲(FAS);網絡化存儲根
【RabbitMQ】4、三種Exchange模式——訂閱、路由、通配符模式
message final 支持 sim 使用 完全 自己的 print ued 前兩篇博客介紹了兩種隊列模式,這篇博客介紹訂閱、路由和通配符模式,之所以放在一起介紹,是因為這三種模式都是用了Exchange交換機,消息沒有直接發送到隊列,而是發送到了交換機,經過隊列綁定交
Mybatis(五):Mybatis的三種使用方式
注意,這篇文章只介紹mybatis單獨使用時如何操作,是沒有用到spring的,如果需要了解mybatis和spring如何搭建,請移步這裡。 方式一:不使用mapper介面 步驟 1.pom檔案裡新增jar包 <dependency> <groupId&g
排序一:冒泡以及三種優化
/** * 冒泡以及三種優化 * */ public class One { /** * 經典 * */ public static void one(int[] arr) { for(int i=0;i<arr.
Struts2 Action類的三種編寫方式
Action類的三種編寫方式 1,使用公共POJO類作為Action,提供公共無引數的Action方法(不推薦) 缺點:沒有一種方式約束Action方法
轉:vue.js 三種方式安裝(vue-cli)
版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/muzidigbig/article/details/80490884 Vue.j
思特奇筆試題:Hadoop的三種執行模式 :
1.獨立(本地)執行模式:無需任何守護程序,所有的程式都執行在同一個JVM上執行。在獨立模式下除錯MR程式非常高效方便。所以一般該模式主要是在學習或者開發階段除錯使用 。 &nb
javascript 三種變數申明方式var、let、const
javascript 三種變數申明方式var、let、const var 申明瞭一個要麼是全域性,要麼是函式級的變數;這種是我們最常見也是最常用的。 描述: 變數宣告無論出現在程式碼的任何位置,都會在任何程式碼執行之前處理。 給一個非宣告變數賦值會隱式建立一個全
貓狗大戰:融合了三種模型的Keras程式碼,準確率直升到99%
使用keras的resnet,inceptionV3,xception模型,首先載入預訓練模型的權重,通過預訓練權重生成對貓狗的訓練值和測試值的特徵向量 預訓練模型下載地址:http://pan.baidu.com/s/1geHmOpH from ker
javascript 三種變數宣告方式var、let、const
var 語法格式: var a=2; var宣告的變數具有如下幾個特徵: 1.變數提升:變數宣告無論出現在程式碼的任何位置,都會在任何程式碼執行之前處理。即可以先呼叫再宣告。 (提升的是var a而不是a=2) 2.函式提升:JavaScript會將全域性