Чтение RDF-файла Turtle / N3 с помощью Python

Я ' Я пытаюсь закодировать некоторые ботанические данные в формате Turtle и прочитать эти данные из Python, используя RDFLib . Однако у меня возникли проблемы, и я не уверен, что это из-за того, что моя Черепаха неправильно сформирована или я неправильно использую RDFLib.

Мои тестовые данные:

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

И мой Python:

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

Что дает мне ошибки:

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

Я пытался изменить параметры parse (), но все дает мне ошибку. Я нашел мало или нет примеров о том, как разобрать Turtle. Что я делаю не так?

8
задан Mpizos Dimitris 25 September 2019 в 09:48
поделиться

1 ответ

Я думаю, что первая проблема связана с прописными буквами ПРЕФИКСОМ -- если вы укажете их строчными буквами, они перейдут эту точку. Не уверен, что это ошибка в rdflib или в Turtle .ttl, но онлайн-демонстрация Turtle Validator, кажется, соглашается, что это проблема с .ttl ( говорит Проверка не удалась: директива @PREFIX не поддерживается, строка 1 столбец 0. но эта проблема исчезнет, ​​если вы наберете их в нижнем регистре).

Как только вы преодолеете это препятствие, ни одному парсеру не понравится часть вокруг p:given_by [: "Плохой синтаксис (']' в ^ in:"... per rdflib; Turtle Validator говорит

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

, что ему особенно не нравится часть p:source/Philip_Miller.

Из этих двух проблем (кто знает, есть ли другие...!) Я думаю, вы можете сделать вывод, что этот источник N3 (файл .ttl, который вы публикуете) поврежден, и обратите внимание на какая система создала этот файл в первую очередь, и почему она делает его таким многократным испорченным.

10
ответ дан 5 December 2019 в 17:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: