2010-08-24 30 views
8

Tôi đang cố mã hóa một số dữ liệu thực vật ở định dạng Turtle và đọc dữ liệu này từ Python bằng cách sử dụng RDFLib. Tuy nhiên, tôi đang gặp rắc rối, và tôi không chắc chắn nếu đó là vì Rùa của tôi không đúng định dạng hoặc tôi là misusing RDFLib.Đọc tệp Rùa/N3 RDF bằng Python

dữ liệu thử nghiệm của tôi là:

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

Và Python của tôi là:

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 

nào mang lại cho tôi những lỗi:

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

Tôi đã thử cách thay đổi parse() các thông số, nhưng mọi thứ đều cho tôi một lỗi. Tôi đã tìm thấy rất ít ví dụ về cách phân tích Rùa. Tôi đang làm gì sai?

Trả lời

10

Tôi nghĩ rằng vấn đề đầu tiên là w/chữ hoaPREFIX - nếu bạn viết hoa chữ thường xuống quá điểm đó. Không chắc chắn nếu đó là một lỗi trong rdflib hoặc trong Turtle .ttl, nhưng bản demo trực tuyến Turtle Validator dường như đồng ý đó là một vấn đề với .ttl (nói Validation failed: The @PREFIX directive is not supported, line 1 col 0. nhưng vấn đề đó sẽ biến mất nếu bạn viết thường).

Khi bạn đã vượt qua rào cản đó, không phải trình phân tích cú pháp thích phần xung quanh p:given_by [: "Cú pháp sai (']' được mong đợi) tại^trong:" ... trên mỗi rdflib; Turtle Validator nói

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

vì vậy nó đặc biệt không thích phần p:source/Philip_Miller.

Từ hai vấn đề này (ai mà biết được nếu có những người khác ...!) Tôi nghĩ bạn có thể kết luận rằng nguồn N3 này (file .ttl bạn gửi) bị phá vỡ, và chuyển sự chú ý của bạn đến bất cứ điều gì hệ thống làm này tập tin ở nơi đầu tiên, và tại sao nó làm cho nó trong một cách nhân cách bị hỏng.

+0

Cảm ơn. Thay đổi dòng đó thành dường như khắc phục được sự cố. – Cerin

+0

@ Chris, tốt để biết, cảm ơn! –