我不知道执行此操作的标准方法,但使用 RDF 的优点之一是您在决定如何执行此操作时具有很大的灵活性。 RDF,per se,不能表达否定(即,没有非常方便的方法来表示三元组s p o不成立),但 OWL 可以。对于您描述的四种情况,您可以采取以下一些方法:
1. 该值不适用,即属性 p 不存在或在上下文中没有意义。
如果它对财产没有多大意义p对某个主题有价值s,那么不写任何形式的三元组可能是可以接受的s p o。由于RDF做出了开放世界的假设,因此在数据检索中,通常情况下,人们只查询自己感兴趣的数据,而不会花太多精力去检查哪里有意外的事情。如果您确实想要进行一些健全性检查,那么您可以声明 RDFS 域和属性范围。例如,您可能有:
hasBirthDate rdfs:domain AnimateObject .
hasConstructionDate rdfs:domain InanimateObject .
根据语义,如果你有
object82 hasBirthDate "2013-04-01" ;
hasConstructionDate "2013-04-02" .
那么你也会推断出
object82 a AnimateObject, a InanimateObject .
你可能会进行健全性检查来查找两者兼而有之的东西AnimateObject
s and InanimateObject
s。如果两者兼而有之,那么您可能遇到了需要调查的问题。如果您使用 OWL,那么您实际上可以声明AnimateObject
and InanimateObject
是不相交的并检查逻辑一致性。或者,在 OWL 中,您可以添加断言,例如
object82 hasConstructionDate max 0
上面说object82
不应该有该属性的值hasConstructionDate
.
无论如何,添加rdfs:comment
向您的属性解释该属性应该用于什么以及不应该用于什么。适当的时候,添加rdfs:comment
向个人解释为什么他们不应该具有给定财产的价值,如果他们不应该具有这样的价值。
2. 该值是未知的,即它应该存在但我们不知道。
在这种情况下,重要的是要明确“应该”的确切含义。例如,在 OWL 中,你可以这样说
Person SubClassof (hasName min 1 String)
断言每个person
至少与一个相关String
按物业hasName
;也就是说,每个人至少有一个名字。这是一种说法is一些值,但我们可能不知道在特定情况下它是什么。如果您无法使用 OWL,而只能使用 RDF,那么您可能应该添加一个rdfs:comment
到酒店hasName
沿着“每个NamedEntity
该属性应该至少有一个值。”
3. 值不存在,即该财产没有值(例如,活着的人的死亡年份)。
这是一个有趣的例子,因为 RDF 没有内置的时间概念(在某种意义上,某些三元组在给定时间之前一直有效,而在该时间之后其他一些三元组仍然有效)。如果您只是使用 RDF 图作为可以更新的类似数据库的存储(通过删除和插入新的三元组),您可能可以使用一些特殊的保留值“我还没死!” http://www.youtube.com/watch?v=grbSQ6O6kbs。拥有一个开放式数据模型(就像我们在 RDF 中所做的那样)使得执行此类操作变得特别容易,因为您实际上可以为其使用一些新值:
mp:JohnCleese hasDeathDate mp:notDeadYet .
mp:GrahamChapman hasDeathDate "1989-10-04" .
当然,您也可以更精致一点,使用布尔值属性来指示第一个属性的值是否有意义:
mp:JohnCleese isDeceased "false" .
mp:GrahamChapman isDeceased "true" ;
hasDeathDate "1989-10-04" .
4. 该值被保留,例如,当不允许数据使用者访问它时。
在我看来,这是最有趣的案例,因为它可能涉及最有趣的数据转换。如果您有一个很好的数据集可供人们查询,并且您想要指示他们在未经许可的情况下将获得的结果,那么您有很多选择来表示这一点。例如,您可以使用 HTTP 状态代码之类的内容将图中的节点替换为空白节点,其作用类似于密文。例如,您可能有以下数据:
ex:JohnDoe hasSSN "000-00-0000" .
ex:JaneDoe hasSSN "000-00-0001" .
当有人询问数据时,您可能会回应(假设第一个值有效,第二个值无效):
ex:JohnDoe hasSSN [ a ex:ValidSSN ] .
ex:JaneDoe hasSSN [ a ex:InvalidSSN ] .
一般来说,您可以向消费者呈现与您实际拥有的不同的数据视图。我不知道做这类事情有什么标准。您可能对最近的 W3C 建议有些相关,PROV-O:PROV 本体论 http://www.w3.org/TR/prov-o/,用于描述信息来源的词汇表(例如,信息是由什么生成的,归因于什么);它对于描述请求者可能无法获得完整形式的资源类型可能很有用。