使用 python / rdflib 解析 turtle,无法指定 IRI 前缀
Parsing turtle with python / rdflib, can't specify IRI prefix
我正在尝试使用 Python v3.6.5 中的 RDFlib v4.2.2、OS X 10.14.3 Mojave 中的 运行 解析 turtle-formatted 数据文件.根据最初的错误消息,我发现 turtle 文件缺少词汇 URI 前缀:@prefix xsd: <http://www.w3.org/2001/XMLSchema#>
.
如果我将这一行添加到文件的 header 中,它会按预期工作。但如果不编辑数据文件就可以完成此操作,因为它可以由源不时更新。作为 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')
但是,没有快乐。如果有帮助,这里是文件中的 header 和一只海龟样本,它描述了不同的货币,取自 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" .
是否可以补充 turtle 文件中包含的前缀 URI,如果可以,如何补充?
我注意到缺少的词汇表 XSD 是 Turtle grammar 规范的组成部分。我想知道在某些实现中是否明确声明它可能是可选的?
不,您发布的海龟片段无效。 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
我正在尝试使用 Python v3.6.5 中的 RDFlib v4.2.2、OS X 10.14.3 Mojave 中的 运行 解析 turtle-formatted 数据文件.根据最初的错误消息,我发现 turtle 文件缺少词汇 URI 前缀:@prefix xsd: <http://www.w3.org/2001/XMLSchema#>
.
如果我将这一行添加到文件的 header 中,它会按预期工作。但如果不编辑数据文件就可以完成此操作,因为它可以由源不时更新。作为 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')
但是,没有快乐。如果有帮助,这里是文件中的 header 和一只海龟样本,它描述了不同的货币,取自 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" .
是否可以补充 turtle 文件中包含的前缀 URI,如果可以,如何补充?
我注意到缺少的词汇表 XSD 是 Turtle grammar 规范的组成部分。我想知道在某些实现中是否明确声明它可能是可选的?
不,您发布的海龟片段无效。 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