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

rdfs - rdfs:subPropertyOf 的 Shacl 处理

我有以下 shacl 规范

我的目标是表达一个关系必须完全由“nondirectionalLinkWith”对象属性连接。更具体地说,我想表示它可以是"nondirectionalLinkWith"的任何 subPropertyOf 。换句话说,可以说,一个 Relation 对象是这样的,它必须由 2 个非定向链接连接。其中非定向链接是作为 subPropertyOf "nondirectionalLinkWith"的任何对象属性。

1 ) 我想知道如何使用 shacl 来表达这一点。

到目前为止,我看到的唯一可能性是显式使用 RDFS Reasoner。也就是说,虽然 Shacl 优雅地处理 rdfs:subClassOf,因此不需要使用 RDFS Reasoner,但 rdfs:SubPropertyOf 似乎没有支持。

我在这里是否正确,或者有一种方法可以直接在 shacl 中表达这种约束。

使用 RDFS 推理器,我们有:

这允许然后验证关系。但是,我想知道我是否可以完全避免使用 RDFS Reasoner 来处理这样一个简单的案例?如果它可以以某种方式以纯 shacl 表示,或者任何其他解决方法将不胜感激。

0 投票
1 回答
56 浏览

shacl - 澄清 Shacl sh:qualifiedValueShape

sh:qualifiedValueShape 状态的定义:

指定数量的值节点需要符合的形状。形状中 sh:qualifiedValueShape 的值必须是格式正确的形状。节点形状不能有 sh:qualifiedValueShape 的任何值。这是 sh:QualifiedMinCountConstraintComponent 和 sh:QualifiedMaxCountConstraintComponent 的强制参数。

然后我们有以下例子

尽管我对这两个示例都非常了解,但我不明白的是第二个示例在技术上如何匹配规范。我更具体地指向

那是。而在

我们可以看到空白节点是一个属性形状,我不知道空白节点是什么样的形状

确实代表。

有什么我在这里看不到的隐含的东西吗?sh:class用于属性形状,那么这里的实际路径是什么?

0 投票
1 回答
26 浏览

shacl - Shacl sh:qualifiedValueShape 表达式缩写

假设我试图表达一个Binding必须恰好有 1 个 合作伙伴FunctionalClass并且正好有 1 个 合作伙伴Protein

我想知道这是否足够

或者我需要完整的仪式吗

0 投票
1 回答
93 浏览

rdf - SHACL 等效于 JSON 模式“uniqueItems”

所以我的任务是将描述本体的 JSON 模式转换为 SHACL。

JSON-Schema 具有uniqueItems结构,顾名思义,它强制数组中的所有元素都是唯一的。出于我的目的,仅考虑 String 类型的元素。

SHACL 中是否有类似的构造?sh:disjoint需要明确的唯一路径,因此它不适用。我正在考虑创建一个 SPARQL 约束,但由于我的实例都是匿名节点,我还不能让它工作。

编辑:添加示例

有效的 JSON:

无效的 JSON:

有效 TTL:

无效的 TTL:

0 投票
1 回答
38 浏览

linked-data - 如何限制属性形状中的单位?

我正在寻找为我的本体中具有特定单位的某些属性制作一些 SHACL 形状。例子:

我的实例数据看起来像这样:

然后我有一些形状来验证这些数据:

我的问题:如何在我的本体中的每个属性的实例数据中为谓词“otlc:hasUnit”指定给定的单位?我想要的最终结果是为浪涌保护器设置一个节点形状,为属性“nominal_voltage”设置一个属性形状,以将nominal_voltage 的值限制为单位:KiloV。我希望有某种我没有听说过/意识到我可以在这里使用的 shacl 关键字来添加到我的 propertyshape 中(现在,我在 ** 中输入了我想象的 shacl 存在的内容)。(例如,sh:pattern 可用于使用正则表达式指定值,但我想指定我的值的一段元数据的值,如果这有意义的话......)

提前致谢!罗宾

0 投票
0 回答
57 浏览

rdf - 如何在 rdf 和 shacl 中编写和使用规则

假设这样的规则:

如何在 shacl 形状文件中表示这些规则?如果我有这样的数据图:

我怎样才能得到 :

谢谢你的帮助 !

0 投票
1 回答
94 浏览

owl - SHACL 规则中的多路径和存在量化(我应该使用 sh:oneOrMorePath 吗?)

我想了解如何在 SHACL 规则中处理多个路径和存在量化。让我用一个示例本体来举例说明我的问题。

本体包括类“Approve”、“Legal”、“Result”、“Man”和“Machine”,它们都是不相交的。它有两个属性“has-theme”和“come-from”以及以下个体:

因此:批准操作“:a”有两个主题:“:r1”和“:r2”。前者来自人“:m1”,后者来自机器“:m2”。

我想写一个 SHACL 规则,说明“每个批准动作在其主题中至少有一个来自男人的结果是合法的”。

我试过这个,将“:a”归类为合法(但它应该):

问题是 ":a" 有两个主题,一个来自人,另一个来自机器。

然后我在网上阅读了有关 sh:oneOrMorePath 的信息,并在 sh:property 中尝试了以下变体:

无事可做,这些变体也不起作用。

另一方面,如果我删除三重 ":r2 :come-from :m2" 或三重 ":a :has-theme :r2" ,它会起作用,因为本体中不再有从 ": a" 对非人。

你们中的任何人都可以帮助我吗?

谢谢!

利维奥

0 投票
0 回答
54 浏览

owl - 如何通过 SHACL 断言逆三元组(假设它们还不存在?)

我有一个本体,其中每个主题角色(例如,has-agent)都通过对象属性表示。此外,总是定义逆属性(例如,is-agent-of)。

我想通过 SHACL 规则在本体中断言所有逆三元组,前提是它们并不已经存在

因此,我编写了以下规则:

但它不起作用:它断言逆三元组即使它们已经存在(而且它不应该存在)。

我怀疑“sh:equals sh:this”不正确,即“sh:this”不能在 sh:property 中使用。另一方面,“sh:minCount 1;” 单独是行不通的,因为某人可以是多个行动的代理人。

谁能帮我?谢谢

0 投票
0 回答
63 浏览

rdf - 如何通过 SHACL 中的两条路径比较个体?

此问题与此链接中的问题有关。假设这是一个“扩展问题”。

该链接上的本体包含以下个人:

现在我在本体中添加了以下三元组:

即:“:x 是 Approve 动作 :a 的代理”,“:m1 是 :x 的朋友”。

在上面链接的问题中,我想编写一个 SHACL 规则,说明“每个批准操作在其主题中至少有一个来自男人的结果是合法的”。

Holger 建议我使用 SHACL 规则的以下条件(先决条件)。条件有效(感谢 Holger!):

现在我想扩展上述条件以获得以下扩展 SHACL 规则:“每个 Approve 动作在其主题中至少有一个来自Approve 动作代理的朋友的人的结果是合法的”。

基本上:我想从 Approve 动作“:a”开始,从一条路径获取它的代理,将产生结果的人的朋友作为另一条路径的“:a”主题......并通过以下方式比较个体对这些路径,即在它们匹配时询问它们。

我尝试以多种方式扩展上面的 :conditionTest,例如,使用 sh:equals:

但是我尝试过的任何解决方案都不起作用。另一方面,如果我使用 sh:hasValue 并且我明确提到了个人 :x,即:

有用。但这实际上并不是我想要的:a 想要一个适用于任何个人的 SHACL 规则,作为 :a 的 has-agent。换句话说:我想通过路径“(sh:this has-agent)”来获取和比较这个人。

希望你们中的任何人都知道一种方法。提前致谢。利维奥

0 投票
1 回答
94 浏览

sparql - 如何正确使用 sh:rule 和 sh:count

这是我的data.ttl:

shacl.ttl 是:

我使用 shacl 推理引擎(https://github.com/TopQuadrant/shacl):

我得到一个结果报告:

我实际上想实现以下规则:

如果 Bob 获得超过 2 个“A”,则 --> :Bob :rating "Outstanding" 。

如何正确编写此 sh:condition 语句?在这种情况下 sh:count 应该计算 Test which Grade="A" 的数量,我必须使用 sparql CONSTRUCT 语句吗?谢谢你的帮助!