可擴展樣式表語言轉換

可擴展樣式表語言轉換

可擴展樣式表語言轉換,是XSL樣式表的一個組成部分,用於將XML轉換為其它形式的文檔,如XML、HTML、文本文檔等。

基本介紹

  • 中文名:可擴展樣式表語言轉換
  • 外文名:Extensible stylesheet language transformation
  • 分類:計算機
用Java擴展XSLT,XSLT的產生,XSLT的優點,XSLT的不足之處,擴展功能的實現,XSLT的通用後置處理器開發,XSLT工作原理,輸入代碼分析,STEP-XML轉換器,flex&bison,

用Java擴展XSLT

XSLT提供了一種將XML文檔轉換為HTML的強有力的工具。然而,當這種轉換需要涉及更多邏輯的時候,就會顯現出它的不足之處。講述了如何使用Java擴展XSLT,從而更好地發揮兩種語言的特色。最後給出一實例來具體展示如何將XML節點傳送到Java類並返回到樣式表以進一步處理。

XSLT的產生

在XSL的開發過程中,發現準備XML文檔以備顯示的過程中執行的任務可以分成兩個階段:轉換和格式化。轉換是將一個XML文檔轉換成另一個XML文檔的過程;格式化是將已轉換的樹狀結構轉換成兩維圖形表示法或可能是一維音頻流的過程。XSLT是為控制第一階段‘’轉換‘’而開發的語言。第二階段‘’格式化‘’的開發工作還在進行中。但實際上,大多數人使用XSL將XML文檔轉換成HTML,並使用HTML瀏覽器作為格式化引擎,這是可行的,因為HTML實際上只是XML辭彙表的一個示例,而XSLT可以使用任何XML辭彙表作為其目標。經證實將轉換成一種語言和格式化成另一種語言這兩個操作分離的確是一種好的決策,因為轉換語言的許多應用程式經證明無法向用戶顯示文檔。隨著XML日益廣泛地用作電子商務中的數據互換語法,對於應用程式將數據從一個XML辭彙錶轉換成另一個XML辭彙表的需求也在不斷地增加,從而XSLT就逐漸成為了處理這些轉換的隨處可見的高級語言。

XSLT的優點

XSLT給了用戶傳統高級聲明程式語言的所有好處,特別是對於轉換XML文檔的任務。但實際上,其真正的價值源泉來自於更改的潛力。與使用低級DOM和SAX接口編碼的過程性應用程式相比,用於轉換XML數據結構的XSLT應用程式更能適應對XML文檔細節的更改。在資料庫世界中,這種特性叫做數據獨立性,正是由於數據獨立性導致了諸如SQL之類聲明性語言的成功,並使舊的引導性數據訪問語言走向衰亡。

XSLT的不足之處

在XML文檔轉換方面,XSLT的確功能強大。但是,當這種轉換涉及較多邏輯的時候,就會顯現出它的不足。例如,上司要求你修改一個樣式表,將所有的‘’is not‘’實例都變為‘’is not‘’,並使公用符號局部化。當然,用標準的XSLT語法可以完成這種改變,但是它沒有提供一種簡易的方法來替換一個字元串中的詞或模式。XSLT的不足之處是它的文本處理能力有限,而整個XML文檔都是文本,所以XSLT需要具有很強的文本處理能力。因而,樣式表的設計者就常常需要擴展一些功能。

擴展功能的實現

許多XSLT處理器都允許有某種 類型的擴展機制。在Java和XML的世界裡,最廣泛套用的XSLT處理器是開源Apache Xalan處理器。它是用Java語言寫成的。許多開發者都發現Xalan的擴展能力極其強大,因為它在樣式表中發揮Java技能。就像JSP,scriptlets和自定義標籤給HTML注入活力一樣,Xalan的擴展也給樣式表注入了活力。然而,應該明確一點:在XSLT中進行Java擴展會降低它們的可移植性。

XSLT的通用後置處理器開發

為了使STEP-NC兼容傳統的數控系統,需要在傳統數控系統上構建專用的STEP-NC後置處理 器。為此,建立了一個通用的後置處理器,以降低構建專用STEP後置處理器的開發工作量和開發難度。採用可擴展標記語言模式下的 STEP-NC代碼作為輸入和基於可擴展樣式表語言轉換的轉換機制,實現面向不同數 控加工設備統一化的後置處理過程。根據可擴展樣式表語言轉換原理和要求,分別開發了EXPRESS-X和P21-P28的檔案格式轉換器。構建了以P28格式作為輸入和以XSLT樣式表語言定義工具機設備接口格式的通用後置處理器。以一台切削加工機器人和一台三軸數控銑床為套用實例,分別以機器人語言和G代碼作為後置處理結果,對後置處理器的功能性和可行性進行了驗證。

XSLT工作原理

XSLT是一種XML轉換語言,用於將XML節點樹作為源,通過一系列模板或規則將其轉換為某種結果。XSLT採用XML語法,但XSLT轉換的結果可以不是 XML,其規範允許的輸出有XML,HTML或文本,甚至可以是二進制內容。
根據XSLT的這種特 性,可以利用XSLT樣式表定製相應的數控系統的數據接口格式,把加工代碼的不一致之處完全定義到XSLT樣式表檔案中,從而可以使用通用的XSLT處理機對輸入的STEP-NC代碼(基於XML格式 )進行代碼轉換。輸出代碼的格式完全由定義數控系統的XSLT樣式表檔案確定。

輸入代碼分析

STEP-NC代碼採用STEP格式進行數據定義。STEP標準中主要提供了純文本表達和XML表達兩種檔案編碼格式。通常,使用純文本表達的STEP檔案稱為P21檔案,而使用XML表達的STEP檔案稱為P28檔案。雖然STEP標準定義了XML表達的P28檔案格式,但是大部分STEP-NC的研究均針對P21檔案,而且市場現有CAD系統的STEP檔案輸出幾乎都採用P21檔案格式。因此,最直接的後置處理器輸入數據應為P21檔案格式。然而,由於現有XSLT樣式處理機的局限性,要求輸入的STEP-NC檔案格式必須為XML格式 (雖然XSLT 2.0可以支持一般文本格式的輸入,但是 對類似於 P21等較為複雜的檔案格式的支持方面尚存在一些技術障礙)。另外,隨著網路化製造的進一步發展,基於XML的P28檔案將逐漸體現出其優於P21檔案的特性,因此採用P28檔案作為輸入的STEP-NC後置處理器也更適應於未來的網路化製造。基於以上考慮,設計了一個STEP-NC的P21檔案到P28檔案的轉換器,並規定後置處理器的輸入為統一的P28檔案。

STEP-XML轉換器

根據分析,需要開發一個P21-P28轉換器。事實上,這項任務也可以通過強大的XS-LT來完成。儘管STEP-XML的優越性十分明顯,但是在其最初的套用中,卻無法擺脫現有P21架構的影響。如前所述,每個套用協定、集成資源和通用資源等定義都對應一個EXPRESS文本檔案。在STEP-NC及其他套用協定的具體實施過程中,無法避免地需要使用到已有資源的信息模型,即已有的EXPRESS檔案。而STEP-XML系統所需的信息定義為XML模式下的EXPRESS(簡稱EX-PRESS-X)。現有的STEP標準提供了大量的定義各種資源的EXPRESS檔案,將這些 EXPRESS檔案都改寫成EXPRESS-X檔案,工作量非常龐大,且難以保證其正確性。對此,需要一個將EXPRESS語言翻譯成EXPRESS-X的轉換器。具備了EX-PRESS-X檔案之後,只是解決了STEP-XML中的數據模型定義問題,接下來需要考慮的就是如何將現存系統輸出的P21檔案翻譯成P28檔案的問題。另外,由於P28檔案自身定義了3種不同的表達方法,在使用過程中往往需要這3種不同格式之間的互相轉換,還需要完成P28檔案之間的轉換。

flex&bison

儘管 EXPRESS語言並非一種可編譯或解釋後執行的語言,其複雜性決定了即使僅對其進行解碼,用常規手工編程的方法也極為困難。此類詞法和語法的解析常常需要專用的編譯原理方法和工具。其中最經典的工具是lex和yacc。lex和yacc由貝爾實驗室在20世紀70年代開發,而flex和bison是它們的現代版本。具體來說,flex與bison是為編譯器、解釋器設計者定製的工具,可以將lex文本(*.l檔案)和yacc文本(*.y檔案)轉換為能夠處理結構化輸入的C/C++語 言,常常用於非編譯的語言解析。因此,採用flex和bison成為快速高效的開放XML模式的EXPRESS轉換器的最可行選擇。
採用美國國家標準和技術研究所(Nation-al Institute of Standards and Technology,NIST)開發的開源SCL庫(STEP class library)所提供的用於EXPRESS解析的*.l和*.y檔案作為基礎,進行修改和擴展,實現EXPRESS解析以及翻譯成XML模式下的EXPRESS的功能。解釋了EXPRESS-X轉換器的工作原理。首先使用flex和bison將*.l和*.y編譯成詞法分析器 (分析出檔案中的每個單詞,即記號)和語法分析器 (分析記號之間的邏輯聯繫)的原始碼C檔案;然後,將自動生成的代碼與其他部分代碼(語義分析器、代碼生成器等)聯合編譯成最終的EXPRESS-X轉換器。而EXPRESS-X轉換器將完成從EXPRESS檔案到EXPRESS-X檔案的轉換任務。

相關詞條

熱門詞條

聯絡我們