在 RDF 中对数据库 NULL 的等价物进行建模

2023-12-25

我想知道是否有一种标准或普遍接受的方法来表示 RDF 数据数据库中使用的 NULL 的等效项。

更具体地说,我对区分以下情况的值感兴趣o财产的p (p是谓词,oRDF 三元组的对象):

  1. 其值为不适用,即财产p不存在或在上下文中没有意义。
  2. 其值为unknown,即它应该在那里,但我们不知道。
  3. 价值不存在,即该财产没有价值(例如,一个活着的人的死亡年份)。
  4. 其值为witheld,例如当数据使用者不允许访问它时。

我不知道执行此操作的标准方法,但使用 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 .

你可能会进行健全性检查来查找两者兼而有之的东西AnimateObjects and InanimateObjects。如果两者兼而有之,那么您可能遇到了需要调查的问题。如果您使用 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/,用于描述信息来源的词汇表(例如,信息是由什么生成的,归因于什么);它对于描述请求者可能无法获得完整形式的资源类型可能很有用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 RDF 中对数据库 NULL 的等价物进行建模 的相关文章

  • 使用 AVFoundation 快速获取视频帧

    这是我的代码 我想要获取我的视频并将帧数据获取到 SceneKit SCNSphere NSString videoPath NSBundle mainBundle l var videoURL NSBundle mainBundle UR
  • 确定非空列表条目是否“连续”的 Pythonic 方法

    我正在寻找一种方法来轻松确定列表中所有非 None 项目是否出现在单个连续切片中 我将使用整数作为非 None 项目的示例 例如 列表 None None 1 2 3 None None 满足我对连续整数条目的要求 相比之下 1 2 Non
  • PHP 构造函数返回 NULL

    我有这个代码 是否有可能User对象构造函数以某种方式失败 以便 this gt LoggedUser被分配了一个NULL构造函数返回后值和对象被释放吗 this gt LoggedUser NULL if SESSION verbiste
  • 调用不通过空指针访问成员的非静态方法是否合法/定义良好的 C++?

    我最近遇到了以下代码 class Foo public void bar other stuff void Foo bar if this do some stuff without accessing any data members r
  • Rails 建模:将 HABTM 转换为 has_many :through

    我正在现有的 Rails 站点上进行维护工作 并且遇到了一些由多对多关联引起的问题 看起来该网站最初是使用has and belongs to many对于一些业务逻辑变得更加复杂的关系 所以我需要使用has many through而是支
  • 如何验证 SPARQL 中的日期时间对象? (Virtuoso 22007 错误 DT006)

    我收到以下错误 Virtuoso 22007 Error DT006 Cannot convert 0359 to datetime Incorrect month field length SPARQL query define sql
  • 检查多个变量java中的替换空值

    我试图找到一种简单的方法来在 Java 中的多个变量中执行多个 null 检查 替换 我有一个包含大约 20 个字符串变量的对象 在构造函数中 我想检查是否有任何变量值为空 如果它们为空 我想用空字符串替换它们 我可以执行一系列 if 语句
  • 如果一列没有值,MySQL 返回最大值或 null

    我尝试获取 mysql select 的最大值 但如果有一行不包含时间戳 则希望将其设置为 null empty 0 表统计数据 简化 ID CLIENT ORDER DATE CANCEL DATE 1 5 1213567200 2 5
  • 如何在c中的某个位置终止字符指针?

    我试图通过设置空终止符来终止 c 中的字符指针 在特定位置 例如 如果我有一个 char 指针 char hi hello 我希望它是 hell 通过设置o为空 我尝试过使用 strcpy 来执行此操作 例如 strcpy hi 4 0 但
  • json_encode 返回 NULL?

    由于某种原因 项目 描述 返回NULL使用以下代码 这是我的数据库的架构 CREATE TABLE staff id int 11 NOT NULL AUTO INCREMENT name longtext COLL
  • C++ new * char 不为空

    我有一个问题 我在 ASIO 中开发服务器 数据包采用尖头字符 当我创建新字符时 例如char buffer new char 128 我必须手动将其清理为空 By for int i 0 i lt 128 i buffer i 0x00
  • C# 和 SQL Server:如果字符串值为空,如何在命令参数中插入 DBNull.Value?

    我已经搜索了几个小时 但找不到解决方案 我正在将一些字符串插入 SQL 但是有时 我用来执行此操作的方法可能包含空字符串 即 因此我想在 SQL Server 中插入一个空值 首先我测试我的方法以确保我能够插入DBNull Value通过使
  • 通过 NULL 指针访问类成员

    我正在尝试 C 发现下面的代码非常奇怪 class Foo public virtual void say virtual hi std cout lt lt Virtual Hi void say hi std cout lt lt Hi
  • 结构体如何存储在内存中?

    我有一个struct iof header在我的代码中 我确定它的宽度是 24 字节 我执行 sizeof iof header 它返回 32 字节宽 问题1为什么是 32 字节宽而不是 24 字节宽 问题2包括其成员在内 结构体如何存储在
  • 在出错之前如何检查 nilClass 的未定义方法?

    我目前正在使用以下内容 20 p Status p 但是 我仍然收到以下错误 ActionView TemplateError undefined method status for nil NilClass on line 20 of a
  • 使用 jq 过滤空值和/或 null 值

    我有一个包含 jsonlines 的文件 想找到空值 name Color TV price 1200 available name DVD player price 200 color null 并希望输出空和 或空值及其键 availa
  • 无法索引空数组

    我正在使用一个模板 该模板根据服务器备份是否成功的条件设置单元格颜色 我有下面的代码 它不断抛出错误 无法索引到空数组 Cannot index into a null array At C Users admin Desktop new
  • 使用空合并运算符的独特方法[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我知道使用的标准方法空合并运算符 https en wikipedia org wiki Null coalescing operator在C
  • 查询外键列可以为NULL的地方

    我想获取数据 如果orgid 2或者如果根本没有行uid orgid is an integer 我能想到的最接近的事情就是做IS NULL但我没有得到数据uid没有一个orgid排 任何想法 select u uid u fname u
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast

随机推荐

  • 如何让 python 程序运行而不是在记事本中打开?

    我在打开 py 文件时遇到一些问题 我有一个程序调用这个 py 文件 即路径名 example py file txt 但它不是运行 python 程序 而是在记事本中打开它 我如何让它运行 程序本身接收一个文件 并创建一个更可读的输出 编
  • 未找到框架 Protobuf

    I am facing an issue wherein I needed to use FirebaseRemoteConfig for my iOS app I included the following pod pod Fireba
  • 具有自己的文件偏移量的重复文件描述符

    如何从现有文件描述符创建新文件描述符 使得新描述符不共享文件表中相同的内部文件结构 条目 具体来说 诸如文件偏移量 最好是权限 共享和模式 之类的属性不应在新旧文件描述符之间共享 在 Windows 和 Linux 下 dup 将复制文件描
  • mingw 3.4.5 缺少 dlfcn.h?

    难道是我的mingw 3 4 5安装有问题 还是其他一些图书馆提供了这个 如果您想知道 dlfcn h 是定义 dlopen 和 dlclose 等内容的地方 所以它应该是相当标准的 dlfcn win32 http code google
  • Sonata Admin (2.3) 中的嵌套集合字段

    我在创建用于创建课程的表单时遇到问题 这是我的数据库方案的一部分 我正在尝试为其创建一个表单 所以我想做的是创建一个课程 我可以在其中创建会话和附加到该会话的日期 时刻 它应该看起来像这样 In my 课程管理我有的课 protected
  • 从子 textInputEditText 获取父 textInputlayout

    我正在实现一个功能来更改大小写textInputlayout提示文本为大写当提示浮起时 反之亦然 为此我正在使用OnFocusChangeListener在它的孩子身上textInputEditText 为了使其易于实施 我正在实施View
  • 删除java中的符号链接

    是否有任何 api 可用于使用 java util Date 删除符号链接 Files delete Path 不起作用 请发表您的建议 Files delete Path 在符号链接上完美运行 您的代码中应该还有其他问题 此代码示例有效
  • 如何在 C# 中保存文件和在数据库中插入记录之间创建 Transactionscope

    我有一个问题 保存文件并在 TransactionScope 的数据库中插入记录 表示保存文件和插入记录 必须一起依赖 或两者或两者都不依赖 有人可以帮我吗 事务性 NTFS 最酷的部分之一 事务性 NTFS 是它可以工作 与大量其他 交易
  • JavaScript继承框架

    是否有一个小型 轻量级的 JavaScript 类继承解决方案 可以在客户端和服务器端 node js 上正常工作 我不需要一个大的库 只是需要一个允许我声明构造函数和一些方法 然后让类能够继承它的库 John Resig 用大约 25 行
  • React Router 显示所有路由的一个组件(标头)

    有一个关于 React 路由器的问题 我有一个标题项目 我想为所有路线显示该标题项目 当然 我希望它成为 的一部分 以便用户可以单击导航中的项目 目前我有我的
  • Go 练习之旅 #18:切片、索引超出范围

    我正在完成围棋之旅中的练习 但遇到了一个我无法解决的障碍 我正在做Exercise Slices https tour golang org moretypes 18我收到此错误 256 x 256 panic runtime error
  • 具有多个文本字段输入视图的多个选择器视图 Swift

    我一直在论坛中进行搜索 但没有任何帮助 我在一个视图控制器中使用 4 个文本字段 对于每个文本字段 我使用一个单独的 pickerView 作为文本字段 4pickers 的 inputView 当我单击第一个文本字段时 pickerVie
  • 使用 GraalVM 构建本机应用程序时缺少 cl.exe

    我正在尝试使用 GraalVM 和本机映像构建本机应用程序 启动构建过程时发生错误 类路径中似乎缺少 cl exe 正如 GraalVM 网站上提到的 我已经安装了 GRMSDKX EN DVD iso 适用于 Windows 7 和 NE
  • Arrayformula 在谷歌表格中使用 countif 来计算当前行之前的重复项[重复]

    这个问题在这里已经有答案了 我只需要计算当前行之前的重复项 我需要它位于数组公式中 因为我需要它在添加新行时自动扩展 在 Excel 中 我会使用一个带有类似以下函数的表 COUNTIF A 2 A2 B2 gt 在单元格 C2 中 在单元
  • 使用 AWS CodeBuild 进行 docker 推送失败,退出状态为 1

    我创建了由 CodePipeline 触发的 CodeBuild 项目 并且 docker Push 步骤始终失败 并显示 原因 退出状态 1 错误消息 以下是我的构建日志 将我的组织 ID 替换为 Container 2021 06 12
  • 如何从 GMSMapView 中删除 GMSPolygon

    是否有任何方法可以从 GMSMapView 中删除 GMSPolygons 它似乎不存在包含它们的 GMSMapView 属性 如 GMSPlolyLines 我应该清除地图并再次渲染吗 thanks 当您创建GMSPolygon你设置它的
  • 如何知道窗口是否被“x”按钮关闭?

    有谁知道如何找出wpf窗口是否被 x 按钮关闭 最简单的方法 在我看来 是存储一个布尔值 指示用户是否通过其他方法关闭了表单 然后在 OnClosing 事件中 检查布尔值是否为 false 表示单击了 x 按钮 唯一的问题是您自己设置了布
  • Rails 和 Socket.io (node.js)

    我打算使用 Rails 应用程序来提供由 node js 服务器和 Socket io 处理的实时数据 在 Socket io 网站上 它说 如果您不会利用 Node JS 来提供服务 您的文件 请确保设置 全球的WEB SOCKET SW
  • 从 gradle 扩展访问配置闭包

    我正在编写一个插件 其中执行如下操作 project extensions create myExtension new MyExtension project where MyExtension是定义我的新功能的类 Now in grad
  • 在 RDF 中对数据库 NULL 的等价物进行建模

    我想知道是否有一种标准或普遍接受的方法来表示 RDF 数据数据库中使用的 NULL 的等效项 更具体地说 我对区分以下情况的值感兴趣o财产的p p是谓词 oRDF 三元组的对象 其值为不适用 即财产p不存在或在上下文中没有意义 其值为unk