欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
用于數據的 XML: XPath 2.0 有哪些新特性?
內容:
xf:distinct-values 函數
xf:document 函數
xf:current-dateTime 函數
更佳的 XML 模式兼容性
參考資料
關(guān)于作者
對本文的評價(jià)
相關(guān)內容:
XSLT 2.0:早期研究
在 Java 中使用 DOM 和 XPath 進(jìn)行有效的 XML 處理
訂閱:
developerWorks 時(shí)事通訊
對 XPath 2.0 計劃采用的一些特性的前瞻

Kevin Williams
CTO, Blue Oxide Technologies,LLC
2003 年 1 月

Kevin Williams 研究了 XPath 2.0 規范的最新?tīng)顟B(tài),并且提供了一些 XPath 2.0 特性的特定示例,這些特性會(huì )使 XML 開(kāi)發(fā)人員的工作更加輕松。示例是用 XML 和 XPath 的形式提供的。

XSLT 1.0 和 XPath 1.0 最初是打算為 XML 文檔提供簡(jiǎn)單的樣式語(yǔ)言支持,主要是將這些文檔轉換成 HTML 以呈現在瀏覽器中。但是,自從 XSLT 和 XPath 可以使用之后,它們就被強行用于各種任務(wù)中,而這些任務(wù) ― 從 XML 文檔中復雜的數據操作(聚合、單值選擇和關(guān)系旋轉)到一種 XML 形式向另一種形式的 XSLT 轉換 ― 并不是它們的設計初衷。在這些規范的版本 2.0 中,W3C 試圖使 XSLT 和 XPath 更加靈活和健壯,以便于處理這些技術(shù)的新用法。

在上一篇專(zhuān)欄文章中,我研究了 XSLT 的一些新特性。在本篇專(zhuān)欄文章中,我只研究 XPath2.0 的幾個(gè)要點(diǎn) ― 由于要點(diǎn)太多,因而無(wú)法在一篇專(zhuān)欄文章中全部研究。

對于本專(zhuān)欄而言,特定前綴的映射含義如下:

  • xf: 前綴被認為映射到 XPath 2.0 函數名稱(chēng)空間(http://www.w3.org/2002/08/xquery-functions)。
  • xsl: 前綴映射到 XSLT 2.0 名稱(chēng)空間。
  • xs: 前綴映射到 XML 模式名稱(chēng)空間。

xf:distinct-values 函數
在使用 XSLT 1.0 樣式表時(shí),開(kāi)發(fā)人員面臨的最重大的挑戰之一就是編寫(xiě)與 SQL 中 SELECT DISTINCT 等同功能的 XML 代碼 ― 即一個(gè)獲取節點(diǎn)集并返回那些節點(diǎn)唯一值列表的表達式。在 XSLT 1.0 和 XPath 1.0 中這不是不可能實(shí)現的,但都是極其困難的?;旧?,您都必須寫(xiě)一條 xsl:for-each 語(yǔ)句以特殊的排序順序對每個(gè)節點(diǎn)求值,然后不斷回頭查看節點(diǎn)列表,以了解是否所有匹配特定值的任何其它節點(diǎn)都被處理了。有了 XSLT 2.0 ,以及引入了 xf:distinct-values 函數,這個(gè)問(wèn)題就迎刃而解了。下面 清單 1中是一個(gè) XML 文檔的快速示例:

清單 1. 帶有作者姓名的 books
<books>  <book author="Kevin Williams" title="Professional XML 2.0" />  <book author="Lewis Carroll" title="Alice in Wonderland" />  <book author="Lewis Carroll" title="Through the Looking-Glass" /></books>

假定您想要標準化輸出作者信息,并創(chuàng )建一個(gè)類(lèi)似 清單 2的文檔:

清單 2. 帶有書(shū)名的 authors
<authors>  <author name="Kevin Williams">    <book title="Professional XML 2.0" />  </author>  <author name="Lewis Carroll">    <book title="Alice in Wonderland" />    <book title="Through the Looking-Glass" />  </author></authors>

要做到這一點(diǎn),使用 XPath 和 XSLT 1.0 時(shí),需要做類(lèi)似于 清單 3的工作:

清單 3. XPath 1.0 中的 SELECT DISTINCT
<xsl:template match="books">  <authors>    <xsl:for-each select="book">      <xsl:sort select="@author" />      <xsl:variable name="thisAuthor">        <xsl:value-of select="@author" />      </xsl:variable>      <xsl:if test="count(preceding-sibling::book)=0">        <author name="{$thisAuthor}">          <xsl:for-each select="../book[@author=$thisAuthor]">            <book title="{@title}" />          </xsl:for-each>        </author>      </xsl:if>      <xsl:if test="preceding-sibling::book[1]/@author != $thisAuthor">        <author name="{$thisAuthor}">          <xsl:for-each select="../book[@author=$thisAuthor]">            <book title="{@title}" />          </xsl:for-each>        </author>      </xsl:if>      </xsl:for-each>    </authors></xsl:template>

記錄文檔的過(guò)程稍微有點(diǎn)凌亂和困難,但是使用 xf:distinct ,這會(huì )變的很容易,如 清單 4所示:

清單 4. XPath 2.0 中的 xf:distinct
<xsl:template match="books">  <authors>    <xsl:for-each select="xf:distinct(book/@author)">      <xsl:variable name="thisAuthor"><xsl:value-of select=".">      <author name="{$thisAuthor}">        <xsl:for-each select="book[@author=$thisAuthor]">          <book title="{@title}" />        </xsl:for-each>      </author>    </xsl:for-each>  </authors></xsl:template>

這與 xsl:for-each-group 有什么區別呢?任何實(shí)現 XPath 的地方都可以使用 xf:distinct ― 因此,它可以作為 XQuery 1.0 的一部分及專(zhuān)門(mén)的 XPath 處理器使用。利用 xf:distinct ,可以在值集合上執行其它操作,這與 xsl:for-each-group 相反,后者強制對不同的值單獨進(jìn)行操作。

這一變化解決了 XSLT 作者在試圖樣式化文檔時(shí)遇到的許多問(wèn)題。XSLT 還有許多其它變化,樣式表程序員會(huì )發(fā)現它們非常有用。

xf:document 函數
在 XSLT 1.0 中使用多個(gè)文檔是有問(wèn)題的。XPath 2.0 的設計人員明智地選擇了通過(guò) xf:document 機制來(lái)包括額外的文檔處理能力。該函數允許從 URL 裝入一個(gè)或多個(gè)文檔,并進(jìn)行處理。例如,假定您在資源庫中擁有 清單 5、6 和 7中所示的文檔類(lèi)型:

清單 5. 樣本零件文檔 1
<part name="Grommets" size="3 in." color="blue" />

清單 6. 樣本零件文檔 2
<part name="Grommets" size="3 in." color="blue" />

清單 7. 樣本零件文檔 3
<part name="Grommets" size="3 in." color="blue" />

假定您現在在一個(gè)目錄中有 500 個(gè)這樣的文檔,您希望創(chuàng )建您所擁有的所有藍色零件的列表。無(wú)需利用中間層語(yǔ)言(如 Java)編寫(xiě)代碼以裝入所有這些文檔并查找顏色為藍色的零件,可以編寫(xiě)一個(gè)列出在哪可以找到所有零件的索引(請參閱 清單 8):

清單 8. 零件索引文檔
<parts>  <part file="part1.doc" />  <part file="part2.doc" />  <part file="part3.doc" /></parts>

您可以編寫(xiě)一個(gè)為您完成這項工作的樣式表,其代碼片段類(lèi)似于 清單 9

清單 9. 用于跨文檔的 xf:document
<xsl:template match="parts">  <blueParts>    <xsl:for-each select="xf:document(part/@file)/@color=‘blue‘">      <part name={@name} size={@size} color={@color} />    </xsl:for-each>  </blueParts></xsl:template>

這種技術(shù)特別適用于分布式網(wǎng)絡(luò )的內容,在分布式網(wǎng)絡(luò )中,零件信息可以放在一臺服務(wù)器上,而客戶(hù)信息可以放在另一臺服務(wù)器上。通過(guò)利用樣式表(使用 xf:document 從其它 URL“拉”信息),允許該數據可以在創(chuàng )建它的地方起作用。

xf:current-dateTime 函數
將樣式表應用于 XML 文檔時(shí),在輸出中包含已轉換結果的創(chuàng )建日期通常都很有用。當創(chuàng )建 HTML 文檔以驅動(dòng)用戶(hù)界面時(shí),這特別重要;此類(lèi)信息可以幫助高速緩存系統知道什么時(shí)候信息的副本失效了。使用 XPath 2.0 中的 xf:current-dateTime 函數可以獲得當前日期和時(shí)間(請參閱 清單 10):

清單 10. xf:current-dateTime 示例
<xsl:value-of select="xf:current-dateTime()" />

這可能會(huì )返回 清單 11中所示的字符串:

清單 11. xf:current-dateTime 樣本結果
2002-09-17T18:22:08z

然后,可以“按現狀”使用該字符串,或者將其轉換成不同的日期格式,以便于在生成的文檔中使用。

更佳的 XML 模式兼容性
因為 XPath 2.0 目前在 XSLT 2.0 和 XQuery 1.0 之間共享,因此,XPath 需要更健壯的 XML 模式支持。實(shí)際上,XPath 2.0 中的整個(gè)數據模型目前都是強類(lèi)型的:而不是簡(jiǎn)單的字符串、數字和布爾類(lèi)型,值目前使用了作為 XML 模式規范一部分定義的原語(yǔ)。提供了完整的函數集,因此可以把這些值顯式地從一種類(lèi)型轉換為另一種類(lèi)型,將這種轉換作為它們在 XPath 2.0 中操作的一部分。例如,通過(guò)使用類(lèi)型名稱(chēng)可以將一個(gè)值強制轉換為另一種類(lèi)型,就象是一個(gè)函數一樣。因此,使用 清單 12中的代碼片段,可以將值強制轉換為無(wú)符號整數:

清單 12. XML 模式類(lèi)型強制轉換示例
xs:unsignedInt(item)

XPath 2.0 中的強類(lèi)型確保由 XSLT 樣式表創(chuàng )建的文檔能夠依據強類(lèi)型的 XML 模式進(jìn)行驗證。在 XSLT 2.0 之前,沒(méi)有方法可以保證這一點(diǎn)(例如,保證數字是無(wú)符號整數)― 為了確保樣式表不提供錯誤值,XML 模式驗證步驟是必需的。

在本文中,我只是略微談及了 XPath 2.0 必須提供的一些要點(diǎn)。雖然距離這項技術(shù)提升為建議書(shū)狀態(tài)還有一段時(shí)日(至少 6 個(gè)月),但是,熟悉 XPath 2.0 的特性和功能將有助于您在開(kāi)始實(shí)現時(shí)能夠充分利用它。

參考資料

關(guān)于作者
Kevin Williams Blue Oxide Technologies,LLC 的技術(shù)主管(CTO),該公司從事 XML 和 XML Web 服務(wù)設計軟件的設計業(yè)務(wù)。請訪(fǎng)問(wèn)該公司的網(wǎng)站 http://www.blueoxide.com??梢酝ㄟ^(guò) kevin@blueoxide.com向 Kevin 提出意見(jiàn)。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
XSLT 介紹 - XPath介紹
XSL基本概念
xslt輕松入門(mén)(zt)
PHP5操作XML的新特性 控制 讀寫(xiě) dom
C#操作XML
歡迎光臨 - 琳婕小筑-老貓的理想 - XSLT輕松入門(mén) -
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久