当前位置:  开发笔记 > 编程语言 > 正文

MarkLogic SPARQL使用属性路径未按预期返回数据

如何解决《MarkLogicSPARQL使用属性路径未按预期返回数据》经验,为你挑选了1个好方法。

使用以下示例三元组:

@prefix :  .
@prefix dc:  .
@prefix owl:  .
@prefix rdf:  .
@prefix rdfs:  .
@prefix skos:  .
@prefix xsd:  .


  rdf:type owl:Ontology ;
  owl:imports  ;
.
:a
  rdf:type owl:ObjectProperty ;
  rdfs:label "A" ;
  rdfs:subPropertyOf :b ;
.
:b
  rdf:type owl:ObjectProperty ;
  rdfs:label "B" ;
  rdfs:subPropertyOf :c ;
.
:c
  rdfs:label "C"^^xsd:string ;
.

此查询按预期返回两行(列和?中的b和c):

PREFIX rdf: 
PREFIX rdfs: 

select * 
from 
where
{
  ?s rdfs:label 'A' .
  ?s rdfs:subPropertyOf+ ?o
}

但是,我希望以下内容返回1行,但它返回空结果.在查询控制台中测试:

PREFIX rdf: 
PREFIX rdfs: 

select * 
from 
where
{
  ?s rdfs:label 'A' .
  ?s rdfs:subPropertyOf+ 
}

我希望它为"a"返回一行.这是一个错误还是我错过了一些明显的东西?

我尝试使用DBPedia进行类似的查询,它似乎按照我的预期返回数据.例如,以下查询返回"star"的两行,尽管两者都不是直接的subClassOf owl:Thing.

select *
where 
{
 ?s rdfs:label  "star"@en .
 ?s rdfs:subClassOf+ owl:Thing
} LIMIT 100

如果有人遇到同样的问题,我想出了以下工作:

PREFIX rdf: 
PREFIX rdfs: 

select * 
from 
where
{
  ?s rdfs:label 'A' .
  ?s rdfs:subPropertyOf ?s2 .
  ?s2 rdfs:subPropertyOf* 
}

Patrick McEl.. 7

(我会把它放在评论中,但我没有这样做的声誉.)

我刚刚在MarkLogic 8.0-3上尝试过你的null结果示例,我确实得到了[{"s":""}],正如你所期望的那样.您使用的是早期版本的MarkLogic(您可以在左上角看到该版本localhost:8001)?

为了验证这一点,我去MarkLogic查询控制台的localhost:8000/qconsole/,设置了"内容源"到我的数据库(与三联指数开启)更改查询类型设置为"SPARQL更新",并进入该SPARQL插入代码:

PREFIX : 
prefix dc: 
prefix owl: 
prefix rdf: 
prefix rdfs: 
prefix skos: 
prefix xsd: 

INSERT DATA { GRAPH  {
    rdf:type owl:Ontology .
   owl:imports  .

 :a rdf:type owl:ObjectProperty .
 :a rdfs:label "A" .
 :a rdfs:subPropertyOf :b .

 :b rdf:type owl:ObjectProperty .
 :b rdfs:label "B" .
 :b rdfs:subPropertyOf :c .

 :c rdfs:label "C"^^xsd:string .

  }}

然后,我在查询控制台中打开了一个新选项卡,将查询类型设置为"SPARQL查询",并运行您的确切查询:

PREFIX rdf: 
PREFIX rdfs: 

select * 
from 
where
{
  ?s rdfs:label 'A' .
  ?s rdfs:subPropertyOf+ 
}

如果您使用的是早期版本的MarkLogic,请尝试在MarkLogic下载页面上更新到最新版本.



1> Patrick McEl..:

(我会把它放在评论中,但我没有这样做的声誉.)

我刚刚在MarkLogic 8.0-3上尝试过你的null结果示例,我确实得到了[{"s":""}],正如你所期望的那样.您使用的是早期版本的MarkLogic(您可以在左上角看到该版本localhost:8001)?

为了验证这一点,我去MarkLogic查询控制台的localhost:8000/qconsole/,设置了"内容源"到我的数据库(与三联指数开启)更改查询类型设置为"SPARQL更新",并进入该SPARQL插入代码:

PREFIX : 
prefix dc: 
prefix owl: 
prefix rdf: 
prefix rdfs: 
prefix skos: 
prefix xsd: 

INSERT DATA { GRAPH  {
    rdf:type owl:Ontology .
   owl:imports  .

 :a rdf:type owl:ObjectProperty .
 :a rdfs:label "A" .
 :a rdfs:subPropertyOf :b .

 :b rdf:type owl:ObjectProperty .
 :b rdfs:label "B" .
 :b rdfs:subPropertyOf :c .

 :c rdfs:label "C"^^xsd:string .

  }}

然后,我在查询控制台中打开了一个新选项卡,将查询类型设置为"SPARQL查询",并运行您的确切查询:

PREFIX rdf: 
PREFIX rdfs: 

select * 
from 
where
{
  ?s rdfs:label 'A' .
  ?s rdfs:subPropertyOf+ 
}

如果您使用的是早期版本的MarkLogic,请尝试在MarkLogic下载页面上更新到最新版本.


在MarkLogic 8的更高版本中已经修复了属性路径 - 我同意您应该尝试更新到最新版本.
推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有