8

いくつかの植物データをTurtle形式でエンコードし、 RDFLibを使用してPythonからこのデータを読み取ろうとしています。しかし、私は問題を抱えており、それが私のタートルの奇形なのか、RDFLibの誤用によるものなのかわかりません。

私のテストデータは次のとおりです。

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

そして私の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を解析する方法の例はほとんどまたはまったく見つかりませんでした。私は何が間違っているのですか?

4

1 に答える 1

10

最初の問題は大文字 だと思いますPREFIX-それらを小文字にすると、その点を過ぎてしまいます。それが rdflib のバグなのか Turtle のバグなのかはわかりません.ttlが、Turtle Validatorのオンライン デモでは、それが の問題であることに同意しているようです.ttl(Validation failed: The @PREFIX directive is not supported, line 1 col 0.ただし、小文字にすると問題は解決します)。

そのハードルを乗り越えると、どちらのパーサーも次のような部分をp:given_by [好まなくなります。タートルバリデーター 言う

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

そのため、特にそのp:source/Philip_Miller部分が嫌いです。

これら 2 つの問題 (他に問題があるかどうかは誰にもわかりません...!) から、この N3 ソース (投稿したファイル) が壊れていると結論付けて、最初にこのファイルを作成.ttlしたシステムに注意を向けることができると思います。なぜこんなにも壊れた方法でそれを作っているのですか。

于 2010-08-24T14:58:12.623 に答える