2011-02-15 84 views
3

如何将搜索的RDF数据库来寻找重叠的最有样品图图的部分?搜索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" ; 
    ] ; 
] . 

显然,没有在数据库中的样本完美匹配,但是每个实体都会对其进行部分匹配,即使每个图中的comman三元组都存在于不同的级别。

我将如何找到样本最接近的比赛吗?在这种情况下,我期望查询返回,首先排序最佳匹配,[entity1, entity3, entity2]

我还是有点新RDF,所以原谅我,如果我的术语是关闭的。正如我目前了解RDF数据库一样,我试图做的并不是它们如何使用。如果我想使用SPARQL查询来查找包含关系attr111 =“apple”的实体,我通常必须假定关系位于相对于每个实体的固定位置,在相对于每个实体的任意位置搜索三元组“根”要困难得多。那是对的吗?

回答

2

不,它并不难,但你的SPARQL查询可能会变得相当长时间才能达到这一点。没有必要假定一个固定的根,因为你可以使用变量作为我的例子中所示的根。在根固定的情况下,将该变量替换为一个值。

注意 - 如果结果查询中没有变量,那么它会更好地表示为ASK查询。如果使用SELECT查询并且没有变量,则无法区分匹配的查询结果和不匹配的查询结果。而一个ASK查询返回取决于WHERE条款是否如果你的SPARQL处理器支持SPARQL 1.1,那么你可以使用属性路径.eg

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

如果你只有SPARQL 1.0接着匹配

要么truefalse你必须明确声明匹配,如下所示:

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

请注意,语义上这两种形式实际上是等效的 - SPARQL 1.1表单是一个很好的syntac用于SPARQL 1.0表单的快捷方式。

显然,更大的要匹配你的图的部分增长较大的SPARQL查询会得到。