使用python / rdflib解析turtle,无法指定IRI前缀

时间:2019-03-15 12:08:55

标签: python rdflib turtle-rdf

我正在尝试使用在OS X 10.14.3 Mojave上运行的Python v3.6.5中的RDFlib v4.2.2解析乌龟格式的数据文件。根据最初的错误消息,我发现乌龟文件缺少词汇表URI前缀:@prefix xsd: <http://www.w3.org/2001/XMLSchema#>

如果我将这一行添加到文件的标题中,它将按预期工作。但是最好不编辑数据文件即可完成此操作,因为它可以由源不时更新。作为RDF和Turtle的新手,我扫描了RDFlib documentation,并决定绑定前缀是我想要的:

from rdflib import Graph
g = Graph()
g.namespace_manager.bind('prefix', 'xsd:http://www.w3.org/2001/XMLSchema#')
g.parse( 'currency.ttl', format='turtle')

但是,没有喜悦。如果有帮助,请参见以下文件的标题和一个示例乌龟,该文件描述了从Thomson Reuters Open PermID project提取的不同货币:

@prefix tr-common: <http://permid.org/ontology/common/> .
@prefix tr-currency: <http://permid.org/ontology/currency/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .

<https://permid.org/1-500191>
    a                                tr-currency:Currency ;
    tr-common:hasPermId              "500191"^^xsd:string ;
    tr-currency:decimalPlaces        "0"^^xsd:decimal ;
    tr-currency:isCurrencyOf         <http://sws.geonames.org/1835841> ;
    tr-currency:isISOHistorical      false ;
    tr-currency:isPrimaryCurrencyOf  <http://sws.geonames.org/1835841> ;
    tr-currency:iso4217              "KRW"^^xsd:string ;
    tr-currency:iso4217Numeric       "410"^^xsd:string ;
    skos:prefLabel                   "Korean (South) Won" .

是否可以补充乌龟文件中包含的前缀URI,如果可以,怎么办?

我注意到缺少的词汇表XSD是Turtle grammar规范的组成部分。我想知道是否明确声明在某些实现中它是否是可选的?

1 个答案:

答案 0 :(得分:1)

否,您发布的乌龟代码段无效。 XSD需要明确声明。

您可以以字符串形式读取文件,并在xsd前缀之前添加,然后使用RDFLib进行解析,例如:

with open('currency.ttl') as in_file:
    ttl_str = '@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .' + in_file.read()
g.parse(data=ttl_str, format='turtle')

假设您正在解析有效的turtle,则绑定xsd前缀的方式存在错误。您想要:

from rdflib import Graph
g = Graph()
g.namespace_manager.bind('xsd', 'http://www.w3.org/2001/XMLSchema#')
g.parse( 'currency.ttl', format='turtle')

我建议看看有关命名空间管理的RDFLib documentation

XSD名称空间包含在RDFLib中。导入为:

from rdflib.namespace import XSD