2

我有一个问题:在 sparql 中,@prefix 做了什么:

@前缀:http ://example.org/animals/

为什么要这样写?

4

2 回答 2

5

Jeen Broekstra 的回答是正确的; @prefix <...>不是合法的 SPARQL 语法,只会为您产生语法错误。然而,在 RDF 的 Turtle 和 N3 序列化中也有类似的结构。在这些语法中,代码

@prefix animals: <http://example.org/animals/>.
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.

animals:Moose rdfs:subClasof animals:Animal

是具有单个三元组的图:

<http://example.org/animals/Moose> <http://www.w3.org/2000/01/rdf-schema#subClassOf> <http://example.org/animals/Animal>

这些@prefix行定义了前缀,使在图形的序列化中引用 IRI 变得更加容易。SPARQL 也有前缀声明,但语法有点不同。在 SPARQL 查询@中,行首没有.,行尾没有。因此,继续上面的示例,您可以animal:Animal使用以下查询查询子类的所有内容:

prefix an: <http://example.org/animals/>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select ?subclass where { 
  ?subclass rdfs:subClassOf an:Animal
}

请注意,在第一次序列化中,我们使用animals:了但在 SPARQL 查询中,我们使用an:了相同的前缀。特定前缀无关紧要,只要它扩展为的实际(a 部分)URI 相同。严格来说,前缀是为了人类方便;它们不是绝对必要的。

于 2013-08-18T12:02:21.847 回答
3

"@PREFIX" 在 SPARQL 中不做任何事情,除了可能产生语法错误。

然而,“PREFIX”(没有“@”)是用于声明命名空间前缀的 SPARQL 指令。它允许您在查询中编写前缀名称,而不必在任何地方使用完整的 URI。因此,它是一种语法便利机制,用于更短、更易于阅读(和编写)查询。

于 2013-08-17T23:12:59.867 回答