2012-04-03 83 views
0

我正在嘗試使用XSLT 2.0生成以RDF/XML編碼的內容的XHTML視圖。我想使用命名模板來模塊化,並簡單地使用我的XSL樣式表。使用XSLT 2.0在命名模板中使用節點參數

我最初嘗試將節點傳遞給我命名的模板顯然不起作用。

我是XSLT新手,但網絡搜索導致我相信我的問題是因爲XSL傳遞結果樹片段(RTF)而不是節點。這對於XSLT 1.0來說肯定是個問題,但它是2.0的問題嗎?不幸的是,我不明白如何在stackoverflow和類似的網站上應用XSL節點傳遞問題的解決方案。

我想用XSLT 2.0做什麼?

我應該採取什麼方向? namedIndividual:

<xsl:template match="rdf:RDF"> 
    <xsl:variable name="report" select="owl:NamedIndividual[@rdf:about='&ex;quality_report']"/> 
    <table> 
    <tr> 
     <xsl:for-each select="owl:NamedIndividual[@rdf:about=$report/mdsa:hasProductScope/@rdf:resource]"> 
     <td> 
      <xsl:call-template name="quality_label"> 
      <xsl:with-param name="product_scope" select="."/> 
      </xsl:call-template> 
     </td> 
     </xsl:for-each> 
    </tr> 
    </table> 
</xsl:template> 

<xsl:template name="quality_label"> 
    <xsl:param name="product_scope"/> 
    <table> 
    <xsl:for-each select="owl:NamedIndividual[@rdf:about=$product_scope/mdsa:scopeDataEntity/@rdf:resource]"> 
     <tr><td> 
     <!-- CALL ANOTHER NAMED TEMPLATE TO PROCESS DATA ENTITY --> 
     </td></tr> 
    </xsl:for-each> 
    </table> 
</xsl:template> 

我也

<xsl:with-param name="entity" select="current()"/> 

例如RDF/XML

<owl:NamedIndividual rdf:about="&ex;modis_aqua_aod_product_scope"> 
    <rdf:type rdf:resource="&mdsa;ProductScope"/> 
    <mdsa:scopeDataEntity rdf:resource="&ex;modis_aqua_global_data_entity"/> 
    <mdsa:scopeDataEntity rdf:resource="&ex;modis_aqua_global_land_only_data_entity"/> 
    <mdsa:scopeDataEntity rdf:resource="&ex;modis_aqua_e_conus_data_entity"/> 
    <mdsa:scopeDataEntity rdf:resource="&ex;modis_aqua_w_conus_data_entity"/> 
    <mdsa:scopeDataEntity rdf:resource="&ex;modis_aqua_central_america_data_entity"/> 
    <mdsa:scopeDataEntity rdf:resource="&ex;modis_aqua_south_america_data_entity"/> 
    <mdsa:scopeDataEntity rdf:resource="&ex;modis_aqua_s_south_america_data_entity"/> 
    <mdsa:scopeDataEntity rdf:resource="&ex;modis_aqua_africa_above_equator_data_entity"/> 
    <mdsa:scopeDataEntity rdf:resource="&ex;modis_aqua_equatorial_africa_data_entity"/> 
    <mdsa:scopeDataEntity rdf:resource="&ex;modis_aqua_africa_below_equator_data_entity"/> 
    <mdsa:scopeDataEntity rdf:resource="&ex;modis_aqua_europe_mediterranean_data_entity"/> 
    <mdsa:scopeDataEntity rdf:resource="&ex;modis_aqua_eurasian_boreal_data_entity"/> 
    <mdsa:scopeDataEntity rdf:resource="&ex;modis_aqua_east_asia_midlatitudes_data_entity"/> 
    <mdsa:scopeDataEntity rdf:resource="&ex;modis_aqua_peninsular_southeast_asia_data_entity"/> 
    <mdsa:scopeDataEntity rdf:resource="&ex;modis_aqua_indian_subcontinent_data_entity"/> 
    <mdsa:scopeDataEntity rdf:resource="&ex;modis_aqua_australian_continent_data_entity"/> 
    <mdsa:scopeVariable rdf:resource="urn:nasa:eosdis:variable:MYD08_D3.051:Optical_Depth_Land_And_Ocean_Mean"/> 
    </owl:NamedIndividual> 

    <owl:NamedIndividual rdf:about="&ex;quality_report"> 
    <rdf:type rdf:resource="&mdsa;QualityReport"/> 
    <dcterms:identifier rdf:datatype="http://www.w3.org/2001/XMLSchema#string">01ffc5bfba33e7139ffbd4b7185f9b0e</dcterms:identifier> 
    <mdsa:hasProductScope rdf:resource="&ex;modis_terra_aod_product_scope"/> 
    <mdsa:hasProductScope rdf:resource="&ex;modis_aqua_aod_product_scope"/> 
    </owl:NamedIndividual> 

回答

0

要傳遞到您指定的模板元素是一個名爲貓頭鷹元素嘗試過。被調用的模板試圖找到這個元素的一個子元素,它也被稱爲owl:namedIndividual,但是你的owl:namedIndividual元素沒有這個名字的子元素。

如果您習慣於在參數和變量聲明中使用「as」屬性,例如=「element(owl:namedIndividual)」,則可以輕鬆診斷出這類問題。這往往會使錯誤突出,並提供更好的診斷;如果你將它與模式意識相結合,你甚至可以得到編譯時通知你的錯誤。

+0

什麼是'架構意識'? Stylus Studio的XML Schema Tools是否屬於這一部分? – LokiPatera 2012-04-04 20:56:52

+0

「架構感知」是指XSLT 2.0能夠編寫導入架構的樣式表,並利用架構中的類型定義優化樣式表並提供更好的類型檢查,從而更容易地檢測出這樣的錯誤。 – 2012-04-06 18:31:21