【问题标题】:Custom SPARQL Construct with enumeration带有枚举的自定义 SPARQL 构造
【发布时间】:2023-03-29 14:00:02
【问题描述】:

是否可以在添加查询范围之外的信息时执行 SPARQL 构造?例如,我想在定义枚举信息时执行 SPARQL 构造,如下所示:

PREFIX skos:<http://www.w3.org/2004/02/skos/core#>
construct {
   ?s a skos:Concept
   ?s ex:index <enumeration starting from 1 -- this is just a sample>
}
where {
   ?s a skos:Concept
}

可以用纯 SPARQL 做类似的事情吗?有什么选择?

* 附加信息 *

可能我的问题没有解释清楚,所以基本上我想实现以下(假设 ex:index 是有效的 datatypeProperty):

== 初始 RDF 三元组 ==

@prefix skos:<http://www.w3.org/2004/02/skos/core#>
@prefix ex: <http://example.org/> .

ex:abc rdf:type skos:Concept .
ex:def rdf:type skos:Concept .
...
ex:endOfSample rdf:type skos:Concept .

== SPARQL 更新执行后 RDF 三倍 ==

@prefix skos:<http://www.w3.org/2004/02/skos/core#>
@prefix ex: <http://example.org/> .

ex:abc rdf:type skos:Concept ;
    ex:index 1 .
ex:def rdf:type skos:Concept ;
    ex:index 2 .
...
ex:endOfSample rdf:type skos:Concept ;
    ex:index <endOfSampleNumber> .

【问题讨论】:

  • 您使用什么来处理 SPARQL?因为 SPARQL 是声明性的,所以这种枚举仅使用查询语言是不可能的。您可以遍历数据并取消更新查询以添加有序数字(根据什么标准?)。 OTOH,因为 SPARQL 是声明性的,所以通常不需要枚举数据。也许退后一步,描述更高级别的要求是什么?
  • @scottheninger 正如你所说,似乎不可能有纯 SPARQL 有这个订单。我根据您的建议解决了问题,使用 Jena 处理查询结果,并在迭代查询结果时添加 ex:index。

标签: sparql jena arq


【解决方案1】:

您可以在 CONSTRUCT 中构造任何有效的 RDF 值。但是,如果 CONSTRUCT 图形模式中的任何变量在执行 WHERE 图形后未绑定,则查询将失败。 IE。您的查询中不能有 ?p 的绑定,并且 CONSTRUCT 永远不会执行。

这是一个可以帮助您入门的示例:

PREFIX skos:<http://www.w3.org/2004/02/skos/core#>
PREFIX ex:<http://example.org/construct#>
construct {
  ex:someProp a owl:ObjectProperty .
  ?s ex:someProp (1 2 3)
}
where {
  ?s a skos:Concept
}

这将导致为属性值和列表结构构造七个三元组。

添加 ex:someProp 是因为 SKOS 中没有用于 ad-hoc 列表的良好对象属性。最好用一些语义来定义属性。另请注意,虽然 {ex:someProp a owl:ObjectProperty} 三元组将针对 {?s a skos:Concept} 的每次匹配断言,但它是相同的三元组,因此最终只有一个。代价是效率,因此在此查询之外声明属性将是更好的选择 - 为了示例完整性,它包含在上述查询中。

【讨论】:

  • 您好,我似乎没有清楚地解释我的问题。我希望添加的信息能为我的问题提供一些背景信息。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多