国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Web 服務(wù)技巧: XML Schema 中空值的表示

Introduction

Java Bean 有屬性或字段。如果這些字段不是基元類型的,則它們可能是空的。當(dāng)您將 Java Bean 映射到 XML 時(shí),這些字段就變成了元素或?qū)傩浴N唇?jīng)修飾的元素和屬性不能具有空值(您大致可以把它們看作是對(duì)應(yīng)的 Java 基元類型——二者都不能為空)。有許多修飾 XML 屬性和元素的方法,采用這些方法可以使它們的實(shí)例為空(或者至少在邏輯上等同于空值)。

  • 對(duì)于屬性:
    • 使用屬性 use="optional"
  • 對(duì)于元素:
    • 使用屬性 nillable="true"
    • 或使用屬性 minOccurs="0"
本文描述上面的每一種選擇的細(xì)節(jié)和可能出現(xiàn)的情況。

元素與屬性

在研究空表示之前,首先確定可能需要在對(duì)象字段中使用元素與屬性的原因。需要考慮的第一件事是字段的類型。您只能在屬性中使用簡(jiǎn)單的類型。因此,如果您使用的是復(fù)雜類型,則沒有選擇的余地;必須 使用元素。然而,如果您使用的是簡(jiǎn)單類型,那么您應(yīng)該選擇屬性還是元素呢?例如,給定的清單 1 中的結(jié)構(gòu),哪一個(gè)更好?attrField 還是 elemField?


清單 1. AttributeOrElement Schema
<complexType name="AttributeOrElement">            <sequence>            <element name="elemField" type="xsd:int"/>            </sequence>            <attribute name="attrField" type="xsd:int"/>            </complexType>

讓我們看一看清單 2,它是清單 1 中的 Schema 的實(shí)例。


清單 2. AttributeOrElement 的實(shí)例
<attributeOrElement attrField="5">            <elemField>5</elemField>            </attributeOrElement>

顯然,在該實(shí)例中,屬性字段占用的空間比元素字段小,因此使用包含屬性的 XML 的 SOAP 消息的傳輸時(shí)間會(huì)更短??雌饋砑俣▽傩员仍馗盟坪跏呛侠淼?。但是如果您與 Schema 打過一段時(shí)間的交道,您可能很少看到使用屬性。這是為什么呢?我實(shí)在無法告訴您具體的原因,不過我有一些想法:

  • 由于您必須 在復(fù)雜類型中使用元素,因此從一致性方面考慮,您也應(yīng)該將元素用于簡(jiǎn)單類型。最后得到的是看起來更簡(jiǎn)單的 Schema。
  • 文檔/文字包裝的模式規(guī)定包裝程序元素的 complexType 不包含屬性(請(qǐng)參閱參考資料中的文章“Which style of WSDL should I use?”)。由于包裝程序元素中的這一參數(shù)列表只能是元素,因此從一致性方面考慮,所有的 complexType 列表都應(yīng)該是元素。
  • 由于屬性沒有順序,而元素有順序(除非使用 <all> 標(biāo)記),因此解析屬性的開銷可能比解析元素高一些(不過,我懷疑這對(duì)于復(fù)雜的 XML 解析器真的不是一個(gè)問題)。

所以為了簡(jiǎn)單起見,我建議堅(jiān)持使用元素,除非吞吐量性能是需要關(guān)注的重要問題,在這種情況下,您可以測(cè)試屬性是否能改進(jìn)性能。

現(xiàn)在讓我們討論空值。


空屬性

正如我已經(jīng)提到的,您可以通過讓屬性可選來使其邏輯上可為空值。請(qǐng)參見清單 3 中帶有可為空值的屬性的 Schema,以及清單 4 中的實(shí)例——一個(gè)字段中包含值的實(shí)例和一個(gè)字段中不包含值的實(shí)例。


清單 3. TypeWithNullAttribute Schema
<complexType name="TypeWithNullAttribute">            <attribute name="attrField" type="xsd:int" use="optional"/>            </complexType>


清單 4. TypeWithNullAttribute 的實(shí)例
Attribute with a value:            <typeWithNullAttribute attrField="5"/>            Attribute passed as null:            <typeWithNullAttribute/>

可以看出,空屬性的 Schema 聲明相當(dāng)簡(jiǎn)單。空屬性的實(shí)例也非常簡(jiǎn)單——不過這里不進(jìn)行具體說明。



空元素

由于很少使用屬性,而更普遍地使用元素,因此我們轉(zhuǎn)到空元素。有兩種通過元素表示空值的方法:使用屬性 nillable="true" 或者使用屬性 minOccurs="0"。Listing 5 展示了 TypeWithNullElements 的 Schema,它為每種可為空值的字段樣式提供一個(gè)元素。


清單 5. TypeWithNullElements 的 Schema
<complexType name="TypeWithNullElements">            <sequence>            <element name="nillableElem" nillable="true" type="int"/>            <element name="minOccursElem" minOccurs="0" type="int"/>            </sequence>            </complexType>

清單 6 展示了 TypeWithNullElements 的實(shí)例,首先出現(xiàn)的是常規(guī)值,接下來的是空值。


清單 6. TypeWithNullElements 的實(shí)例
Elements with values:            <typeWithNullElements>            <nillableElem>5</nillableElem>            <minOccursElem>5</minOccursElem>            </typeWithNullElements>            Elements with null values:            <typeWithNullElements>            <nillableElem xsi:nil="true"/>            </typeWithNullElements>

與可選的屬性一樣,具有 minOccurs="0" 屬性的元素的值為,不過沒有出現(xiàn)在 XML 實(shí)例中。與使用屬性 nillable="true" 定義的元素相比,此元素在消息大小方面的代價(jià)肯定要低一些。即使 nillableElem 的值為空,但是它仍然有值占位符,指示其實(shí)際為空。



nillable="true" 何時(shí)有用

很顯然,minOccursElemnillableElem 好一些,但是為什么始終需要使用 nillableElem 呢?我已經(jīng)提示過。前面我講到,nillableElem 的空值有值占位符。在哪里您可能需要占位符?這樣的一個(gè)例子就是數(shù)組,其中的每個(gè)數(shù)組條目都可能為空。例如,設(shè)想一個(gè)數(shù)組有四個(gè)元素,其值為 {0, null, 1, null}。您如何使用 minOccursElem 元素的實(shí)例表示該數(shù)組呢?回答是:您不能這樣做。無法區(qū)分上述四個(gè)元素組成的數(shù)組和其值為 {0, 1} 的兩個(gè)元素組成的數(shù)組。如果使用 minOccurs="0" 元素,則沒有空元素占位符。因此在這種情況下,您必須使用 nillable="true" 元素。清單 7 展示了這樣的一個(gè)數(shù)組的 Schema,清單 8展示了 {0, null, 1, null} 的 XML 實(shí)例。

(要更深入地了解數(shù)組和空值,請(qǐng)參閱參考資料中的文章“Array Gotcha”。)


清單 7. 可為空值的數(shù)組元素的 Schema
<complexType name="nullableElementArray">            <sequence>            <element name="elem" type="int" maxOccurs="4" nillable="true"/>            </sequence>            </complexType>


清單 8. 可為空值的數(shù)組元素的 XML 實(shí)例
<nullableElementArray>            <elem>1</elem>            <elem xsi:nil="true"/>            <elem>2</elem>            <elem xsi:nil="true"/>            </nullableElement>



總結(jié)

有三種在 XML Schema 中表示空字段的方法:可選的屬性、minOccurs="0" 元素和 nillable="true" 元素。使用上面各個(gè)元素的情況如下:如果是可為空值的簡(jiǎn)單類型,則使用可選的屬性;如果是可為空值的復(fù)雜類型,并且希望它占用最小的空間,則使用 minOccurs="0" 元素;如果空值必須有占位符(例如當(dāng)其在數(shù)組中出現(xiàn)時(shí)),則使用 nillable="true" 元素。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Linux內(nèi)核中鏈表和散列表的實(shí)現(xiàn)原理揭秘
WPF:依賴屬性
C#和.NET Framework還允許用戶根據(jù)這些簡(jiǎn)單的類型定義復(fù)合類型。
Linq、 集合、數(shù)組、Lambda、QuerySyntax(1)
Ruby快速入門(30分鐘)
iOS 本地?cái)?shù)據(jù)存取,看這里就夠了
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服