0

我有一个内部三元组数据集。

我正在尝试使用数据集为应用程序实现预输入功能。

我试图弄清楚如何有条件地遍历到顶级概念

在此处输入图像描述

在这张图片中,如果我搜索梦工厂,它会向下 3 层(商业组织 -> 私人公司 -> 梦工厂)。

如果我做其他事情,显然它将位于图表的不同层。

我试图将“组织”或“人员”的值作为顶层。

这个非常简单的查询有效。

        SELECT DISTINCT  ?subjectPrefLabel ?a ?b ?o
    WHERE
        { 
            ?subject skosxl:prefLabel/skosxl:literalForm ?subjectPrefLabel .
    ?subject skos:broader/skos:broader/skos:broader/skosxl:prefLabel/skosxl:literalForm ?a


    FILTER regex(?subjectPrefLabel, "Dreamworks", 'i')
        }
    ORDER BY ?subjectPrefLabel

在此处输入图像描述

然而,显然这是不可持续的,因为开发人员需要知道层次结构的下层数才能发布正确数量的skos:broader.

无论如何我可以有条件地发现层次结构的最高级别吗?

由于这是一个内部本体,我无法共享任何数据,所以我知道这将很难使用,任何建议都值得赞赏。

4

1 回答 1

1

将 kleene 星运算符*FILTER没有更广泛概念的 a 结合使用应仅返回顶级概念:

SELECT DISTINCT  ?subjectPrefLabel ?a ?b ?o WHERE { 
    ?subject skosxl:prefLabel/skosxl:literalForm ?subjectPrefLabel .
    ?subject skos:broader* ?concept. 
    ?concept skosxl:prefLabel/skosxl:literalForm ?a
    FILTER NOT EXISTS { ?concept skos:broader ?supConcept } 
    FILTER regex(?subjectPrefLabel, "Dreamworks", 'i')
}
ORDER BY ?subjectPrefLabel
于 2017-05-30T14:12:41.857 回答