gpt4 book ai didi

rdf - 搜索部分匹配的 RDF 图

转载 作者:行者123 更新时间:2023-12-02 02:27:53 25 4
gpt4 key购买 nike

我如何搜索 RDF 数据库以找到与样本图重叠最多的图段?

例如,假设我的数据库存储了以下任意图形:

entity1 [
type "TOP" ;
attr1 [
attr11 [
attr111 "apple" ;
] ;
attr12 [
attr121 "orange" ;
] ;
attr13 [
attr131 "banana" ;
] ;
] ;
attr2 [
attr21 [
attr211 "falcon" ;
] ;
attr22 [
attr221 "pigeon" ;
] ;
attr23 [
attr231 "parrot" ;
] ;
] ;
] .
entity2 [
type "TOP" ;
attr11 [
attr111 "apple" ;
] ;
attr12 [
attr121 "orange" ;
] ;
] .
entity3 [
type "TOP" ;
attr2 [
attr_middle [
attr21 [
attr211 "falcon" ;
] ;
attr22 [
attr221 "pigeon" ;
] ;
attr23 [
attr231 "parrot" ;
] ;
] ;
] ;
] .

现在说我有示例图:

sample [
type "TOP" ;
attr11 [
attr111 "apple" ;
] ;
attr12 [
attr121 "orange" ;
] ;
attr13 [
attr131 "banana" ;
] ;
attr21 [
attr211 "falcon" ;
] ;
attr22 [
attr221 "pigeon" ;
] ;
attr23 [
attr231 "parrot" ;
] ;
] .

很明显,数据库中没有任何东西与样本完全匹配,但每个实体都部分匹配它,即使公共(public)三元组存在于每个图中的不同级别也是如此。

如何找到与示例最接近的匹配项?在这种情况下,我希望查询返回,首先排序的最佳匹配,[entity1, entity3, entity2]

我对 RDF 还是有点陌生​​,所以如果我的术语不正确,请原谅我。根据我目前对 RDF 数据库的了解,我尝试做的通常不是它们的使用方式。如果我想使用 SPARQL 查询找到“包含”关系 attr111 = "apple"的实体,我通常必须假设该关系相对于每个实体处于固定位置,而在相对于“根”要困难得多。对吗?

最佳答案

不,这并不难,但您的 SPARQL 查询可能会变得相当长才能实现这一点。无需假定固定根,因为您可以使用变量作为根,如我的示例所示。在根固定的情况下,用变量替换值。

注意 - 如果生成的查询中没有变量,那么将其表述为 ASK 查询会更好。如果您使用 SELECT 查询并且没有变量,您将无法区分匹配的查询结果和不匹配的查询结果。而 ASK 查询返回 truefalse 取决于 WHERE 子句是否匹配

如果您的 SPARQL 处理器支持 SPARQL 1.1,那么您可以使用属性路径。例如

SELECT * WHERE { ?s ex:predicate / ex:predicate / ex:predicate "value" }

如果您只有 SPARQL 1.0,那么您必须像这样明确说明匹配:

SELECT * WHERE
{
?s ex:predicate _:b1 .
_:b1 ex:predicate _:b2 .
_:b2 ex:predicate "value" .
}

请注意,这两种形式在语义上实际上是等价的 - SPARQL 1.1 形式是 SPARQL 1.0 形式的一个很好的语法快捷方式。

显然,您想要匹配的图表部分越大,您的 SPARQL 查询就会变得越大。

关于rdf - 搜索部分匹配的 RDF 图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5005600/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com