【问题标题】:what does the @prefix do in sparql?@prefix 在 sparql 中有什么作用?
【发布时间】:2013-08-17 21:08:59
【问题描述】:

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

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

为什么要这样写?

【问题讨论】:

  • Jeen Broekstra's answer 是对的; @prefix <...> 只不过是 SPARQL 中的语法错误。在对该答案的评论中,您提到与 Protégé 一起做某事。如果您可以更具体地了解您在 Protégé 中所做的事情,以及您在哪里遇到 @prefix <...>(可能带有 Protégé 的屏幕截图),您可能会得到一些更符合您想要的答案。

标签: sparql owl protege


【解决方案1】:

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:。特定前缀无关紧要,只要它扩展为的实际(a 部分)URI 相同。严格来说,前缀是为了人类方便;它们不是绝对必要的。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • Jeen Broekstra 谢谢。但是@prefix : example.org/animals> 是我项目中我想要执行此代码(在 protege 中)但给我一个错误的第一个代码。我不知道这是什么。
    猜你喜欢
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    • 1970-01-01
    • 1970-01-01
    • 2018-10-08
    • 1970-01-01
    • 2020-08-26
    相关资源
    最近更新 更多