@prefix在sparql中做了什么?

时间:2013-08-17 21:08:59

标签: sparql owl protege

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

@prefix:http://example.org/animals/

为什么这样写?

2 个答案:

答案 0 :(得分:3)

Jeen Broekstra's answer是正确的; @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:具有相同的前缀。特定前缀无关紧要,只要它扩展到的实际(部分)URI是相同的。严格来说,前缀是为了方便人们;它们并非绝对必要。

答案 1 :(得分:2)

“@ PREFIX”在SPARQL中不执行任何操作,除非可能生成语法错误。

然而,

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