2012-05-08 3 views
1

Можно создать дубликат:
create RDF from XMLИспользование Jena для создания RDF из 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> 

Я думаю, что с помощью 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

Я предложил бы использовать XSLT для преобразования XML, что в RDF. Поскольку это, вероятно, очень регулярно, XSLT будет достаточно простым для написания и применения, чтобы получить RDF, который вы хотите. Затем вы можете использовать Jena для анализа полученного RDF и сделать что-то с этим.

+0

Я согласен. Я бы использовал XSLT для переноса XML таким образом в RDF. – MikeJ

5

Вы не можете разобрать XML с помощью Jena, если только это не RDF/XML.

Вам нужно будет использовать XLST для преобразования XML в RDF или разбора XML с помощью XML-библиотеки Java, чтобы получить данные и создать тройки из интересующих данных.

Использование 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> 

Вы можете загрузить файл ФРР в Йене

+0

Большое спасибо за ваш ответ, но мне действительно нужно использовать jena вместо XSLT. – Lucy

+1

Jena не является парсером XML. Он может разбирать * RDF * XML, но это совсем другое дело. Вам не нужно использовать Jena для анализа и преобразования XML, если вам сказали, что это дезинформировано. Используйте Jena для обработки полученного RDF. Единственное, что близко к использованию Jena для обработки, это использование их поддержки GRDDL, но это просто использование Jena для запуска XSLT против XML, чтобы превратить его в RDF. – Michael

+1

Как уже указывалось, вы не можете проанализировать XML с помощью Jena. Вам нужно будет использовать XLST или проанализировать XML с помощью библиотеки Java XML, чтобы получить данные и создать тройки из интересующих данных. Я уточню свой ответ, чтобы подчеркнуть эту ситуацию. – MikeJ