【发布时间】:2019-04-07 17:41:00
【问题描述】:
我正在尝试为“personal information manager”/wiki 之类的工具创建一个小型 Web 应用程序,我可以在其中以 HTML sn-ps(或者可能是 Markdown)的形式记笔记,用一些 @987654322 注释它们@microdata 并将 sn-p 和元数据存储在某处以供查询。
到目前为止,我的理解是大多数语义数据存储(三重/四重存储,或支持 RDF 的数据库)更适合主要存储和查询元数据。所以我可能还想要某种传统的存储(关系、文档存储、键值,甚至是非 rdf 图数据库),我可以在其中存储每个注释的全文,也许还有其他一些位,例如 @987654328 @、user-id 拥有笔记等,还执行传统(非语义)全文查询。
我开始寻找可以将数据和元数据存储在一个地方的商店。我找到了一些:Ontotext GraphDB、Stardog、MarkLogic 等。所有这些似乎都完全符合我的要求,但是有一些非常有限的免费许可条款,这真的阻碍了我深入研究它们:我更喜欢研究开放技术我可能会用在真正的产品上。
在深入挖掘之前,我想知道:
- 如果我的假设是正确的:我需要将一个存储用于数据,另一个用于元数据。
- 如果有任何涉及免费/开源软件的设置,具有 RDF/Sparql 经验的开发人员可以推荐,考虑到我描述的问题。
现在我只是倾向于将Apache Jena 用于 RDF 存储和 SPARQL 查询,而其他数据则完全独立(最有可能是 PostgreSQL)。
【问题讨论】:
-
为什么你认为你需要两个“商店”?我的意思是,将所有数据放入单个 RDF 三元存储有什么问题?顺便说一下,例如 Apache Jena 支持全文搜索(基于 Lucene 或 ElasticSearch),其他很多常用的三元存储也有这样的功能
-
假设我为三部曲的名称添加了注释,就像这里的示例 2:schema.org/Book 首先,我需要将整个 html 字符串存储在某个地方(我见过有些人使用 base64 存储RDF 商店中的东西,但似乎有些阻抗不匹配)。稍后,我可能想将我从哪本书中读到的最后一章存储在某处……该信息似乎不是 RDF 存储的好候选……例如,这看起来很奇怪:
-> last-read -> 日期 -
我认为你想多了。三重存储为您处理“存储整个 [HTTP,而不是 HTML] 字符串”(假设我正确理解您的意思)。如果你真的担心SQL-style, RDF-style, and other data stores 之间的“阻抗”,你可以选择一个混合处理两者(并使两种数据都可用于两种查询),比如Virtuoso(来自我的雇主),无论是Open Source or Enterprise Edition.
-
RDF 存储非常适合用于稀疏填充和/或模式最后的数据,例如您突然希望跟踪您阅读的最后一章以及何时跟踪某些书籍。 SQL 存储通常是最好的(并且非常适合)完全填充和/或模式优先的数据——如联系地址、销售记录等。
-
现在重新审视这个......我了解到存储纯文本大多是可以的(例如,HTML 文档的源或任何基于文本的文档的大小达到一定大小,可能是几十千字节)但是在许多存储二进制数据的三元存储实现并不理想,并且大多数三元存储都需要 base64 编码,因此数据可以保持纯文本。太大的对象(在 S;P;O 意义上)可能会弄乱索引,因此最好将 ID 存储到像 S3 这样的二进制对象的 blobstore 中。我的经验法则是对大多数明文使用三元存储,对其他所有内容使用 k/v 存储。
标签: database sparql rdf semantic-web schema.org