使用jena从XMl文件创建RDF

时间:2012-05-08 13:09:46

标签: xml xml-parsing rdf semantic-web jena

  

可能重复:
  create RDF from XML

我很抱歉第二次提出这个问题,我仍然无法从以下xml文件生成rdf。

<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>

我认为使用jena可能会解决问题,但我不知道该怎么做,因为每个人都有三个属性,我希望看起来像以下

<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 个答案:

答案 0 :(得分:5)

除非是RDF / XML,否则无法使用Jena解析XML。

您必须使用XLST将XML转换为RDF或使用Java XML库解析XML以获取数据并根据感兴趣的数据创建三元组。

使用XSLT非常简单,如下例所示。

由于网站是URL我将其用作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文件加载到Jena

答案 1 :(得分:2)

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