我正在玩弄 RDF,尤其是如何访问存储在 rdf 存储中的信息。与传统关系数据库的巨大区别在于缺少预定义模式:在关系数据库中,您知道表具有这些列,并且您可以在技术上将每一行映射到类的实例。该类具有明确定义的方法和明确定义的属性。
在无模式系统中,您不知道哪些数据与给定信息相关联。这就像拥有一个包含任意数量且未预定义的列数的数据库表,并且每一行都可以在任意数量的这些列中包含数据。
与 ObjectRelational Mappers 类似,还有 Object RDF 映射器。RDFAlchemy 和SuRF 是我现在玩的两个。基本上,它们为您提供了一个 Resource 对象,其方法和属性是动态提供的。这有点道理……然而,这并不容易。在许多情况下,您更喜欢有一个定义良好的接口,并在您设置和获取模型对象上的数据时更好地控制正在发生的事情。从某种意义上说,拥有这样的通用访问权限会使事情变得困难。
我注意到的另一件事(也是最重要的)是, 即使总的来说,无模式数据有望提供有关资源的任意信息,实际上您或多或少知道倾向于在一起的“信息类别”。当然,您不能排除附加信息的存在,但在某些情况下,这是例外情况,而不是常态,尽管例外情况足够合理,以至于对于严格的模式来说太具有破坏性了。在一篇文章的 rdf 表示中(例如,在 RSS/ATOM 提要中),您知道所描述资源的术语,并且可以将它们映射到定义明确的对象。如果您提供附加信息,您可以定义一个扩展对象(从基础对象继承)来提供对增强信息的访问器。所以从某种意义上说,你可以通过“面向模式的对象”来处理无模式数据,你可以在您想查看您感兴趣的特定附加信息。
我的问题与您对无模式数据存储的实际使用实践的经验有关。它们如何映射到面向对象的世界,以便您可以熟练地使用它,而不会太接近无模式存储的“裸机”?(用RelDB的话,不用太多SQL直接搞乱表结构)
访问是否注定是非常通用的(例如,SuRF“插件属性”是您可以访问数据的最高、最专业的级别),或者为特定商定的方便模式提供专门的类也是一个好方法,但是引入有大量类来访问新的和意外的相关数据的风险?