2012-05-08 57 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