Views 基于视图和参考图的面向用户sparql

Views 基于视图和参考图的面向用户sparql,views,rdf,sparql,dotnetrdf,Views,Rdf,Sparql,Dotnetrdf,我有一个内存存储区,它将图形与引用数据和带有用户绑定资源的图形混合在一起。我想公开按用户和/或角色筛选的数据以及所有引用数据 另外,我需要对数据集进行RDFS推断 首先,是否可以向sparqlview对象添加推理器,或者每次刷新视图时是否需要运行推理器 至于架构部分,我似乎有几个选择: 为每个用户构建一个视图,该视图将引用数据和用户范围结合起来 (但我无法使查询与不同图形模式的并集一起工作) 为每个用户构建一个视图,其中只包含他可以浏览/修改的数据,并对默认为引用图和用户视图的联合的数据集运行我

我有一个内存存储区,它将图形与引用数据和带有用户绑定资源的图形混合在一起。我想公开按用户和/或角色筛选的数据以及所有引用数据

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

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

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

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

  • 在查询性能、内存消耗和简单性方面,使用dotNetRdf实现这一点的最佳模式是什么?

    我从未尝试使用API实现类似的功能,但这应该是可能的。我可能会建议不要使用
    SparqlView
    实现,除非每个用户可以看到哪些数据的标准只能表示为SPARQL查询,
    SparqlView
    在内存方面相当昂贵,因为它需要原始数据的副本,并且当前不是对底层数据的直接查看(从理论上讲,这是可能的,但需要更多的编码,并且需要在较低的内存使用率与性能之间进行权衡)

    根据您的描述,我建议最好的方法可能是使用自定义的
    ISparqlDataset
    实现,很可能来自decorator
    WrapperDataset
    。这样您可以截获SPARQL查询将进行的所有调用,并精确限制每个实例能够检索的内容。这样您就可以有一个作为底层数据的单一存储区和一个为每个用户提供数据视图的包装器


    如果执行此操作,则需要注意线程安全,如果要包装的底层数据集未实现
    IThreadSafeDataset
    ,则需要确保所有包装器覆盖
    Lock
    属性,并使用共享锁,否则可能会出现问题。

    Rob,我刚刚尝试了r用数据集替换我的视图(还没有过滤器)同一个查询的运行时间是正常的两倍吗?基础数据集的UsesUnionDefaultGraph设置为true。差异可能来自每次运行时计算默认图形的时间,还是其他原因?你好,Rob,正如我所说,我改变了架构,从视图切换到自定义包装数据集。经过一些调整和反复通过使用getTriplesXXX方法,我能够在不降低内存和性能的情况下实现我的可见性规则。无论如何,再次感谢您的见解和您在dotNetRdf上的工作。