gpt4 book ai didi

null - 在 RDF 中对等价的数据库 NULL 建模

转载 作者:行者123 更新时间:2023-12-04 05:39:48 24 4
gpt4 key购买 nike

我想知道是否有标准或普遍接受的方式来表示 RDF 数据的数据库中使用的 NULL 等价物。

更具体地说,我对区分属性 p 的值 o 的以下情况的方法感兴趣(p 是谓词,o 是 RDF 三元组的对象):

  • 该值不适用,即属性 p 不存在或在上下文中没有意义。
  • 该值未知,即它应该在那里,但我们不知道。
  • 值(value)不存在,即属性(property)没有值(value)(例如,活着的人的死亡年份)。
  • 该值被保留,例如当不允许数据消费者访问它时。
  • 最佳答案

    我不知道这样做的标准方法,但在 RDF 中工作的优点之一是您在决定如何做这件事上有很大的灵活性。 RDF 本身不能表达否定(即,没有非常方便的方式来表示三重 s p o 不成立),但 OWL 可以。对于您描述的四种情况,以下是您可能采取的一些方法:

    1. The value is not applicable, i.e. property p does not exist or does not make sense in the context.



    如果属性 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 和 InanimateObject s。如果两者兼而有之,则您可能遇到了应该调查的问题。如果您使用 OWL,那么您实际上可以声明 AnimateObjectInanimateObject不相交并检查逻辑一致性。或者,在 OWL 中,您可以添加断言,例如
    object82 hasConstructionDate max 0 

    其中说 object82属性 hasConstructionDate 应该没有值.

    无论如何,添加 rdfs:comment s 到您的属性,解释该属性应该用于什么以及不应该用于什么。适当时,添加 rdfs:comment向个人解释为什么他们不应该拥有给定属性(property)的值(value),如果他们不应该拥有这样的值(value)。

    2. The value is unknown, i.e., it should be there but we don't know it.



    在这种情况下,确定“应该”的确切含义很重要。例如,在 OWL 中,你可以说
    Person SubClassof (hasName min 1 String)

    断言每个 person与至少一个 String 相关由属性(property) hasName ;也就是说,每个人至少有一个名字。这是说存在某种值(value)的一种方式,但我们可能不知道在特定情况下它是什么。如果您不能使用 OWL,而只能使用 RDF,那么您可能应该添加 rdfs:comment到属性(property) hasName沿着“每个 NamedEntity此属性至少应具有一个值。”

    3. The value doesn't exist, i.e., the property doesn't have a value (e.g. year of death for a person alive).



    这是一个有趣的例子,因为 RDF 没有内置的时间概念(从某种意义上说,某些三元组在给定时间之前保持不变,而在此之后,另一个三元组保持不变)。如果您只是将 RDF 图用作可以更新的类似数据库的存储(通过删除和插入新的三元组),您可能可以为 “I'm not dead yet!” 使用一些特殊的保留值。 .拥有一个开放式数据模型,就像我们在 RDF 中所做的那样,使得做这样的事情变得特别容易,因为你真的可以为它使用一些新的值:
    mp:JohnCleese hasDeathDate mp:notDeadYet .
    mp:GrahamChapman hasDeathDate "1989-10-04" .

    当然,您也可以更精细一点,使用 bool 值属性来指示第一个属性的值是否有意义:
    mp:JohnCleese isDeceased "false" .
    mp:GrahamChapman isDeceased "true" ;
    hasDeathDate "1989-10-04" .

    4. The value is withheld, e.g., when the data consumer is not allowed to access it.



    在我看来,这是最有趣的案例,因为它可能涉及最有趣的数据转换。如果你有一个很好的数据集,人们可以查询,并且你想指出一些关于他们将获得的结果的信息,除非他们没有许可,你有很多选择来表示这一点。例如,您可以使用诸如 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 ] .

    通常,您可以向消费者展示与您实际拥有的数据不同的数据 View 。我不知道做这种事情有什么标准。您可能对最近的 W3C 推荐,有些相关, PROV-O: The PROV Ontology 感兴趣。 ,用于描述信息来源的词汇表(例如,它是从什么产生的,归于什么);在描述请求者可能无法以完整形式使用的资源种类时,它可能很有用。

    关于null - 在 RDF 中对等价的数据库 NULL 建模,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16873174/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com