通过从Thing继承的属性查询Thing的子类

时间:2017-03-22 19:10:35

标签: java sparql jena schema.org

在官方schema.org文档中,我可以看到每个类都继承了.pxd类的属性,例如,Thing类也有Book,{{1} }等(来自name的属性)。

我的问题是,我可以获得schema.org数据存储区中每个实体(image的子类)的Thingimage属性)吗?例如,Thing类实体具有Thing等属性,但Book实体具有<http://schema.org/Book/image>。我想创建一个SPARQL查询来获取其VideoGame属性中包含某个关键字的每个实体的<http://schema.org/VideoGame/image>(遗憾的是,这又是image属性)

我试过了:

name
Thing

在三元商店中,String queryString ="select distinct ?graph ?img where {{?a <http://schema.org/name> ?obj. ?a <http://schema.org/image> ?img} union {GRAPH ?graph {?a <http://schema.org/name> ?obj. ?a <http://schema.org/image> ?img }} filter(regex(?obj, \""+keyword+"\",\"i\"))}"; 个实体的select distinct ?graph ?img where { {?a <http://schema.org/name> ?obj. ?a <http://schema.org/image> ?img} union { GRAPH ?graph { ?a <http://schema.org/name> ?obj. ?a <http://schema.org/image> ?img } } filter(regex(?obj, \""+keyword+"\",\"i\")) } 属性具有image

等属性

以下作品,但仅限于图书实体:

Book
<http://schema.org/Book/image>

有人知道如何通过String queryString ="select distinct ?graph ?img where {{?a <http://schema.org/Book/name> ?obj. ?a <http://schema.org/Book/image> ?img} union {GRAPH ?graph {?a <http://schema.org/Book/name> ?obj. ?a <http://schema.org/Book/image> ?img }} filter(regex(?obj, \""+keyword+"\",\"i\"))}"; 属性进行查询,无论实体的类是什么(但实体仍然是select distinct ?graph ?img where { { ?a <http://schema.org/Book/name> ?obj. ?a <http://schema.org/Book/image> ?img } union { GRAPH ?graph { ?a <http://schema.org/Book/name> ?obj. ?a <http://schema.org/Book/image> ?img } } filter(regex(?obj, \""+keyword+"\",\"i\")) } 的子类)?

感谢您的时间!

更新

三元组由Web Data Commons提供,2016年10月语音库为schema.org(http://webdatacommons.org/structureddata/2016-10/stats/schema_org_subsets.html)。更具体地说,我采用了所有示例文件并将它们合并为一个三重商店。

不幸的是,正如@Vladimir和@AKSW指出的那样,这个语料库中存在错误,而Thing而不是Thing的存在就是其中之一。

我在Web Data Common的邮件列表中发现了其他用户提出的类似问题。在提取元数据时似乎是一个解析错误。

感谢您的评论,至少我理解查询schema.org注释三元组的正确方法(当它们有效时:)。

2 个答案:

答案 0 :(得分:0)

从我的观点来看,数据的建模有点奇怪,但您可以使用以下查询,尽管这可能效率很低:

SELECT  ?o
WHERE
  { ?s  ?p  ?o
    FILTER strends(str(?p), "/image")
  }

首先在子SELECT中获取所有属性可能更有效,特别是对于更复杂的查询:

SELECT  ?o
WHERE
  { # do some other stuff here
    ?s  ?p  ?o
    ...

    # get the image properties here 
    { SELECT DISTINCT  ?p
      WHERE
        { ?s  ?p  ?o
          FILTER strends(str(?p), "/image")
        }
    }
  }

答案 1 :(得分:0)

你的意思是哪家三重店?架构没有您提到的属性URL。修复该数据(或询问是谁制作数据,修复它)