问题标签 [spin-rdf]
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.
sparql - 如何加载在 TopBraid Composer 中创建的 SPARQL/SPIN 约束和构造函数,以便在支持 SPIN 的存储库中用于 Sesame?
我已经ASK
使用 TopBraid Composer Maestro 版本 5.1.1 在 OWL/RDF 本体中成功生成并测试了 SPIN 约束(使用 SPARQL 查询)。我现在想在 Sesame 中测试这些 SPIN 约束。如何将我的 SPIN 约束、类定义、属性定义和包含在 TopBraid COMposer Maestro Edition 中创作的 OWL 本体中的测试个体放入 Sesame?
我正在使用芝麻 OpenRDF 工作台:
我的约束、类、属性和示例个体包含在 TopBraid Composer Maestro Edition 下的一个 RDF 文件中。
我尝试使用 Sesame Open RDF 工作台Modify/Add
命令来提取由 TopBraid Maestro Edition 生成的 RDF 文件,但我收到一个似乎与空白节点相关的错误:
javax.servlet.ServletException: org.openrdf.repository.RepositoryException: org.openrdf.repository.RepositoryException: org.openrdf.sail.SailException: org.openrdf.query.QueryEvaluationException: Multiple statements for pattern: _:node1alqlr2eix590 http://spinrdf.org/sp#where null
也许我没有正确地从 TopBraid Composer Maestro Edition 导出?我在 TopBraid Composer Maestro 版中使用了 RDF 文件的通用导出到文件系统,并使用了 Sesame OpenRDF 工作台添加 RDF 文件/RDF 数据文件命令,导致上述错误消息。
抢占一些在我的特定情况下无济于事的可能答案方向:
- 我特别想使用 SPIN 构造函数和约束,而不是 SWRL 或其他规则语言。
- 尽管我在 TopBraid Composer Maestro 版中取得了成功,并感谢我从 TopQuadrant 获得的帮助,但我无法负担在与其他计算机交互时使用我的 SPIN 构造函数和约束所需的 TopBraid Live 许可证。(TopBraid Composer Maestro Edition 有一个 SPARQL 端点,但该端点只能通过 localhost 从主机访问。)我还想确定 Sesame 实现是否对 SPIN 约束和构造函数施加了一些与 TopBraid 工具相同的限制。
sparql - 插入 Protege 以创建/编辑 SPIN 约束和构造函数?
是否有插件或其他方式在 Protege 中创建和编辑 SPARQL/SPIN 约束和构造函数?
据我了解,要在 RDF 中捕获 SPIN 约束,需要对 ASK 或 CONSTRUCT 查询的 SPARQL 代码进行解析和编码。它不存储为不透明的字符串。因此,似乎需要一些了解 SPARQL 和 SPIN 的插件。
我已经从 Topbraid Composer 将 RDF(包括 SPIN 约束)加载到 Protege 4.3.0 中,它似乎将约束视为注释,但我似乎无法找到所有细节,尤其是包括所有底层 SPARQL 代码。我在文本编辑 RDF 文件时确实看到了它。
从广义上讲,我试图找到一种方法来创建/编辑 SPIN 约束和构造函数,并将它们加载到 Sesame 中,让它们对从我的类实例化的个体进行操作。我发布了另一个关于从 TopBraid Composer 到 Sesame 的路径的问题。因为我是 Stack Overflow 的新手,所以我试图让我的问题更加具体。
顺便说一句,不,我不想改用 SWRL。我在使用 SWRL 表达我需要的约束时遇到了麻烦。我已经成功使用 SPARQL。
谢谢。
sparql - 为什么 TopBraid Composer FE 在 SPIN 规则过滤器中重新组合我的多个 OR 条件?
我正在使用 TopBraid Composer 免费版 (TBC FE) 版本 5.1.3。我正在构建 SPIN 规则/CONSTRUCT 查询。我的部分查询有一个带有多个 OR 条件的 FILTER 语句。我将其输入到 TBC FE 中,如下所示:
但是,当我在 TBC FE 中保存 SPIN 规则时,它会将 OR'd 条件重新组合为一组二进制 OR:
我的问题是:为什么要重组?我使用了其他没有进行重新组合的 SPARQL 编辑器和端点。我认为这使我的代码更难阅读(成本),所以我想知道有什么好处?
另外,如果不需要重新组合,有没有办法在 TBC FE 中将其关闭?
谢谢。
PS:是的,我知道采用文字字符串的子字符串似乎很愚蠢。我这样做是为了避免 Sesame 中的一个错误,当我将我从 TBD FE 保存的 RDF 文件加载到 Sesame 中时,它会修剪我的文字字符串。该错误已报告并正在解决。修复后,我将升级我的 Sesame 版本并删除这些丑陋的子字符串。
sparql - SPIN:rule 何时运行?
我正在使用 TopBraid 免费版创建带有 SPIN 规则的 OWL 本体。我正在将本体和 SPIN 规则加载到 Sesame OpenRDF Workbench 中:
我创建了一个简单的测试本体。它有一个类,一个 SPIN 规则和一个数据类型属性。
SPIN 规则将xsd:dateTime
时间戳添加到我的测试类的测试实例中。这是整个测试本体的 RDF,包括我的类、数据类型属性和规则(简短):
因此,在 Sesame 中清除我的 SPIN 存储库并使用工作台的修改/添加命令(未选中“使用基本 URI 作为上下文标识符”框,这对于避免错误很重要)。然后我使用 SPARQL 更新查询来创建我的类的测试实例:
然后我探索生成的 bugsi:aTimeStampBug_test1 个体,发现 SPIN:rule 已运行多次并产生了多个时间戳。时间戳的数量因测试而异。这是一个示例结果:
因此,我的 SPIN:rule 已针对该类的一个实例运行了多次。SPIN:rule 应该为类的实例化运行多少次?我以为它只会运行一次,但似乎我错了。
java - 在 TBC 之外执行 SPIN 规则
我用 TBC 创建了一个自旋规则来查询我的本体。我不想每次执行 SPIN 规则时都使用 TopBraid Composer。反正有没有自动调用 SPIN 规则。我听说过 SPIN API。有人有一些代码示例,例如如何通过调用方法或代码来自动在您的本体上执行 SPIN 规则?
谢谢您的帮助!
sparql - 使用 CONSTRUCT 的 SPIN 约束:CONSTRUCT 的三元组在哪里?
我正在使用 TopBraid Composer 免费版 (5.1.3) 创建包括 SPIN 约束的本体。然后我将生成的 RDF 文件加载到 RDF4J (2.0.1) 并使用 RDF4J Workbench 进行测试。
我正在研究 SPIN 约束。这是一个检查我添加到CRO2:SignalRate
课程中的非负信号速率的示例:
因此,我正在使用以下 SPARQL 更新查询在 RDF4J 工作台中测试此约束:
这个测试瞬间违反了上面显示的约束。如果我省略了spin:violationLevel
三元组并允许它默认为 a spin:Error
,那么我会从查询中收到一条错误消息,并且不会像预期的那样断言测试实例。如图所示执行时,违反约束是 a spin:Warning
,因此inst:aSignalRate_test
创建的个体具有数据值 -10.0。 我的问题是,约束CONSTRUCT
条款中的断言在哪里?spin:violationLevel
我相信自从影响行为 发生变化以来,它们就被断言了。请注意,我尝试使用自己的soo:hasConstraintViolation
属性绑定到空白节点,但这不起作用。CONSTRUCT 三元组是否在其他上下文/图中断言?我只是对所有内容使用默认值/图形。
我正在使用 RDF4J Workbench 的 Explore 和使用 SPARQL 查询来寻找预期的三元组。例如,在我断言我的错误后,以下查询不返回任何内容CRO2:SignalRate
:
这种行为在 TopBraid Composer FE 和 RDF4J Workbench 中的断言是一致的。
我的目标是查找和使用在 SPIN 约束违反情况下断言的诊断消息,最好使用 SPARQL 查询来查找此类诊断。似乎有道理。我错过了一些东西。
谢谢。
string - 从 SPARQL/SPIN 中的 FCC 指示符中解析所需的带宽?
我需要使用 SPARQL/SPIN 将相当神秘的 FCC 排放指示符从复合字符串编码解析为我可以轻松推理的值。第一项任务是从指示符中获取“所需带宽”。以下是发射指示符的外观(可作为xsd:string
值)和相应所需带宽的示例,手动解释了我的小老我:
16K00F3E
16.00 kHz 或 16,000.0 Hz3K00J3E
3.00 kHz 或 3,000.0 Hz1K10F1B
1.10 kHz 或 1,100.0 Hz100H00A1A
100.00 赫兹10M0G2D
10.0 兆赫或 10,000,000.00 赫兹
最终我想得到以xsd:double
赫兹为单位的值,但我目前停留在第一步,从整个发射指示符字符串中获取所需的带宽子字符串。
正则表达式^[0-9]+[A-Z][0-9]+
完成了第一步。例如,这个应用于发射指示符的正则表达式10M0G2D
匹配10M0
。
实际上,我想要的所需带宽子字符串是可变长度的。它有一组数字、一个字母(见下文),然后是另一组数字。字母标记小数点并确定乘数:
H
- 如果值小于 1000 Hz(乘数为 1.0)K
- 1 kHz 到小于 1000 kHz 的值(乘数为 1000.0)M
- 1 MHz 到小于 1000 MHz 的值(乘数为 1,000,000.0)G
- 1 GHz 或更高(乘数为 1,000,000,000.0)
后面是另一个超出所需带宽的字母。
所以,我的问题是,在 SPARQL/SPIN 中,如何从发射指示符字符串中解析出上述正则表达式中定义的所需带宽子字符串? 我想将该子字符串绑定到 SPARQL 变量,比如?encodedRequiredBandwidth
. 我在 SPARQL/SPIN 中看到的正则表达式的唯一用途是xsd:boolean REGEX (simple literal text, simple literal pattern)
. 太好了,但我想要与regex 匹配的子字符串,而不是指示它在某处的标志。
关于如何获得所需带宽子字符串的任何想法?
关于如何解析其余部分以获得xsd:double
我可以轻松推理的 Hz 值的任何想法(例如,进行幅度比较)?
谢谢。
sparql - 使用 SPARQL 和 SPIN 对数据进行 RDF 化
我想 RDFising 数据,我需要使用 SPARQL 查询(我正在使用 SPIN)构造一个具有两个属性(标题和作者)的对象(书)。所有书籍都有“标题”,但有时没有“作者”。
发生这种情况时,它不会创建这本“书”,我想用“标题”创建它。
我正在使用 GraphDB,这是查询:
有解决办法吗?我可以使用其他 SPARQL 语法。
sparql - 使用 SPIN 将默认值设置为属性
我是 SPIN 的新手。我想知道将它用于以下目的是否有意义。假设我有以下类层次结构:
某些类将属性owl:equivalenClass
设置为某个值,例如:
在owl:equivalentClass
没有设置值的情况下,它应该取它的父类的值。在上面的例子中:
在我使用 TopBraid 的情况下,这可以通过 SPIN 完成吗?
java - 在文本 SPARQL 语法和 SPIN RDF 词汇之间进行转换:如何添加 rdfs:comment 和 sp:text
使用 SPIN API ( http://topbraid.org/spin/api/ ) 并使用https://github.com/spinrdf/spinrdf/blob/master/src-examples/org/topbraid/spin的示例代码/examples/SPINParsingExample.java我正在尝试将 rdfs:comment 和 spin:text 的处理添加到示例中。Topbraid Composer 免费版 (TBC FE) 允许每个包含在 RDF 中的 SPIN 规则发表评论。TBC FE 还可以选择通过 sp:text 属性将 SPIN SPARQL 源代码包含为 xsd:string 值。我想在示例的扩展版本中执行相同的操作,然后将其转移到我想嵌入 SPIN 规则编辑的工作代码中。
这是我当前的示例代码的扩展版本。请忽略日志记录警告。请注意,我在示例查询顶部(第 54 行)插入的注释被静默地丢弃在输出中(输出也包括在下面)。
从上面的输出...
我确信有一种方法可以将 rdfs:comment 和源代码(通过 sp:text)添加到 RDF,但我还没有找到它。我怀疑可以通过示例中的 spinQuery 实例化调用 Select 类的方法(第 66 行),但我不确定如何实现。任何指针将不胜感激。
这个问题与我之前回答的问题有关如何将 SPARQL/SPIN 查询/规则从 Java 转换为 RDF 结构?但专门研究 RDF 中的注释和源代码。