Warm tip: This article is reproduced from serverfault.com, please click

sparql-导入的.owl文件的前缀与原始rdf4j Triplestore相比带有#

(sparql - imported .owl files have #'s in prefixes vs original rdf4j triplestore)

发布于 2020-12-05 00:04:25

当我导入该Virtuoso三重存储的转储“ PathwayCommons12.All.BIOPAX.owl.gz”(从此页面链接)时,我注意到在各种URI的前缀之后插入了“#”。

特别是,以下查询在原始端点上运行

# Query 1
PREFIX pfx: <http://pathwaycommons.org/pc12/>

select ?pw 
where {
?pw a bp:Pathway
values ?pw {pfx:Pathway_c2fd3d95c8c65552a0514393ede60c37}
}

但是要使其在本地端点(导入的owl dump)上运行,我必须在pfx:like的末尾添加一个“#”

# Query 2
PREFIX pfx: <http://pathwaycommons.org/pc12/#>

select ?pw 
where {
?pw a bp:Pathway
values ?pw {pfx:Pathway_c2fd3d95c8c65552a0514393ede60c37}
}

请注意,查询1仅在原始端点上起作用,而查询2仅在本地端点上起作用。

这里发生了什么?

Questioner
mkk
Viewed
0
Jeen Broekstra 2020-12-05 10:24:01

如果我们查看该大型RDF / XML文件的前几行,则会看到:

<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns:owl="http://www.w3.org/2002/07/owl#"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
 xmlns:bp="http://www.biopax.org/release/biopax-level3.owl#"
 xml:base="http://pathwaycommons.org/pc12/">
<owl:Ontology rdf:about="">
 <owl:imports rdf:resource="http://www.biopax.org/release/biopax-level3.owl#" />
</owl:Ontology>

<bp:ExperimentalForm rdf:ID="ExperimentalForm_ee10aeab-1129-49ad-8217-4193f4fbf7e0">
 <bp:comment rdf:datatype = "http://www.w3.org/2001/XMLSchema#string">[ExperimentalFormVocabulary_bait]</bp:comment>
 <bp:experimentalFormDescription rdf:resource="#ExperimentalFormVocabulary_701737e5cf53d06134cbd3ee59611827" />
</bp:ExperimentalForm>

注意rdf:ID此处属性:“ ExperimentalForm_ee10aeab-1129-49ad-8217-4193f4fbf7e0”。这是一个相对URI,需要针对基本URI(在文档标头中声明的“ http://pathwaycommons.org/pc12/”声明)进行解析。RDF / XML语法规范的2.14节中描述了这种解析是如何发生的

可以使用节点元素(不是属性元素,它具有另一种含义)上的rdf:ID属性代替rdf:about,并给出与#等效的相对IRI与rdf:ID属性值串联因此,例如,如果rdf:ID =“ name”,则等效于rdf:about =“#name”。

(强调我的)

规范中的示例16进一步说明了这一点。

归结为,在解析此RDF / XML时,作为rdf:ID属性提供的值全部解析为http://pathwaycommons.org/pc12/#<ID>因此,你在GraphDB中获得的结果对于给定的输入是正确的。我不知道为什么它在Virtuoso端点中有所不同:要么他们使用了不同的输入文件,要么他们的解析器中有错误,或者用于生成此转储文件的任何工具都包含了错误。

可以肯定地说,创建转储文件的人意图rdf:ID="ExperimentalForm_ee10aeab-1129-49ad-8217-4193f4fbf7e0" 将解析为IRI http://pathwaycommons.org/pc12/ExperimentalForm_ee10aeab-1129-49ad-8217-4193f4fbf7e0(即没有添加#字符)。有几种方法在文件中解决这个问题:要么更换所有出现rdf:IDrdf:about,否则不依赖于相对URI分辨率,只是使用完整的URI的rdf:ID值。