2012-05-08 37 views
1

可能重复:在生成RDF
create RDF from XML使用耶拿从XML文件创建RDF

我是问这个问题的第二次对不起,我仍然还是有问题来自以下xml文件。

<xml> 
<person> 
<name>Joe</name> 
<website url="www.example1.com">contact1</website > 
<vote>20</vote> 
</person> 
<person> 
<name>Anna</name> 
<website url="www.example2.com">contact2</website> 
<vote>80</vote> 
</person> 
</xml> 

我想用耶拿可能会解决这个问题,但我不知道怎么做,因为每个人都有有三个特性,我想出去把看起来像下面

<rdf:Description rdf:about="http://www.example.com/xml"> 
<j.0:hasCritic>Joe</j.0:hasCritic> 
<rdf:Description rdf:about=Joe > 
<j.0:haswebsite>"www.example1.com"</j.0:haswebsite> 
    <j.0:hascontact>contact1</j.0:hascontact> 
    <j.0:hasvote>80</j.0:hasvote> 
</rdf:Description> 
<j.0:hasCritic>Anna</j.0:hasCritic> 
<rdf:Description rdf:about=Anna> 
<j.0:haswebsite>"www.example2.com"</j.0:haswebsite> 
    <j.0:hascontact>contact2</j.0:hascontact> 
    <j.0:hasvote>20</j.0:hasvote> 

预先感谢任何帮助

回答

2

我将使用XSLT将XML转换成RDF建议。由于它可能非常规律,因此XSLT将非常简单易于编写和应用来获取所需的RDF。然后你可以使用Jena来解析生成的RDF并用它做一些事情。

+0

我同意。我会使用XSLT将这种XML转换为RDF。 – MikeJ

5

你不能用Jena解析XML,除非它是RDF/XML。

你将不得不使用XLST的XML与Java XML库转换成RDF或解析XML获取数据,并创建感兴趣的数据的三倍。

使用XSLT是相当简单的,如从下面的例子证明。

由于网站是网址,我会用它作为URI而不是文字。另外,FOAF在名称上很常见。所以,我会使用类似:

<xsl:stylesheet version="1.0" 
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
      xmlns:html="http://www.w3.org/1999/xhtml" 
      xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
      xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" 
      xmlns:foaf="http://xmlns.com/foaf/spec/" 
      xmlns:foo="http://example.com/foo#"> 

<xsl:template match="/"> 
    <rdf:RDF> 
     <rdf:Description rdf:about="http://www.example.com/xml"> 
      <xsl:apply-templates/> 
    </rdf:Description> 
    </rdf:RDF> 
</xsl:template> 

<xsl:template match="person"> 
<xsl:variable name="critic"><xsl:value-of select="name"/></xsl:variable> 
<xsl:variable name="criticWebsite"><xsl:value-of select="website/@url"/</xsl:variable> 
<foo:hasCritic> 
    <rdf:Description rdf:about="http://www.example.com/critic/{$critic}"> 
     <foaf:name><xsl:value-of select="name"/></foaf:name> 
     <foaf:homepage> 
      <rdf:Description rdf:about="http://{$criticWebsite}"> 
       <rdfs:label><xsl:value-of select="website"/></rdfs:label> 
      </rdf:Description> 
     </foaf:homepage> 
    </rdf:Description> 
</foo:hasCritic> 
</xsl:template> 

</xsl:stylesheet> 

这会给你:

<?xml version="1.0"?> 
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
    xmlns:html="http://www.w3.org/1999/xhtml" 
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" 
    xmlns:foaf="http://xmlns.com/foaf/spec/" 
    xmlns:foo="http://example.com/foo#"> 

    <rdf:Description rdf:about="http://www.example.com/xml"> 
     <foo:hasCritic> 
      <rdf:Description rdf:about="http://www.example.com/critic/Joe"> 
       <foaf:name>Joe</foaf:name> 
       <foaf:homepage> 
        <rdf:Description rdf:about="http://www.example1.com"> 
         <rdfs:label>contact1</rdfs:label> 
        </rdf:Description> 
       </foaf:homepage> 
      </rdf:Description> 
     </foo:hasCritic> 
     <foo:hasCritic> 
     <rdf:Description rdf:about="http://www.example.com/critic/Anna"> 
      <foaf:name>Anna</foaf:name> 
       <foaf:homepage> 
        <rdf:Description rdf:about="http://www.example2.com"> 
         <rdfs:label>contact2</rdfs:label> 
        </rdf:Description> 
       </foaf:homepage> 
      </rdf:Description> 
     </foo:hasCritic> 
     </rdf:Description> 
    </rdf:RDF> 

然后,您可以加载RDF文件到耶拿

+0

非常感谢您的回答,但我确实需要使用jena代替XSLT – Lucy

+1

Jena不是XML解析器。它可以解析* RDF * XML,但这是另一回事。如果您被告知,您不需要使用Jena来解析和转换XML,那是错误的。使用Jena来处理生成的RDF。接近使用耶拿来处理这个问题的唯一事情是使用他们的GRDDL的支持,但是这只是用耶拿运行对XML XSLT把它变成RDF。 – Michael

+1

因为它已经指出的那样,你不能解析与耶拿的XML。你将不得不使用XLST或解析XML与Java XML库获取数据,并创建感兴趣的数据的三倍。我会更新我的答案以强调这种情况。 – MikeJ