2012-03-22 67 views
0

我想知道是否可以使用XSLT轉換Relax NG XML。請給我一些教程。是否有可能在XSLT中讀取Relax NG xml?

我似乎不能夠在語法標籤在RelaxNG的模式匹配,下面<xsl:template match="grammar">

<grammar> 

    <start> 
    <element name="html"> 
     <zeroOrMore> 
     <ref name="section"/> 
     </zeroOrMore> 
    </element> 
    </start> 

    <define name="section"> 
    <element name="div"> 
     <attribute name="class"><value>section</value></attribute> 
     <zeroOrMore> 
     <element name="para"> 
      <text/> 
     </element> 
     </zeroOrMore> 
     <zeroOrMore> 
     <ref name="subsection"/> 
     </zeroOrMore> 
    </element> 
    </define> 



</grammar> 

回答

3

RELAX NG是一種表示XML的語法的語言。 W3C XML Schema也是這樣一種語言。但是,XSLT是將XML轉換爲另一種數據格式的一種語言。換句話說,它們涵蓋了不同的理由。你真的想把Relax NG轉換成XSLT嗎?

您可以找到相當多的XSLT,您可以使用它們來優化,轉換您的Relax NG,DTD或XML Schema在Relax NG homepage上相互之間的轉換。

只是猜測:你可能實際上已經是通過Relax NG模式驗證現有XML的工具了。你可以用any one of the validators來做到這一點。

編輯,根據您的最後評論。你的xsl:template未被命中的原因很可能是因爲你沒有指定RelaxNG命名空間。您沒有顯示任何代碼,但嘗試在樣式表中應用以下內容(請注意命名空間前綴無關緊要,並且不需要位於源XML文檔中):

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:ng="http://relaxng.org/ns/structure/1.0"> 

    <xsl:template match="ng:grammar"> 
     <xsl:text>Grammar found!</xsl:text> 
    </xsl:template> 
</xsl:stylesheet> 
+0

是的,我的意思是隻將Relax NG轉換爲XSLT? – user1283110 2012-03-22 10:24:54

+0

@ user1283110 _「是否可以在xslt中讀取語法的類型爲我提供一些示例,我對此是新的」_ >>您可以使用XSLT讀取/轉換任何XML。放鬆NG _is_ XML,以便您可以使用XSLT閱讀它。但是你不能將Relax NG轉換爲XSLT,因爲它們完全不同(一個用於驗證,另一個用於轉換)。在技​​術上可以在XSLT中編寫驗證程序,但如果存在,我不知道。周圍有很多驗證器,所以我沒有看到需要。 – Abel 2012-03-22 10:27:28

+0

@ Abel但是我沒有得到xslt 中的語法標記,它具有一些名稱空間,因此它不匹配 – user1283110 2012-03-22 10:47:43

1

您的意思是,我可以將Relax NG模式編譯爲執行模式隱含的驗證的XSLT樣式表嗎?

答案是,理論上你可以,如果你對計算機科學理論有很好的理解,(a)如何將BNF語法轉換爲有限狀態自動機,以及(b)如何實現有限狀態自動機是一種功能性編程語言。

不知何故,我懷疑如果這是你想做的事情,那麼你就不會像你那樣問這個問題。

+0

對不起下次我糾正這個錯誤 – user1283110 2012-03-22 10:53:00

相關問題