我正在尝试使用XSLT将RDF文件转换为HTML。
我使用的是我在网上找到的模板: http://snippets.dzone.com/posts/show/1164
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:foo="http://purl.org/rss/1.0/">
<xsl:output method="html"/>
<xsl:template match="/">
<xsl:apply-templates select="/rdf:RDF/foo:channel"/>
</xsl:template>
<xsl:template match="/rdf:RDF/foo:channel">
<h3><xsl:value-of select="foo:title"/></h3>
<p><xsl:value-of select="foo:description"/></p>
<ul>
<xsl:apply-templates select="/rdf:RDF/foo:item"/>
</ul>
</xsl:template>
<xsl:template match="/rdf:RDF/foo:item">
<li>
<a href="{foo:link}" title="{substring(dc:date, 0, 11)}"><xsl:value-of select="foo:title"/></a>
<p><xsl:value-of select="foo:description" disable-output-escaping="yes" /></p>
</li>
</xsl:template>
</xsl:stylesheet>
它与RDF文件完美配合: (这是完整文件的链接) http://dl.dropbox.com/u/2232733/rdfexample.xml
<?xml version="1.0" encoding="utf-8"?><!-- generator="wordpress/1.2" -->
<rdf:RDF
xmlns="http://purl.org/rss/1.0/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:dcterms="http://purl.org/dc/terms/"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:admin="http://webns.net/mvcb/"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
>
<channel rdf:about="http://www.wasab.dk/morten/blog/rdf">
<title>Binary Relations</title>
<link>http://www.wasab.dk/morten/blog</link>
<description>Reflections on the web</description>
<dc:language>en</dc:language>
<dc:date>2004-05-29T23:02:37Z</dc:date>
<admin:generatorAgent rdf:resource="http://wordpress.org/?v=1.2"/>
<sy:updatePeriod>hourly</sy:updatePeriod>
<sy:updateFrequency>1</sy:updateFrequency>
<sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>
<items>
<rdf:Seq>
<rdf:li rdf:resource="http://www.wasab.dk/morten/blog/archives/2004/05/30/wordpress-plugin-linkifier"/>
...
<rdf:li rdf:resource="http://www.wasab.dk/morten/blog/archives/2004/05/20/yet-another-semweb-blogger"/>
</rdf:Seq>
</items>
</channel>
<item rdf:about="http://www.wasab.dk/morten/blog/archives/2004/05/30/wordpress-plugin-linkifier">
<title>WordPress Plugin: Linkifier</title>
但是,我无法使用它来自lastfm.rdfize.com/的RDF \ XML: (这是文件的链接) http://dl.dropbox.com/u/2232733/metallica_rdf_xml.xml
它有不同的结构,我无法弄清楚XSTL中应该使用什么标签来制作HTML:
rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:terms="http://purl.org/dc/terms/"
xmlns:foaf="http://xmlns.com/foaf/0.1/"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:mo="http://purl.org/ontology/mo/"
xmlns:ov="http://open.vocab.org/terms/"
xmlns:event="http://purl.org/NET/c4dm/event.owl#"
xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
xmlns:v="http://www.w3.org/2006/vcard/ns#">
<rdf:Description rdf:about="http://lastfm.rdfize.com/artists/Metallica">
<rdf:type rdf:resource="http://purl.org/ontology/mo/MusicArtist"/>
<rdfs:label>Metallica</rdfs:label>
...
所以我的问题是 - 我应该如何形成一个XSLT来处理我的RDF? 提前谢谢!
答案 0 :(得分:4)
您的主要问题是您的样式表过于特定于域名。 RDF / XML是一个非常复杂的序列化,允许多种方式表达事物。样式表指的是非常具体的元素名称,这些名称仅在非常窄的RDF / XML文档范围内有效,例如
<xsl:template match="/rdf:RDF/foo:item">
以上尝试匹配实际上不是必需的根级<rdf:RDF>
元素 - 可以使用其他根元素或将<rdf:RDF>
嵌入到其他XML元素中是可接受的之一。
然后它会尝试匹配<foo:item>
元素,这是一个特定于文档的ID,这个元素名称绝对可以是一般的<rdf:Description>
到前一个例子。
<强>解决方案强>
不要尝试使用样式表转换RDF / XML,因为您编写的任何样式表都可以转换为可以转换各种RDF / XML文档,这将是如此复杂,以至于没有任何意义
相反找到一个好的RDF库(大多数主要语言都有一个或多个),它提供了一个RDF / XML解析器和一个HTML或HTML + RDFa编写器并使用它们。如果要将HTML输出作为基础控制,请使用库的HTML编写器作为指南并进行调整,或者只在其输出上应用CSS样式表。
答案 1 :(得分:-1)
同意Rob的意见,您应该查看一个好的RDF API,但您可能还想查看grddl。