0

XSLT 2.0 を使用して、RDF/XML でエンコードされたコンテンツの XHTML ビューを生成しようとしています。名前付きテンプレートを使用してモジュール化し、単純に XSL スタイルシートを作成したいと考えています。

名前付きテンプレートにノードを渡す最初の試みは、明らかに機能していません。

私は XSLT を初めて使用しますが、Web 検索で、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>
4

1 に答える 1

0

名前付きテンプレートに渡す要素は、owl:namedIndividual という名前の要素です。呼び出されたテンプレートは、owl:namedIndividual とも呼ばれるこの要素の子を見つけようとしますが、owl:namedIndividual 要素にはこの名前の子がありません。

この種の問題は、たとえば as="element(owl:namedIndividual)" のように、パラメーターと変数の宣言で "as" 属性を使用する習慣を身につければ、簡単に診断できます。これにより、エラーが目立ちやすくなり、診断が向上します。これをスキーマ認識と組み合わせると、コンパイル時に間違いの通知を受け取ることさえできます。

于 2012-04-03T21:09:52.913 に答える