Sparql - 遍历到顶部(最宽)
Sparql - Traverse to top (broadest)
我有一个内部三元组数据集。
我正在尝试为使用该数据集的应用程序实现提前输入功能。
我想弄清楚如何有条件地遍历到 顶级概念
这张图,如果我搜索dreamworks,会往下3层(企业组织->私人公司->Dreamworks)。
如果我做其他事情,显然它会在图表的不同层。
我正在尝试获取值 "Organization" 或 "Person" 作为顶级。
这个非常简单的查询有效。
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
。
无论如何我可以有条件地发现层次结构的最高级别?
由于这是内部 Ontology,我不能分享任何数据,所以我知道使用它会很困难,欢迎任何建议。
使用 kleene star operator *
与 FILTER
的组合,没有更广泛的概念应该 return 仅限顶级概念:
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
我有一个内部三元组数据集。
我正在尝试为使用该数据集的应用程序实现提前输入功能。
我想弄清楚如何有条件地遍历到 顶级概念
这张图,如果我搜索dreamworks,会往下3层(企业组织->私人公司->Dreamworks)。
如果我做其他事情,显然它会在图表的不同层。
我正在尝试获取值 "Organization" 或 "Person" 作为顶级。
这个非常简单的查询有效。
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
。
无论如何我可以有条件地发现层次结构的最高级别?
由于这是内部 Ontology,我不能分享任何数据,所以我知道使用它会很困难,欢迎任何建议。
使用 kleene star operator *
与 FILTER
的组合,没有更广泛的概念应该 return 仅限顶级概念:
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