2013-08-17 19 views
-1

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

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

,为什么这样写?

+0

[Jeen Broekstra的答案](http://stackoverflow.com/a/18294179/1281433)是正确的; '@prefix <...>'不仅仅是SPARQL中的语法错误。在对这个答案的评论中,你提到了用Protégé做些什么。如果您可以更加具体地了解您在Protégé中所做的事情,以及您遇到过'@prefix <...>'(可能是来自Protégé的屏幕截图),那么您可以根据自己的想法获得更多答案。 –

回答

2

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行定义的前缀,使得它更容易在该曲线图的序列化基准虹膜。 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)是相同的,那么特定的前缀无关紧要。严格地说,前缀是为了人类的方便;他们不是绝对必要的。

+0

谢谢。我完全理解。 – sima412

1

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

但是“PREFIX”(不带“@”)是用于声明命名空间前缀的SPARQL指令。它允许您在查询中编写prefixed names,而不必在任何地方使用完整的URI。所以这是一种语法便利机制,可以缩短查询时间并更轻松地读取(和写入)查询。

+0

Jeen Broekstra谢谢。但是@prefix:是我的项目中的第一个代码,我想执行这个代码(在保护中),但给我一个错误。我不知道这是什么。 – sima412