Mif*_*eet 8 null rdf data-modeling linked-data
我想知道是否有一种标准或普遍接受的方式来表示数据库中用于RDF数据的等效NULL.
更具体地说,我感兴趣的是一种方法来区分属性p的值o的以下情况(p是谓词,o RDF三元组的对象):
我不知道这样做的标准方法,但在RDF中工作的一个优点是,您在决定如何做到这一点时有很大的灵活性.RDF 本身不能表示否定(即,没有非常方便的方式来表示三重欺骗不成立),但是OWL可以.至于你所描述的四个案例,你可以采取以下几种方法:
1.该值不适用,即属性p不存在或在上下文中没有意义.
如果它没有多大意义的财产p是对个体的价值小号,那么它可能接受的只是没有写的形式中的任何三元SPO.由于RDF做出了一个开放的世界假设,通常情况是,在数据检索中,人们只查询一个人感兴趣的数据,并且没有做太多努力来检查哪里有意外的事情.如果您确实想要进行一些健全性检查,那么您可以声明RDFS域和属性范围.例如,您可能有:
hasBirthDate rdfs:domain AnimateObject .
hasConstructionDate rdfs:domain InanimateObject .
Run Code Online (Sandbox Code Playgroud)
根据语义,如果你那么
object82 hasBirthDate "2013-04-01" ;
hasConstructionDate "2013-04-02" .
Run Code Online (Sandbox Code Playgroud)
那么你也会推断出来
object82 a AnimateObject, a InanimateObject .
Run Code Online (Sandbox Code Playgroud)
你可能会运行一个健全性检查来查找AnimateObjects和InanimateObjects的内容.如果两者兼而有之,那么您可能会遇到一个问题.如果您使用OWL,那么您实际上可以声明AnimateObject和InanimateObject不相交并检查逻辑一致性.或者,在OWL中,您可以添加断言,例如
object82 hasConstructionDate max 0
Run Code Online (Sandbox Code Playgroud)
这表示object82该物业应该没有价值hasConstructionDate.
在任何情况下,rdfs:comment都要在属性中添加s,说明应该使用的属性以及不应该使用的属性.在适当的时候,rdfs:comment向个人添加s来解释为什么他们不应该为给定的属性赋值,如果他们不应该有这样的值.
2.价值未知,即应该在那里,但我们不知道.
在这种情况下,重要的是确定"应该"的含义.例如,在OWL中,你可以这么说
Person SubClassof (hasName min 1 String)
Run Code Online (Sandbox Code Playgroud)
断言每一个person都与String财产至少有一个相关hasName; 也就是说,每个人至少有一个名字.这是说,有一个办法是一定的价值,但我们可能不知道它是在特定情况下.如果你不能与OWL工作,但只能用RDF,那么你或许应该添加rdfs:comment到属性hasName线沿线的"每一个NamedEntity应该有这个属性至少有一个值."
3.该值不存在,即该属性没有值(例如,活着的人的死亡年份).
这是一个有趣的案例,因为RDF没有内置的时间概念(在某种意义上,某个三元组在给定时间内保持不变,并且在此之后其他一些三元组保持不变).如果您只是使用RDF图作为类似数据库的商店,您可以更新(通过删除和插入新的三元组),您可能会使用一些特殊的保留值"我还没死!".像我们在RDF中那样使用开放式数据模型会使得执行此类操作变得特别容易,因为您实际上可以使用一些新值:
mp:JohnCleese hasDeathDate mp:notDeadYet .
mp:GrahamChapman hasDeathDate "1989-10-04" .
Run Code Online (Sandbox Code Playgroud)
当然,您也可以更精确,并使用布尔值属性来指示第一个属性的值是否有意义:
mp:JohnCleese isDeceased "false" .
mp:GrahamChapman isDeceased "true" ;
hasDeathDate "1989-10-04" .
Run Code Online (Sandbox Code Playgroud)
4.例如,当不允许数据使用者访问它时,保留该值.
在我看来,这是最有趣的案例,因为它可能涉及最有趣的数据转换.如果你有一个很好的数据集,人们可以查询,并且你想要指出他们将获得的结果,除了他们缺乏权限,你有很多选择代表这一点.例如,您可以使用HTTP状态代码之类的东西来替换图中的节点,其中空白节点就像编校一样.例如,您可能拥有以下数据:
ex:JohnDoe hasSSN "000-00-0000" .
ex:JaneDoe hasSSN "000-00-0001" .
Run Code Online (Sandbox Code Playgroud)
当有人要求提供数据时,您可能会回复(假设第一个值有效,第二个值无效):
ex:JohnDoe hasSSN [ a ex:ValidSSN ] .
ex:JaneDoe hasSSN [ a ex:InvalidSSN ] .
Run Code Online (Sandbox Code Playgroud)
通常,您可以向消费者呈现与您实际拥有的数据不同的视图.我不知道做这种事的任何标准.您可能对最近的W3C推荐,PROV-O:PROV Ontology,一个用于描述信息来源的词汇表(例如,它是由什么产生的,它归因于什么)感兴趣; 它可能有助于描述可能无法以完整形式供请求者使用的各种资源.
小智 5
我在RDF中做了一些建模.我知道没有广泛使用的词汇来表示您正在寻找的信息类型.然而,有一种广泛接受的模式是适用的.
在大约一年前我做的工作中,我有类似的要求用"可以为空的值"来表示属性.具有可空值的属性具有值或不存在该值的原因.
我通过引入一个b节点作为属性的值来表示这一点.该b节点将具有链接到值的rdf:value属性,或者链接到该值不可用的原因的原因属性,例如
:foo
:aProp [a :nullableValue; rdf:value "value"] ;
:bProp [a :nullableValue; :reason :notAvailable ]
.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1050 次 |
| 最近记录: |