Database 是否可以将RDF存储也用作面向文档的数据库?

Database 是否可以将RDF存储也用作面向文档的数据库?,database,nosql,rdf,semantic-web,document-oriented-db,Database,Nosql,Rdf,Semantic Web,Document Oriented Db,假设我有大量异构JSON文档(即命名键值映射)和这些文档所附加的类层次结构(即命名集)。我需要设置一个数据结构,以允许: JSON文档上的CRUD操作 通过ID检索JSON文档非常快 快速检索附加到某个类的所有JSON文档 编辑类层次结构:添加/删除类,重新排列它们 我最初的想法是将JSON文档存储在面向文档的数据库中(如CouchDB或MongoDB),并将类层次结构存储在RDF存储中(如4store)1、2和4然后自然计算出来,而3则通过维护存储中每个类的附加文档ID列表来解决 但后来我发现

假设我有大量异构JSON文档(即命名键值映射)和这些文档所附加的类层次结构(即命名集)。我需要设置一个数据结构,以允许:

  • JSON文档上的CRUD操作
  • 通过ID检索JSON文档非常快
  • 快速检索附加到某个类的所有JSON文档
  • 编辑类层次结构:添加/删除类,重新排列它们
  • 我最初的想法是将JSON文档存储在面向文档的数据库中(如CouchDB或MongoDB),并将类层次结构存储在RDF存储中(如4store)<代码>1、
    2
    4
    然后自然计算出来,而
    3
    则通过维护存储中每个类的附加文档ID列表来解决

    但后来我发现,RDF存储实际上可以通过ID检索JSON文档的面向文档部分。乍一看,这似乎是正确的,但我仍然担心
    2
    3
    。是否有一个RDF存储器能够以面向文档的db服务文档的速度检索文档(节点)?它将以多快的速度提供类似
    3
    的查询?我听说过一些关于RDF存储速度慢、物化问题等的事情


    是否有一个RDF存储也可以像CouchDB一样,轻松地按ID检索对象?使用面向文档的存储和RDF存储来存储、检索和编辑类似JSON的对象有什么区别?

    RDF数据库中最接近的东西是命名图。在命名图中,可以放置一组RDF三元组。根据需要,可以从一个或多个RDF文档断言这组三元组。假设您希望每个RDF文档有一个命名图。您可以使用反映文件位置的URI(URL或IRI)来命名图形。例如

    http://yourdomain/files/rdf_file_1
    

    4store是一个四元商店。Quad Store支持命名图,4store是专门为处理此问题而设计的

    使用4store,您可以运行以下命令在命名图中断言三元组:

    curl -T your_file.rdf http://your_4store_database/data/http://yourdomain/files/rdf_file_1
    
    /data/
    之后,可以将图形标识符(IRI)放在要断言三元组的位置。有关更多详细信息,请参阅和

    断言数据后,使用SPARQL,还可以使用命名图将查询指向该图:

    SELECT * WHERE {
       GRAPH <http://youdomain/files/rdf_file_1> {
            .... some triple patterns in here ....
       }
    }
    
    选择*WHERE{
    图表{
    ……这里有一些三重模式。。。。
    }
    }
    
    此外,4store还支持JSON,因此您可以直接在JSON中检索SPARQL结果集


    如果您决定使用4store,您将在这里找到有价值的支持:

    您最初针对图形数据库(如)提出了这个问题。这就是为什么我想添加一些注释

  • 图形数据库使用integrated for nodes(和relationships),因此可以通过它(外部索引或图形索引)完成文档根节点的快速初始查找
  • 可以对路径(实际上是根目录树)的其他图内索引进行建模(只需进行键值查找)
  • 如果将文档建模为具有属性的节点树,则可以执行任何简单和复杂的CRUD操作(也可以是结构化的)
  • 检索“类型”或“类”的所有文档也可以通过索引(要键入的索引根节点)或图形类别节点来完成
  • 您可以将这些“类型或类”类别节点放入层次结构(或图形),然后可以使用常用的图形数据库API对其进行编辑
  • 可以使用/集成的图形查询语言(例如)遍历图形
  • 加载分层数据可以由自定义导入器或更通用的子图导入器完成(例如)
  • 你所说的“物化问题”是什么意思?
    SELECT * WHERE {
       GRAPH <http://youdomain/files/rdf_file_1> {
            .... some triple patterns in here ....
       }
    }