Leyendo un archivo RDF de Turtle / N3 con Python

Estoy tratando de codificar algunos datos botánicos en formato Turtle , y leer estos datos de Python usando RDFLib . Sin embargo, estoy teniendo problemas, y no estoy seguro de que sea porque mi Tortuga está mal formada o porque estoy haciendo un mal uso de RDFLib.

Mis datos de prueba son:

@PREFIX rdf:  . @PREFIX rdfs:  . @PREFIX p:  . 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"^^ ] ] ; 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 ] ] . 

Y mi Python es:

 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 

Lo que me da los errores:

 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', []]] 

He intentado variar los parámetros parse (), pero todo me da un error. He encontrado poco o ningún ejemplo sobre cómo analizar Tortuga. ¿Qué estoy haciendo mal?

Creo que el primer problema es w / el PREFIX mayúsculas – si usted escribe en minúsculas a los que supera ese punto. No estoy seguro de si es un error en rdflib o en Turtle .ttl , pero la demostración en línea de Turtle Validator parece estar de acuerdo en que es un problema con .ttl (dice Validation failed: The @PREFIX directive is not supported, line 1 col 0. pero ese problema desaparece si los minúsculas).

Una vez que p:given_by [ ese obstáculo, a ninguno de los analizadores le gusta la parte alrededor de p:given_by [ : “Se espera una syntax p:given_by [ (‘]’) en ^ en:” … per rdflib; Validador de tortugas dice

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

por lo que específicamente no le gusta la parte p:source/Philip_Miller .

De estos dos problemas (¡quién sabe si hay otros …!), Creo que puedes concluir que esta fuente N3 (el archivo .ttl que .ttl ) está dañada, y dirigir tu atención a cualquier sistema que haya hecho este archivo en primer lugar. , y por qué lo está haciendo de una manera tan rota multiplicada.