8 votes

Lire un fichier RDF Turtle/N3 avec Python

J'essaie d'encoder des données botaniques en Tortue et lire ces données à partir de Python en utilisant le format RDFLib . Cependant, j'ai des difficultés, et je ne sais pas si c'est parce que ma tortue est mal formée ou parce que je suis en train de faire des erreurs. abuser RDFLib.

Mes données de test sont les suivantes

@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
        ]
    ] .

Et mon Python est :

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

Ce qui m'amène à faire des erreurs :

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

J'ai essayé de varier les paramètres de parse(), mais tout me donne une erreur. Je n'ai trouvé que peu ou pas d'exemples sur la façon d'analyser Turtle. Qu'est-ce que je fais de travers ?

10voto

Alex Martelli Points 330805

Je pense que le premier problème est lié à la majuscules PREFIX -- Si vous les mettez en minuscules, vous dépassez ce stade. Je ne sais pas si c'est un bug dans la rdflib ou dans la Turtle. .ttl mais le Valideur de tortue démo en ligne semble convenir qu'il s'agit d'un problème lié à la .ttl (dit Validation failed: The @PREFIX directive is not supported, line 1 col 0. mais ce problème disparaît si vous les mettez en minuscules).

Une fois cet obstacle franchi, aucun des deux analyseurs n'aime la partie autour de p:given_by [ : "Bad syntax (']' expected) at ^ in :"... per rdflib ; Turtle Validator dit

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

Il n'apprécie donc pas particulièrement la p:source/Philip_Miller partie.

À partir de ces deux questions (qui sait s'il y en a d'autres... !), je pense que l'on peut conclure que cette source N3 (la .ttl fichier que vous publiez) est cassé, et portez votre attention sur le système fait ce fichier en premier lieu, et pourquoi il le crée d'une manière aussi multiple et cassée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X