Python中的XML庫4Suite Server的介紹

來源:互聯網
上載者:User
在繼續閱讀本文之前,您務必要對我們在本專欄中將要討論的一些技術有所瞭解。我們要使用的技術包括:可擴充的樣式表語言轉換(Extensible Stylesheet Language Transformations,XSLT)、XML 路徑語言(XML Path Language,XPath)和資源描述架構(Resource Description Framework,RDF)。在 參考資料部分有到關於所有這些技術的資訊的連結。
4Suite Server 概述

我們將使用由本文作者參與開發的 XML 資產庫 4Suite Server(4SS)作為本文中樣本的應用程式基底礎。4Suite Server 是一個 XML 資產庫,它帶有許多用於 XML 資料和中繼資料管理的功能程式,無論使用 Python 與否,這些功能程式都使得 4Suite Server 非常適合 Web 服務的快速開發。

本文中的樣本是用 4Suite Server 0.11 編寫的,需要使用 Python 1.5.2 或更高版本和 4Suite 0.11。在 參考資料部分有下載所有這些應用程式的連結。
線上軟體資產庫

本文是“Python Web Services Developer”專欄的第二部分,卻是關於構建線上軟體資產庫的三部分系列的第一部分。在這部分中,我們將構建我們的基礎架構。在隨後的專欄中,我們將特別描述如何使用各種協議(例如,簡易物件存取通訊協定 (SOAP)(Simple Object Access Protocol,SOAP)、HTTP 和 WWW 分布式編寫和版本控制(WWW Distributed Authoring and Versioning,WebDAV))搜尋建立了索引的內容和基於代理的內容添加或內容檢索。

我們的線上軟體資產庫服務模式是基於 RPMFind.net 中的 RDF 模式的,但關係不太緊密。RPMFind 是一個用流行的 Red Hat 包管理器(Red Hat Package Manager,RPM)格式為 UNIX 和 Linux 軟體包編製目錄的系統。它包含關於軟體包的關鍵中繼資料(包括作者、版本和描述,格式為 RDF,詳見 清單 1)。關於 RDF 的簡短定義,請閱讀本專欄的前一期,或者去 參考資料部分尋找這個簡單格式基本介紹的連結。

XML 的實際格式是不相關的。事實上,因為所描述的技術適用於任何類型的 XML 內容,所以根本沒必要去描述軟體。您可以用這種技術描述書的目錄、僱員資訊,或者甚至是餐館的酒類一覽表。

這個樣本中使用的所有代碼和資料檔案都可以從 參考資料部分的連結下載。
文檔定義

在 4SS 的 XML 資產庫中,文檔定義允許您指定 XML 內容和 RDF 中繼資料之間的一個映射。為此,您需要定義由三個 XPath 運算式組成的集:一個主語(subject)運算式、一個謂語(predicate)運算式和一個賓語(object)運算式。XPath 運算式允許您在文檔中定義一個節點關係集,並允許根據這些關係從文檔返回內容的子集。當在資產庫中添加、修改和刪除每個 XML 文檔時,都要根據 XML 文檔求這些 XPath 運算式的值。求得的語句,也被稱為 三元組(triple),被自動添加到 RDF 資料庫(被稱作 模型)中,或從其中刪除。如果修改了文檔,也要更改元組以反映發生的更改,如果文檔被刪除了,就要把元組從 RDF 伺服器上刪除。文檔定義可以從其它文檔繼承定義的資訊,這允許您定義 XML 內容到 RDF 中繼資料資訊的複雜映射。

在我們的應用程式範例中,我們將擴充其中一個預設文檔定義。預設文檔定義描述了嵌入在 XML 內容中的 Dublin Core 標記到 Dublin Core 語句的映射。Dublin Core 是一個中繼資料倡議,它定義了基於 Web 的通用對象(例如, Creator 、 Title 和 Date )的一組標準屬性。派生出的文檔定義將為每個文檔再添加一條語句。

如下所示,一個簡單的聲明將把這個文檔的 Creator 中繼資料設定為求得的某個 XPath 的結果:

RdfStatement(subject='$uri', predicate="http://purl.org/dc/elements/1.1#Title", object="/rdf:RDF/s:Software/dc:Creator")

(上面的代碼是一個單行語句,但是為了適合這個格式進行了縮排。)

為了添加或更新系統預設資料,您應該運行 4SS 內建的指令碼 populate.py 。這樣將從 ftp://ftp.fourthought.com下載有用的資料來更新您的伺服器。下載的資料包含一些常用的項,如 Dublin Core 文檔定義和 Docbook 樣式表(Docbook 是技術文檔流行的 XML 格式)。

在安裝 4SS 時,植入指令碼將自動安裝在示範應用程式中。在基於 Unix 的機器上,植入指令碼一般儲存在 /usr/doc/4SuiteServer-0.11 或 /usr/local/doc/4SuiteServer-0.11 中。在 Windows 機器上,儲存目錄一般是 c:\Program Files\Python 或 c:\Python20 。 清單 2展示了植入您的基於 4SS 的應用程式的安裝過程。
清單 2:植入 4SS 應用程式

代碼如下:

[molson@penny example]$ python /usr/doc/4SuiteServer-0.11/demo/populate.py
Downloading XML Documents
Downloading Stylesheets
Downloading DocDefs
Adding XML document: 'null'
Adding stylesheet: 'docbook_html1.xslt'
Adding stylesheet: 'presentation_toc.xslt'
Adding stylesheet: 'presentation.xslt'
Adding stylesheet: 'docbook_text1.xslt'
Adding document definition: 'dublin_core'
Adding document definition: 'docbook1'

接下來,我們必須為軟體條目清單建立一個文檔定義。為了添加定義,我們使用命令列指令碼 4ss deserialize docdef ,將序列化的文檔定義的檔案名稱作為唯一的參數來傳遞。例如:

代碼如下:

[molson@penny example]$ 4ss deserialize docdef software.docdef

內容

我們將從命令列用 4ss create document 給系統添加新內容。在下載樣本中,有兩個軟體清單,它們是名為 software1.rdf 和 software2.rdf 的 XML 檔案。為了把這些檔案添加到系統中,我們執行 4ss create document ,為它指定要使用的文檔定義、要添加的檔案的名稱以及要賦予系統內資源的一列別名。

首先,我們要為我們伺服器上的軟體資產庫建立一個容器,把容器的許可權設定成允許“uo”組有寫存取權限,並允許所有人進行讀訪問(因為我們想要從這個目錄提供 Web 頁面):

代碼如下:

[molson@penny example]$ 4ss create container /softrepo
[molson@penny example]$ 4ss set acl --write=uo --world-read /softrepo

然後,我們把我們的樣本下載檔案添加到資產庫中。儘管 4SS 資產庫可以以任意格式儲存很多資料,但是它針對儲存 XML 資料進行了高度最佳化。當我們把 .tar 檔案添加到資產庫中時,我們指定 --imt 選項來設定檔案的網際網路媒體類型(Internet Media Type,IMT)(在這裡是 application/x-gzip )。這個 IMT 除了其它作用,還可以被 HTTP 伺服器用於檢索 Web 上的內容。請注意,IMT 有時也叫“MIME 類型”。請參閱 清單 3,以瞭解新增內容的命令。請注意,在一個更複雜的項目中,您可以考慮把二進位檔案放在一個單獨的容器中。
取內容

取內容就和新增內容一樣簡單。不過,我們首先一定要將樣式表添加到資產庫中。我們的樣本檔案包含了一個非常簡單的樣式表。為了添加它,您可以使用 4ss create document ,並為其取別名為 software.xslt 。例如:

代碼如下:

[molson@penny example]$ 4ss create document BASE_XSLT software.xslt softrepo/software.xslt

BASE_XSLT 是一個特殊的文檔定義,它告訴 4SS 將這個文檔作為一個 XSLT 樣式表來進行最佳化。

添加文檔之後,您現在可以用您的 網頁瀏覽器串連到 4SS HTTP 伺服器(支援普通的 Python 和 Apache 伺服器)上,然後轉到 http://localhost:8080/softrepo/pong.xml 頁面。這將從資產庫中取出 pong 軟體描述文檔。如果您正在使用一個支援 IMT text/xml 的瀏覽器(如 Internet Explorer 或 Mozilla),那麼您就可以查看已添加到資產庫中的 XML。要告訴 HTTP 接聽程式(HTTP Listener)您想在頁面被返回之前處理頁面(通過在 XSLT 中運行),請指定 xslt URI 查詢參數 http://localhost/softrepo/pong.xml?xslt=software.xslt 。

請注意,頁面上下載包的連結也指向 localhost。這個連結還將檢查 HTTP 接聽程式,並取出我們為 pong-0.0.2.tgz 添加的資源。當它被返回到瀏覽器時,它會指定我們把資源添加到系統時所定義的 IMT。

產生索引頁

為了產生索引頁,我們將使用 4SS 的一些擴充函數,以使 XSLT 訪問 RDF 模型。對於在 4SS 中產生一個索引頁的問題,還有其它的解決方案。其中一種解決方案是用 Python 為 HTTP GET 訊息寫一個定製處理常式。這樣做可能在請求 index.html 時需要查詢 RDF 模型。另一個解決方案是,每當將一個新文檔添加到系統中或者從系統中刪除一個檔案時,都使用 4SS 事件系統來更新 index.html 文檔。

因為 XSLT 總是需要根據一個來源文件而被應用,所以我們將給系統添加一個啞來源文件。在下載樣本中有一個叫 index.doc 的來源文件。請用 4ss create document 將這個文檔添加到資產庫中,如下所示:

代碼如下:

[molson@penny example]$ 4ss create document index.doc BASE_XML softrepo/index.doc
[molson@penny example]$ 4ss set acl --world-read softrepo/index.doc

我們將在樣式表中使用擴充函數 rdf.complete 來收集關於系統中所有軟體的資訊。擴充函數調用 RDF 模型上的 complete 方法。 complete 方法允許您搜尋 RDF 模型以找到一個匹配指定模式的語句。該方法最多要用三個參數:一個 subject 、一個 predicate 和一個可選的 object 。這些參數都可以是Null 字元串。它將返回匹配所有指定值的一列語句。例如,如果您輸入主語 foo,賓語 bar,將返回有主語 foo,任意謂語以及賓語 bar 的語句。

4SS 自動建立把文檔連結到文檔定義上的 RDF 語句。這些語句的主語是文檔的 URI,謂語是 http://schemas.4suite.org/4ss#metaxml.docdef ,賓語是文檔定義名。知道了這一點,我們就可以用一個簡單的 complete 調用指定謂語和賓語,用 software 文檔定義在我們的系統中獲得一個文檔列表。

我們用來產生索引的樣式表叫 index.xslt 。與來源文件根目錄匹配的模板首先調用了 rdf.complete 。這個函數調用在 RDF 模型上為所有將 http://schemas.4suite.org/4ss#metaxml.docdef 作為謂語,將 software 作為賓語的語句進行了一次 complete 操作。 rdf.complete 函數調用的結果是 Statement 元素的一個節點集。每個 Statement 元素有三個子項目: Subject 、 Predicate 和 Object 。如 清單 4 所示,我們根據函數的結果使用 xsl:apply-templates ,並且顯示模板內每個在 Statement 上匹配的軟體項。

為了查看產生的索引頁,請將您的瀏覽器轉到 http://localhost:8080/softrepo/index.doc?xslt=index.xslt 。

然而,這個索引並不是一成不變的,我們很容易就能夠明白如何將這個簡單的頁擴充為以任何風格顯示軟體標題。我們可以在樣式表中修改顯示每一項所用的方式,還可以通過向文檔定義添加更多的映射來調整可用於樣式表的資料。

結束語

哦,我們還是沒有編寫任何 Python 代碼,但是我們確實粗略瞭解了一下 4Suite Server 的一些功能。在下個月的專欄中,我們將在本樣本的基礎上加以擴充,讓軟體資產庫具有內容管理的功能,並能夠搜尋產生的所有中繼資料。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.