2010-11-15 91 views
4

我正尝试使用XSLT将RDF文件转换为HTML。从RDF到HTML的XSLT转换

我使用,我已经在网络上找到的模板: 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> 

但是,我不能让它一个RDF \ XML,我从lastfm.rdfize.com/得到工作: (这里是该文件的链接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

1.这两个文本都是严重畸形的 - 不完整的XML文档。 2.根本没有问题。请改正。 – 2010-11-15 03:02:58

+0

我提供了上面的链接 - http://dl.dropbox.com/u/2232733/rdfexample.xml http://dl.dropbox.com/u/2232733/metallica_rdf_xml.xml 问题是 - 如何正确处理我的rdf? – Hippopotamus 2010-11-15 10:37:46

+0

也许如果你提供了一个期望的输出,那么有人会为你的输入样本发布一个样式表的例子。 – 2010-11-15 21:16:22

回答

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文档会如此ridicously复杂,以使没有任何意义。

相反发现自己良好的RDF库(有一个/多个那里大多数主要语言),它提供了一个RDF/XML解析器和HTML或HTML + RDFa的作家,并使用这些。如果您想要将HTML输出作为基础控件使用该库的HTML编写器作为指导,并对其进行调整或仅在其输出上应用CSS样式表。

+0

谢谢! 你能指点我一个有HTML编写器的人吗? 我目前正在使用Jena,但是Jena只允许导出为XML和TURTLE。 – Hippopotamus 2010-11-15 09:51:43

+0

你对“不使用通用样式表”的建议是正确的。 RDF是一种尝试标准“关系”的词汇加上标准“语义”词汇的持有者。但是,只要您知道如何处理这两个字段,就可以使用通用样式表。 – 2010-11-15 21:15:17

+0

@Hippopotamus Jena有RDFa作家,但他们不是标准jena发行版的一部分 – RobV 2010-11-16 10:07:16

-1

与Rob一致,你应该看看一个好的RDF API,但你也可能想看看grddl

+0

-1。 GRDDL正试图解决相反的问题:将XML转换为RDF,并使用XSLT进行处理。将RDF/XML转换为其他XML格式是没有用的。 – 2016-03-27 23:32:24