2

所以我有一个看起来像这样的 Notation3 文件:

@prefix wn: <http://www.w3.org/2006/03/wn/wn20/instances/> .
@prefix lemon: <http://www.monnet-project.eu/#> .
@prefix lexinfo: <http://www.lexinfo.net/ontology#> .

:lexicon a lemon:Lexicon ;
    lemon:language "it" ;
    lemon:entry :fifa.

:fifa a lemon:LexicalEntry ;
   lemon:canonicalForm [ lemon:writtenRep "fifa"@it ] ;
   lemon:sense [ lemon:reference wn:synset-fear-noun-1 ];
   lexinfo:partOfSpeech lexinfo:noun .

我正在尝试将其输入到 RDFlib Graph 中并使用以下代码将其序列化为 RDFxml 文件:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import rdflib
from rdflib import URIRef, Graph, Namespace
from rdflib.plugins.parsers.notation3 import N3Parser

g = Graph()
result = g.parse(file=open("lemon_example_fear.txt", "r"), format="text/n3")
print (g.serialize(format='xml'))

但目前我收到此错误:

rdflib.plugins.parsers.notation3.BadSyntax: at line 5 of <>:
Bad syntax (Prefix ":" not bound) at ^ in:
"... lexinfo: <http://www.lexinfo.net/ontology/2.0/lexinfo#> .

^:lexicon a lemon:Lexicon ;
    lemon:language "it" ;
    lem..."

这是我尝试序列化的文件还是我用来执行序列化的代码的问题?

4

2 回答 2

3

为了补充@jsalonen所说的内容,未绑定的前缀不是留给解析器的,而是规范说明了以下内容:

默认情况下,空前缀“”绑定到“#”——文件的本地命名空间。解析器的行为就像有一个

@prefix : <#>.

因此,未绑定前缀的确切解析将取决于解析器认为文件的本地命名空间,因此解析器之间的不同行为。

请注意,在Turtle等更标准的格式中,这并不适用,未绑定的前缀将始终导致错误。

一般来说,不定义所有前缀或使用任何 RDF 格式的相对 URI 是一个坏主意,因为您将受制于特定实现的 URI 解析行为,如前所述,这些行为在序列化之间可能会有所不同。

于 2013-07-12T16:09:48.800 回答
1

我在使用 RDFLib 3 和 4 时都遇到了错误,因此,正如我最初怀疑的那样,这不仅仅是 RDFLib 4 中引入的回归错误。

仔细查看您的数据,我觉得发生了一些可疑的事情。

以第一组语句为例:

:lexicon a lemon:Lexicon ;
    lemon:language "it" ;
    lemon:entry :fifa,
    :timore.

就 RDF 而言,您在这里所说的是您要定义由调用的无前缀属性引用的主题,:lexicon并为其分配更多无前缀属性(例如:fifa:timore)。

鉴于您尚未定义 RDF 解析器应如何处理未绑定的前缀,每个解析器自己决定如何继续。例如,W3C RDF Validation 使用生成的命名空间(例如#lexicon-> http://www.w3.org/RDF/Validator/run/1373638767868#lexicon)分配无前缀属性。这里的问题是,这是由解析器决定的。在您的情况下,解析器决定向您抛出一个错误,恕我直言,这是非常可以接受的,它不推荐行为。

我能想到的最简单的解决方法是在 N3 文件的开头显式定义无前缀属性的前缀,如下所示:

@prefix : <#> .

您还可以使用 RDFLib 以编程方式将前缀添加到图形中。

编辑:如另一个答案中所述,N3 规范明确定义了应如何处理未定义的空前缀,因此这实际上可以被视为 RDFLib 中的错误。

跟进(2013-07-28):该问题已报告给 RDFLib 维护人员,经过调查,可能是由 bug 引起的。有关详细信息,请参阅问题跟踪器:https ://github.com/RDFLib/rdflib/issues/312

于 2013-07-12T14:24:00.327 回答