问题标签 [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 回答
164 浏览

sparql - 这些使用 sh:or 的形状图有什么区别?

我有以下数据图。

我试图了解这两个形状图之间的区别,我认为(错误地!)应该返回相同的结果...... hr:typo、hr:randomtype 和 hr:missing 的验证错误,因为没有 rdf:type rdfs:Class 或 rdf:Property 的属性路径。

以下形状图会产生预期的验证错误。

(A)——好成绩

(A) 产生的良好和预期的验证错误是:

但是,这个形状图:

(B) -- 不好的结果

不会只产生预期的验证错误。我得到:

为什么结果不一样?

我之所以喜欢 (B) 而不是 (A) 是因为如果它有效的话,它会更简洁。

pySHACL和TopBraid SHACL API shaclvalidate.sh都同意结果。

0 投票
0 回答
38 浏览

shacl - 如何验证 rdf:engine.validateNodesAgainstShape 中的类型

TopQuadrant shacl 1.3.2 中,我正在尝试使用

带形状图:

和数据图:

focusNodesshape

由于数据图中没有任何声明PersonNameShape表明,例如:

但是,我得到一个空的报告:

如果我修改要使用的 PersonName 资源之一,skos:prefLabel而不是rdfs:label,那么我会得到预期的违规结果:

我曾认为声明sh:targetClass bdo:PersonName中的PersonNameShape是验证的一部分,但显然Shacl 规范 2.1.3

只要将焦点节点直接提供为该形状的验证过程的输入,就会忽略该形状的目标。

表示我没有看到预期(希望)的违规行为的部分原因。所以我的问题是我如何指定验证的一部分应该是检查rdf:type每个的focusNodes是 ( rdfs:subClassOf*) bdo:PersonName

我尝试sh:property bds:PersonNameShape-personNameType ;添加PersonNameShape

我预计会看到违规行为bdr:NMC2A097019ABA499Fbdr:NMEA2B380AF0BBFB1B但其他两个应该验证我的想法,因为他们有rdf:typebdo:PersonPrimaryTitle。但是,我看到了我不理解的违规行为:

我想这只是我缺乏理解,但我没有看到。

提前致谢。

0 投票
1 回答
166 浏览

shacl - 以特定类的所有对象为目标,SHACL 中的指定实例除外

我想使用 SHACL 检查建筑项目的传入数据集。为此,我在类级别定义了几个约束。在我的用例中,我需要能够对指定实例的这些约束进行项目特定异常。这在 SHACL 中可能吗?这个怎么建模?

最后,我想在不同的形状图(SG)中描述这些约束:

  • 通用SG,无一例外地遵守规则;
  • 项目 SG,在一般 SG 中包含特定项目相关的约束和约束例外。

我可以想到诸如 SHACL-SPARQL 之类的变通方法,或者首先检查一般 SG,然后使用过滤器忽略项目特定的异常,但我想知道是否有针对这种情况的更干净的解决方案。

下面是一个简化的例子来说明这个问题:


数据图可能如下所示:

一般的 SG 可能如下所示:

使用上述和项目特定的 SG,验证器应该返回 的违规:IncorrectBuilding,而不是:BuildingWithException

我怎样才能为项目制作特定的例外:BuildingWithException

感谢您的阅读,让我知道您的想法。

0 投票
0 回答
118 浏览

collections - SPARQL CONSTRUCT 从 GROUP BY 绑定生成 RDF 集合

我想使用 SPARQL 构造查询生成一个 RDF 集合(即rdf:first/rdf:rest链表),将变量的所有分组绑定放入一个集合中。

所以对于数据

如果 SELECT 查询

产量

包含作为 rdf 集合的绑定的相应CONSTRUCT查询会是什么样?names子,即类似于

(假设上面的TTL解释)

背景:我想使用 SHACL-AF SPARQLRules 生成 SHACL 形状,而我正在努力解决的一件事是生成sh:in (...)列表作为多个查询解决方案的聚合生成的位置。

0 投票
1 回答
112 浏览

python - 指向外部文件的属性的 shacl 验证错误

数据文件位于此网址:https ://schema.repronim.org/rl/activities/PHQ-9/items/phq9_8

我已经为上述数据文件编写了一个 shacl 形状。但是,当我尝试验证时出现错误。在上面的数据文件中,keyresponseOptions指向了一个外部的jsonld文件——就是发生错误的时候。如果我将外部文件嵌入数据文件本身,则没有错误。我用这个形状responseOptions

抛出的错误是:

上面的形状对吗?我究竟做错了什么?

0 投票
1 回答
120 浏览

python - 使用 SCHACL 验证 xsd:dateTime

我一直在尝试使用 SHACL验证'''xsd:dateTime'''值。我正在使用 pychacl,我拥有的脚本应该按原样运行pip install pyshacl, rdflib
SHACL 形状图如下所示:

我收到以下验证错误:

根据xsd:dateTime ,日期似乎格式正确,但仍然失败。我在这里想念什么?

0 投票
1 回答
116 浏览

shacl - 如何使用 SHACL 检查多个类实例

我有一个 RDF 文件——一个单一的图表——我想使用 SHACL 进行验证。我想确保它包含一个且只有一个 X 类实例。这可能吗?

文件中没有节点链接到 X 类的这个实例,所以我无法通过其他实例的属性路径来计算它。

0 投票
1 回答
128 浏览

rdf - SHACL 验证使用破折号:reifiableBy

我正在使用 TopBraidComposer Maestro Edition (v 6.3.2) 中的 SHACL 测试 RDF 数据的验证。在分析 SHACL 期间,我遇到了文档DASH Reification Support for SHACL。该文档的第 2 章定义了属性dash:reifiableBy,根据该文档,该属性“可用于将 SHACL 属性形状与一个或多个节点形状联系起来。任何具体化的语句都必须符合这些节点形状。

这似乎表明可以针对某些形状定义语句的 SHACL 验证。该文档有一个示例,我尝试在 TopBraidComposer 中运行该示例 - 但稍作修改,以便实际获得验证结果(在这种情况下,声明无效)。代码是:

作品,exshacl:PersonShape只要属性形状确保exschema:age存在 aexschema:Person并且具有 datatype xsd:integer

ex:BobAge23Reification但是,三元组上的 rdf 语句ex:Bob exschema:age "23"^^xsd:integer未针对exshacl:ProvenanceShape. 虽然exschema:author声明中存在财产,但财产exschema:date不存在。

示例代码是否错误或缺少关键位,或者dash:reifiableBy没有定义实际验证的 SHACL 约束组件(并且仅用于定义 GUI 中的编辑表单)?

0 投票
0 回答
136 浏览

sparql - 如何在 Fuseki 配置中引用 SHACL 规则文件?

我希望 Fuseki sparql 端点使用文件“rules.ttl”中的 SHACL 规则来推断新的三元组。

来自https://jena.apache.org/documentation/shacl/index.html中的文档

上面的语法中是否有一些地方可以引用 rules.ttl 文件?

0 投票
1 回答
296 浏览

list - SPARQL - 在不同对象之间过滤

我是 SPARQL 的新手,我有一个问题,我如何过滤对象的值与从不同对象收集的一组值不同的情况?我想将查询用作 SPARQL-SHACL 的一部分。

我可以毫无问题地访问我要检查的值,但是后来以某种方式检查了单个值,而不是它是否在值列表/值系列中

例子:

  • 我的变量 ?value 是 6
  • 我想检查 6 的 ?value 是否不等于对象 ?obj ?obj 的任何值对于不同的三元组(不同的主题)有单个值,例如 1 表示一种情况,2 表示另一种情况,3 表示其他情况。 ..

如果我做 FILTER (?value!=?obj) 我得到 6!=1 的所有情况,依此类推,我希望能够做 ?value NOT IN (?obj) 其中 ?obj 是一个列表 1、2、 3,.... 我假设在这种情况下,我只会得到一个结果,即 6 在列表中找不到。

所以也许有2个问题

  • 是否可以从 ?obj 构造一个列表作为查询的一部分,以便我最终可以使用 NOT IN?
  • 有没有其他方法可以解决这个问题?

提前致谢。