1

我有一个内存存储,它将带有参考数据的图表和带有用户绑定资源的图表混合在一起。我想公开按用户和/或角色过滤的数据以及所有参考数据。

另外,我需要对数据集进行 RDFS 推理。

首先,是否可以向 sparqlview 对象添加推理器,还是每次刷新视图时都需要运行推理器?

至于架构部分,我似乎有几个选择:

  1. 为每个用户构建一个联合引用数据和用户范围的视图(但我无法使查询与不同图形模式的联合一起工作)
  2. 为每个用户构建一个视图,其中仅包含他可以浏览/修改的数据,并对默认为参考图和用户视图联合的数据集运行我的查询。
  3. ...

在查询性能、内存消耗和简单性方面,使用 dotNetRdf 执行此操作的最佳模式是什么?

4

1 回答 1

0

我从来没有尝试过用 API 做这样的事情,但它应该是可能的。我可能会建议不要使用SparqlView实现,除非每个用户可以看到哪些数据的标准只能表示为 SPARQL 查询,SparqlView在内存方面相当昂贵,因为它需要原始数据的副本并且当前不是直接视图在基础数据上(理论上这是可能的,但需要更多的编码,并且会以较低的内存使用量换取性能)。

根据您的描述,我建议最好的方法可能是使用自定义ISparqlDataset实现,可能来自 decorator WrapperDataset。通过这种方式,您可以拦截 SPARQL 查询将进行的所有调用,并准确限制每个实例能够检索的内容。通过这种方式,您可以拥有一个作为基础数据的存储和一个为每个用户提供他们对该数据的视图的包装器。

如果您这样做,您需要注意的一件事是线程安全,如果您要包装的底层数据集没有实现IThreadSafeDataset,那么您需要确保所有包装器都覆盖该Lock属性并使用共享锁,否则您可以有问题。

于 2013-06-07T16:04:05.160 回答