国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

利用attributeGroup元素重用屬性定義

2019-11-18 14:59:47
字體:
來源:轉載
供稿:網友

  當為你的xml文檔創建schema時,你可能經常會用屬性(attribute)來為特定的元素定義元數據。有時候許多元素會共用相同的屬性。你知道嗎,你可以創建一個屬性組并重用它,而不必為每個元素都提供一個屬性。



一種常見的手段
讓我們用一個例子來闡明這些概念。假設我們有一個用來說明文章的版面布局的XML文檔。為了使問題簡化,我們的布局只包括標題和段落。我們的XML文檔看起來就像清單 1這樣:

清單 1: layout.xml


〈layout〉
〈header〉學習XML〈/header〉
〈paragraph〉范例文檔是開始學習XML的好地方。通過了解XML的應用細節,你能夠很快地把握怎樣的應用是最好的。你在網上可以很輕易找到XML的例子。〈/paragraph〉
〈header〉XML資源〈/header〉
〈paragraph〉手頭上有一份參考指南總是有用的。對XML來說,最根本的參考資料是W3C的 XML規范,它具體闡明了所有特性。你可能還要有一兩本好書。〈/paragraph〉
〈/layout〉

到目前為止,我們在文檔中還沒有給元素加上任何屬性。不過,在顯示輸出這個版面布局的時候,我們想給每個片斷都加上特定的字體和字體屬性。要滿足這一需求,我們的布局文檔要變成像清單 2這樣了:

清單 2: layout-revised.xml


〈layout〉
〈header font="sans serif" size="big" bold="on" italic="off" underline="off"〉學習XML 〈/header〉
〈paragraph font="times" size="medium" bold="off" italic="off" underline="off"〉范例文檔是開始學習XML的好地方。通過了解XML的應用細節,你能夠很快地把握怎樣的應用是最好的。你在網上可以很輕易找到XML的例子。〈/paragraph〉
〈header font="sans serif" size="big" bold="on" italic="off" underline="off"〉 XML資源〈/header〉
〈paragraph font="times" size="medium" bold="off" italic="off" underline="off"〉手頭上有一份參考指南總是有用的。對XML來說,最根本的參考資料是W3C的 XML規范,它具體闡明了所有特性。你可能還要有一兩本好書。〈/paragraph〉
〈/layout〉
計劃我們的schema
現在我們能夠想象背后的schema是什么樣子了,我們來創建一個為所有版面布局文檔定義規則的schema。我們創建schema的第一個嘗試很可能像清單 3這樣:

清單 3: layout.xsd
〈?xml version="1.0" encoding="UTF-8"?〉
〈xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"〉
〈xs:element name="header"〉
〈xs:complexType〉
〈xs:simpleContent〉
〈xs:extension base="xs:string"〉
〈xs:attribute name="font" type="xs:string" use="required"/〉
〈xs:attribute name="size" type="xs:string" use="required"/〉
〈xs:attribute name="bold" type="xs:string" use="required"/〉
〈xs:attribute name="italic" type="xs:string" use="required"/〉
〈xs:attribute name="underline" type="xs:string" use="required"/〉
〈/xs:extension〉
〈/xs:simpleContent〉
〈/xs:complexType〉
〈/xs:element〉
〈xs:element name="layout"〉
〈xs:complexType〉
〈xs:choice maxOccurs="unbounded"〉
〈xs:element ref="header"/〉
〈xs:element ref="paragraph"/〉
〈/xs:choice〉
〈/xs:complexType〉
〈/xs:element〉
〈xs:element name="paragraph"〉
〈xs:complexType〉
〈xs:simpleContent〉
〈xs:extension base="xs:string"〉
〈xs:attribute name="font" type="xs:string" use="required"/〉
〈xs:attribute name="size" type="xs:string" use="required"/〉
〈xs:attribute name="bold" type="xs:string" use="required"/〉
〈xs:attribute name="italic" type="xs:string" use="required"/〉
〈xs:attribute name="underline" type="xs:string" use="required"/〉
〈/xs:extension〉
〈/xs:simpleContent〉
〈/xs:complexType〉
〈/xs:element〉
〈/xs:schema〉


正如你看到的,我們在header和paragraph元素中使用同樣的屬性。當我們想添加一個新的屬性,或者想改變已有屬性的名字的時候會怎樣?我們將不得不在多個地方做出更改。在這個文檔中還不是一個大問題,但更大的文檔呢?而且,我們有更簡單的方案來實現有相同屬性的多個元素。
attributeGroup元素

在XML Schema的定義中,有一個沒被充分利用的元素叫做attributeGroup。這個元素答應你定義一組屬性,并把它們當作一個整體來使用,你可以在多個元素中應用這個屬性組。語法很簡單,你定義一個attributeGroup元素并在其中列出多個attribute元素,像這樣:

〈xs:attributeGroup name="formatGroup"〉
〈xs:attribute name="font" type="xsd:string" /〉
〈xs:attribute name="size" type="xsd:string" /〉
〈xs:attribute name="bold" type="xsd:string" /〉
〈xs:attribute name="underline" type="xsd:string" /〉
〈xs:attribute name="italic" type="xsd:string" /〉
〈/xs:attributeGroup〉

定義好這個組以后,你就可以在特定的元素上應用它,像這樣:

〈xs:element name="header"〉
〈xs:complexType〉
〈xs:attributeGroup ref="formatGroup" /〉
〈/xs:complexType〉
〈/xs:element〉

有意思的是,請注重到定義一個屬性組和引用一個特定的屬性組都用的是相同的attributeGroup元素。類似情況在XML Schema中很普遍。

小結
現在我們知道什么是屬性組了,在我們的版面布局文檔的schema中應用它吧。如同你在清單 4中所見,現在我們定義了一個屬性組,并在header和paragraph元素中都引用它。對屬性的任何更改都可以在這個組中完成,而不必去修改使用它的地方。

清單 4: layout2.xsd
〈?xml version="1.0" encoding="UTF-8"?〉
〈xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"〉
〈xs:attributeGroup name="formatGroup"〉
〈xs:attribute name="font" type="xs:string" use="required"/〉
〈xs:attribute name="size" type="xs:string" use="required"/〉
〈xs:attribute name="bold" type="xs:string" use="required"/〉
〈xs:attribute name="italic" type="xs:string" use="required"/〉
〈xs:attribute name="underline" type="xs:string" use="required"/〉
〈/xs:attributeGroup〉

〈xs:element name="header"〉
〈xs:complexType〉
〈xs:simpleContent〉
〈xs:extension base="xs:string"〉
〈xs:attributeGroup ref="formatGroup"/〉
〈/xs:extension〉
〈/xs:simpleContent〉
〈/xs:complexType〉
〈/xs:element〉
〈xs:element name="layout"〉
〈xs:complexType〉
〈xs:choice maxOccurs="unbounded"〉
〈xs:element ref="header"/〉
〈xs:element ref="paragraph"/〉
〈/xs:choice〉
〈/xs:complexType〉
〈/xs:element〉
〈xs:element name="paragraph"〉
〈xs:complexType〉
〈xs:simpleContent〉
〈xs:extension base="xs:string"〉
〈xs:attributeGroup ref="formatGroup"/〉
〈/xs:extension〉
〈/xs:simpleContent〉
〈/xs:complexType〉
〈/xs:element〉
〈/xs:schema〉

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宁南县| 都昌县| 云浮市| 上饶县| 栾川县| 信宜市| 贞丰县| 濮阳市| 呼图壁县| 子长县| 高邑县| 沈阳市| 东明县| 信宜市| 连城县| 虹口区| 左权县| 昌图县| 昌都县| 临澧县| 含山县| 阳高县| 江门市| 阜新| 东明县| 桂东县| 大邑县| 西昌市| 疏附县| 平泉县| 收藏| 新乐市| 伊宁县| 长顺县| 德格县| 涞水县| 黑河市| 毕节市| 通渭县| 时尚| 长岭县|