2010-08-24 10 views
8

Ich versuche einige botanische Daten im Format Turtle zu kodieren und lese diese Daten aus Python mit RDFLib. Allerdings habe ich Probleme, und ich bin mir nicht sicher, ob das daran liegt, dass meine Turtle falsch formatiert ist oder ich misusing RDFLib bin.Eine Turtle/N3 RDF-Datei mit Python lesen

Meine Testdaten:

@PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . 
@PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> . 
@PREFIX p: <http://www.myplantdomain.com/plant/description> . 
p:description a rdfs:Property . 
p:name a rdfs:Property . 
p:language a rdfs:Property . 
p:value a rdfs:Property . 
p:gender a rdfs:Property . 
p:inforescence a rdfs:Property . 
p:color a rdfs:Property . 
p:sense a rdfs:Property . 
p:type a rdfs:Property . 
p:fruit a rdfs:Property . 
p:flower a rdfs:Property . 
p:dataSource a rdfs:Property . 
p:degree a rdfs:Property . 
p:date a rdfs:Property . 
p:person a rdfs:Property . 
p:c2a7b9a3-c54a-41f5-a3b2-155351b3590f 
    p:description [ 
     p:name [ 
      p:kingdom "Plantae" ; 
      p:division "Pinophyta" ; 
      p:class "Pinopsida" ; 
      p:order "Pinales" ; 
      p:family "Pinaceae" ; 
      p:genus "Abies" ; 
      p:species "A. alba" ; 
      p:language "latin" ; 
      p:given_by [ 
       p:person p:source/Philip_Miller ; 
       p:start_date "1923-1-2"^^<http://www.w3.org/2001/XMLSchema#date> 
      ] 
     ] ; 
     p:name [ 
      p:language "english" ; 
      p:value "silver fir" 
     ] ; 
     p:flower [ 
      p:gender "male"@en ; 
      p:inflorescence "catkin"@en ; 
      p:color "brown"@en ; 
      p:color "yellow"@en ; 
      p:sense "straight"@en 
     ] ; 
     p:flower [ 
      p:gender "female"@en ; 
      p:inflorescence "catkin"@en ; 
      p:color "pink"@en ; 
      p:color "yellow"@en ; 
      p:sense "straight"@en 
     ] ; 
     p:fruit [ 
      p:type "cone"@en ; 
      p:color "brown"@en 
     ] 
    ] . 

Und meine Python ist:

import rdflib 
g = rdflib.Graph() 
#result = g.parse('trees.ttl') 
#result = g.parse('trees.ttl', format='ttl') 
result = g.parse('trees.ttl', format='n3') 
print len(g) 
for stmt in g: 
    print stmt 

die mir die Fehler gibt:

ValueError: Found @PREFIX when expecting a http://www.w3.org/2000/10/swap/grammar/n3#document . todoStack=[['http://www.w3.org/2000/10/swap/grammar/n3#document', []]] 

Ich habe versucht Variation der Parse() Parameter, aber alles gibt mir einen Fehler. Ich habe wenig bis gar keine Beispiele dafür gefunden, Turtle zu analysieren. Was mache ich falsch?

Antwort

10

Ich denke, das erste Problem ist w/die GroßbuchstabenPREFIX - wenn Sie Kleinbuchstaben diejenigen es über diesen Punkt hinaus. Nicht sicher, ob es ein Fehler in der rdflib oder in der Turtle .ttl ist, aber die Turtle Validator Online-Demo scheint zuzustimmen, es ist ein Problem mit der .ttl (sagt Validation failed: The @PREFIX directive is not supported, line 1 col 0., aber dieses Problem verschwindet, wenn Sie sie Kleinbuchstaben).

Sobald Sie diese Hürde überwunden haben, mag kein Parser den Teil um p:given_by [: "Schlechte Syntax (']' erwartet) bei^in:" ... per rdflib; Turtle Validator sagt

Validation failed: Expecting a period, semicolon, comma, close-bracket, or close-brace but found '/', line 31 col 33. 

so spezifisch es nicht mag den p:source/Philip_Miller Teil.

Aus diesen beiden Fragen (wer, wenn es weiß, andere sind ...!) Ich glaube, dass diese N3 Quelle schließen kann (die .ttl Datei, die Sie schreiben) gebrochen ist, und schalten Sie Ihre Aufmerksamkeit auf was auch immer System machte diese Datei an erster Stelle, und warum es so viel gebrochen ist.

+0

Danke. Das Ändern der Zeile in scheint das Problem zu beheben. – Cerin

+0

@Chris, gut zu wissen, danke! –