2010-08-24 1 views
8

Я пытаюсь закодировать некоторые ботанические данные в формате Turtle и читать эти данные с Python с помощью RDFLib. Тем не менее, у меня проблемы, и я не уверен, что это связано с тем, что моя черепаха искажена, или я misusing RDFLib.Чтение файла Runtime Turtle/N3 с Python

Мой тест данные:

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

И мой Питон:

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

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

ответ

10

Я думаю, что первая проблема связана с прописными буквамиPREFIX - если у вас строчные буквы, они пройдут мимо этой точки. Не уверен, что это ошибка в rdflib или в Turtle .ttl, но онлайн-демонстрация Turtle Validator, похоже, согласна с тем, что это проблема с .ttl (говорит Validation failed: The @PREFIX directive is not supported, line 1 col 0., но эта проблема уходит, если вы в нижнем регистре).

После того, как вы преодолели этот барьер, ни один парсер не любит часть вокруг p:given_by [: «Незначительный синтаксис (']' ожидается) на^в:« ... на rdflib; Черепаха валидатор говорит

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

поэтому специально не любит p:source/Philip_Miller часть.

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

+0

Спасибо. Изменение этой строки в похоже на проблему. – Cerin

+0

@ Крис, приятно знать, спасибо! –