我正在尝试使用XSLT 2.0生成以RDF / XML编码的内容的XHTML视图。我想使用命名模板来模块化我的XSL样式表。
我最初尝试将节点传递给我的命名模板显然无效。
我是XSLT的新手,但网络搜索让我相信我的问题是因为XSL正在传递结果树片段(RTF)而不是节点。这绝对是XSLT 1.0的问题,但它是2.0的问题吗?不幸的是,对于我来说,如何在stackoverflow和类似网站上应用针对XSL节点传递问题的解决方案是不明显的。
使用XSLT 2.0,我想做什么?
我应该采取什么方向?
<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 :(得分:0)
您传递给命名模板的元素是名为owl:namedIndividual的元素。被调用模板尝试查找此元素的子元素,也称为owl:namedIndividual,但您的owl:namedIndividual元素没有具有此名称的子元素。
如果你养成在参数和变量声明中使用“as”属性的习惯,例如as =“element(owl:namedIndividual)”,就可以很容易地诊断出这类问题。这往往会使错误脱颖而出并提供更好的诊断;如果你将它与模式感知相结合,你甚至可以获得错误的编译时通知。