问题标签 [shacl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
118 浏览

rdf - 使用 SHACL 验证 RDF 时如何忽略导入图中的节点?

这个形状

由符合 SHACL 规范的引擎正确处理,它确实可以自我验证。问题是来自导入图形的所有节点(包括 SHACL 词汇表)也会被处理。如何排除通过连接的所有内容owl:imports

0 投票
1 回答
83 浏览

rdf - 外部资源的 SHACL 验证错误

我有一个用于验证研究变量的 SHACL 模式。

我正在尝试针对它验证以下数据:

根据架构验证此数据会返回类似于以下内容的违规报告:

我是否应该明确指定'xsd:decimal is of type rdfs:Datatype'才能成功验证我的数据?

0 投票
2 回答
440 浏览

transactions - Sparql 交易

我想将多个对象插入到像 Jena fuseki 或 virtuoso 这样的三元组中。

就我而言,主题等于主键。它类似于关系数据库。如何确保该主题仅出现一次或已在使用中?ASK 可以与 Sparql 中的插入相结合吗?或者可以生成密钥吗?

只要您使用后端的实例,您就可以确保主题只存在一次,但是对于更多实例,查询和插入必须同时发生以保存事务。

0 投票
1 回答
75 浏览

shacl - 如何根据 shacl 的使用来验证类的实例?

就我而言,有 SingleChoice (SC) 和 MultipleChoice (MC) 问题。SC 有一组答案(作为空白节点),必须完全包含一个“点”和一个“文本”属性。MC 有一组答案,其中必须包含一个“points”、一个“text”和一个“pointsNegative”属性。以乌龟为例:

我设法编写了验证所有 ex:Answer 类实例的 shacl 规则。但我无法通过使用这些规则验证它们来区分这些实例属于哪个(SC 或 MC):

例如,如果我为 ex:pointsNegative 添加另一个 PropertyShape,则形状对于 SC 问题的所有答案都将失败(因为这些没有 ex:pointsNegative)。我可以省略 minCount 限制,但是 MC 问题的答案可能没有 ex:pointsNegative 属性。我如何根据那里的链接(属于 SC 或 MC)来为 Class ex:Answer 的实例执行不同的规则?这甚至可能与 Shacl 吗?

0 投票
1 回答
161 浏览

rdf - SHACL 能否表达对整个数据范围的约束?

是否可以使用 SHACL 来制定有关整个数据范围的约束?

例如,我可以要求数据中存在符合特定形状的三元组吗?

我想到的代码示例:

我的想法是,上面的代码会为每个不包含至少一个符合 ex:ObligatoryShape 的数据三元组实例的数据图引发错误——这包括空数据图。

0 投票
1 回答
242 浏览

properties - 是否可以编写一个形状来验证给定属性的域和范围?

我尝试使用 SHACL 形状验证我的本体实例。但是,我找不到如何说一个给定的属性实例只有当它有一个 Class1 的实例作为主体并且有一个 Class2 的实例作为对象时才有效。

换句话说,我想指定这个属性的域(即Class1)和范围(即Class2)。

在下面的示例中,我们精确地确定范围是(客户和人员),但未指定域。

我知道可以为形状指定目标类 (TC),但这会限制属性 ex:customer 的范围,当域为 TC 时,并非在所有情况下。

是否可以编写一个固定给定属性的域和范围的形状?

谢谢!

0 投票
1 回答
123 浏览

shacl - 如何确保键值映射的键在 SHACL 中是唯一的?

假设我的数据对键值映射进行建模,例如,我经营一家高档酒店,并希望跟踪客人每顿饭的订单。我如何确保每顿饭我都得到每位客人的订单(即所有钥匙都在场)并且每位客人我只有一份订单(即所有钥匙都是唯一的)?

让我们开始的示例代码:

形状:

数据:

我知道的一种解决方案是对列表中的每个键分别使用qualifiedShape 及其minCount 和maxCount 约束。然而,对于较大的“客人名单”,这变得难以维护。在我的工作中,我有一个大约 40 个键的列表。使用 40 块qualifiedShape 语句,检查列表变得不切实际(而且我已经首先编写了这些语句的生成脚本)。

我已经搜索了文档,但找不到我想要的一种“sh:disjointInScope”或“sh:uniqueFromList”语句(至关重要的是,约束不应强制该值在整个数据图中是唯一的,因为例如 James 可能会出现在几个订单中)。如何在人类可读的 SHACL 代码中获得所需的行为?

0 投票
1 回答
445 浏览

rdf - SHACL 比较两个不同节点上的值?

我正在尝试为开始日期必须小于或等于结束日期的日期比较编写 SHACL 约束。:beginDate当使用and谓词将日期附加到同一节点:endDate时,约束是直截了当的:

现实世界的模型更复杂。在附图中,请注意如何将:AnimalSubject hasReferenceInterval. ReferenceInterval IRI 具有 a:ReferenceBegin和 a :ReferenceEnd,它们依次使用time:inXSDDate谓词分配日期值。在这种情况下,如何应用约束以确保 ReferenceBegin 值等于或小于 ReferenceEnd 值?这是使用 SHACL-SPARQL 或 sequencePath 的情况吗?我一直找不到好的例子。干杯! 在此处输入图像描述

我在违反约束的数据上测试了以下 SHACL-SPARQL:ReferenceBegin = "2016-12-07", ReferenceEnd = "2016-12-06",但验证报告未检测到违规。如果我自己运行 SPARQL,它确实会挑选出观察结果。关于为什么的任何想法?我正在使用 Stardog/Stardog Studio,并且还在他们的用户支持平台上发布过。

0 投票
0 回答
171 浏览

duplicates - 使用 SHACL 和 SPARQL 查找重复值

我对 shacl 和 sparql 比较陌生,并且遇到了一个问题。

我有一个本体,其中包含有关工厂工厂的信息。

该本体的一部分是将房间描述为个体。个人可以由任何人创建,我现在需要检查他们的创建是否有效。例如房间名称是一个给定的模式,楼层号码是一个整数......

我正在 shacl 中编写此验证但卡住了。

如何检查本体中是否已经存在房间号?房间号被定义为“hasRoomNr”上的数据属性。

简写形式:我想查找重复值并创建错误。

我正在与 protege 合作,并阅读了很多关于 shacl 的信息。此外,不能直接比较数据值。

我现在的计划是结合 shacl 和 sparql 编写一个查询来搜索它。但我坚持比较价值观。我设法编写了一个 sparql 查询,它给了我所有的房间号。

现在我需要找到一种方法来比较它们并创建一个验证报告以排除干扰。

甚至有可能做到吗?

0 投票
1 回答
66 浏览

shacl - 有没有办法验证由同一属性链接的不同对象类型的计数?

我正在尝试验证来自标签文档的数据。每个标签(或代码)都是具有特定rdf:type(以及可能的其他属性,例如:isPresentrdfs:label)的匿名节点:comment。通过相同的属性 ( ):Codes链接到。:Documentsschema:isTargetOf

我想说“一个有效的文档必须至少有一个 x、y、z 类型的代码和一个 k 类型的代码”。

因此,在此示例中,有效文档必须是至少一个 HasImage 代码和恰好一个 HasAuthor 代码的目标。

如果属性不同,我了解如何执行此操作,例如将 schema:isTargetOf 更改为 schema:has_author 或 schema:has_image。

然后我可以这样做:

本质上,我想验证由单个属性链接的事物的集合。

目前我正在尝试使用 shacl 规则为每种类型的代码生成特定的属性类型,但这感觉有点复杂,我想知道是否有更直接的方法。

如果相关,我正在使用 pyshacl。