问题标签 [topbraid-composer]

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 回答
159 浏览

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 应该为类的实例化运行多少次?我以为它只会运行一次,但似乎我错了。

0 投票
2 回答
536 浏览

sparql - 为什么这个联合 SPARQL 查询在 TopBraid 中有效,但在 Apache Fuseki 中无效?

我有以下联合 SPARQL 查询,它在 TopBraid Composer 免费版(5.1.4 版)中按预期工作,但在 Apache Fuseki(2.3.1 版)中不起作用:

我监视在后台执行的子 SPARQL 查询,并注意到 TopBraid 正确地执行了对http://dbpedia.org/sparql端点的以下查询:

而 Apache Fuseki 执行以下子查询:

注意区别;TopBraid 将变量 ?actorName 替换为特定值“Paul Reubens”,而 Apache Fuseki 没有。这会导致来自http://dbpedia.org/sparql端点的错误,因为 ?actorName 在结果集中使用但未分配。

这是 Apache Fuseki 中的错误还是 TopBraid 中的功能?如何让 Apache Fuseki 正确执行这个联合查询。

更新 1:进一步阐明 TopBraid 和 Apache Fuseki 之间的行为差​​异。TopBraid 首先执行linkedmdb.org 子查询,然后为linkedmdb.org 查询的每个结果执行dbpedia.org 子查询)(并将?actorName 替换为linkedmdb.org 查询的结果)。我假设 Apache Fuseki 的行为类似,但是对 dbpedia.org 的第一个子查询失败(因为 ?actorName 在结果集中使用但未分配),因此它不会继续。但现在我不确定它是否真的要多次执行对 dbpedia.org 的子查询,因为它永远不会到达那里。

更新 2:我认为 TopBraid 和 Apache Fuseki 都使用 Jena/ARQ,但我注意到在 TopBraid 的堆栈跟踪中,包名称类似于 com.topbraid.jena.*,这可能表明他们使用的是 Jena/ARQ 的修改版本?

更新 3: Joshua Taylor 在下面说:“您肯定不会期望为每个服务块执行第二个服务块吗?”。TopBraid 和 Apache Fuseki 都使用此方法进行以下查询:

但我同意原则上他们应该执行这两个部分并加入它们,但也许出于性能原因,他们选择了不同的策略?

此外,请注意上述查询如何在 Apache Fuseki 上运行,而本文的第一个查询则不然。因此,在这种特殊情况下,Apache Fuseki 实际上与 TopBraid 的行为类似。与在 FILTER 正则表达式函数中使用三重模式中的字符串变量 (?actorName ) 相比,它似乎与在两个三重模式中使用URI变量 (?dbpediaLink)(在 Fuseki 中有效)有关(在 Fuseki 中无效) )。

0 投票
1 回答
75 浏览

sparql - 如何在 SPIN 规则中添加活动/非活动概念?

我正在使用 TopBraid Composer 免费版来编写本体和 SPIN 规则。我正在使用从 TopBraid Composer 免费版保存的 RDF 文件将我的本体加载到 Sesame OpenRDF Workbench。

我有一个 SPIN 规则(更准确地说是 SPIN 构造函数)的应用程序,它根据数百条规则中的哪条应用是动态的。我想找到一种在 SPIN 规则中添加“活动”或“非活动”概念的方法。我愿意为WHERE子句中的每个规则添加一个检查,以便只有“活动”规则。为了说明,假设我创建了 SPIN 的两个子属性:构造函数,分别调用它们myPrefix:activeConstructormyPrefix:inactiveConstuctor.

现在我想在构造函数的 WHERE 子句中添加以下形式的三元组:

这种方法取决于定义?thisConstuctorURI. SPIN 设置?this为与规则关联的类的当前实例。规则 itslef 的 URI 是否有类似的东西。

我也相信,目前,规则驻留在空白节点上。例如,在 Sesame/OpenRDF Workbench 中,我的 sxxicc:Pub7Proposal 类的构造函数具有以下 13 个构造函数的三元组:

我真正需要的(我认为)是

  1. 能够引用自己的规则(我的?thisConstructorURI 想法)
  2. 能够在我编写规则时命名规则(例如 sxxicci:Pub7ProposalSecurityClassificationConsistencyCheck

这一切都是为了让我可以一个一个地激活/停用规则(或通过任意命名组中的简单扩展)。关于如何做到这一点的任何想法?

满足上述 1. 类似于spin:violationSource已经支持的约束,可以包含在 a 中spin:ConstraintViolation。但是,我故意使用构造函数而不是约束,主要是因为我不想阻止类的实例化,即使它有违规行为。

恐怕答案是当前的 SPIN 标准和实现不支持这一点,并且需要更改支持实现以扩展标准来做到这一点。

0 投票
0 回答
80 浏览

sparql - 个人的 SPARQL/Spin 更新查询

我在链接中上传了本体,编辑 sry 合并时出了点问题,这现在是 acutaly 文件。本体+映射: http ://s000.tinyupload.com/?file_id=06128684263999513543

我知道这有点多,但我希望有人能帮助我。我真的没有这种领域的经验。

我需要用作为映射一部分的文字解释以下查询:

从类型 sequenceFlow(class) 中的每个个体中写入对象属性,使用断言或(个体)拆分并使用 and(个体)连接(稍后将在 Ontology YAWL 为每个序列流请求此值的过程中进行编辑)。由于个体的变化取决于模型及其映射部分,因此无法手动完成。必须这样应用。

接下来检查类序列流并从类型序列流中获取所有个体

如果sequenceFlow 中的(sourceRef(object property) 以字符串inclusiveGateway(个体断言)开头,例如个体的名称是来自类型sequenceflow 的flow10,则将与断言分开的对象属性写入此处,例如flow10。

与上面相同的过程现在只使用对象 targetRef,如果 targetRef 包括第一个字母 inclusiveGateway,则从 tpye sequenceFlow 写入特定个体并与断言或

对于来自类型序列流的所有个体,此过程必须是骨干。// 每次建模者创建实例时,inclusiveGateway 通常加一,例如 inslusiveGateway1, 2

伙计们,我真的很绝望,有点承受时间压力,我非常感谢您的帮助。我不想乞求,但如果你能创建这个关于本体的查询,你会真正帮助我并帮我一个大忙。我现在真的有点绝望,我不得不承认这在某些时候也是我的错。

最好的问候陷入困境的人

0 投票
0 回答
84 浏览

java - 在 TBC 之外执行 SPIN 规则

我用 TBC 创建了一个自旋规则来查询我的本体。我不想每次执行 SPIN 规则时都使用 TopBraid Composer。反正有没有自动调用 SPIN 规则。我听说过 SPIN API。有人有一些代码示例,例如如何通过调用方法或代码来自动在您的本体上执行 SPIN 规则?

谢谢您的帮助!

0 投票
0 回答
338 浏览

sparql - RDF4J Workbench:为什么一个 SPIN 构造函数非常慢?

我为这篇文章的长度道歉。我试图使这个缓慢的规则问题可重现。

我正在使用 TopBraid Composer FE 创建一个带有本体和 SPIN 构造函数的 RDF 文件。SPIN 构造函数的目的是检查本体中定义的类的个体实例化的合规性。我发现 SPIN 构造函数的执行速度很慢,我想知道为什么。

包括 SPIN 构造函数的本体 SXXIComplianceCheck18.rdf

我修改/清除我的存储库(一个支持 RDFS+SPIN 的内存存储)并将这个本体加载到 RDF4J 工作台中:RDF4J 工作台系统信息

在此处输入图像描述

在此处输入图像描述

接下来,我依次使用两个 SPARQL 更新查询来创建本体(上面的 RDF 文件)中定义的类的个体,从而刺激运行 SPIN 构造函数。

第一个 SPARQL 更新查询(实例化单个数据项并根据需要调用解析构造函数......运行速度很快):

第二个 SPARQL 更新查询(实例化将第一个查询实例化的数据项联系在一起并运行合规性检查构造函数的提案......在我的计算机上运行非常缓慢,大约 20 秒):

第二个查询需要很长时间才能执行,大约 20 秒。这与其他合规性检查(未包含在此 RDF 中)不一致。我已将这条规则从其他 13 条类似规则(主要是字符串解析和比较)中分离出来,因为它支配了时间消耗。

(正确但延迟的)结果:

在此处输入图像描述

有问题的 SPIN 构造函数(用于sxxicc:Pub7Proposal类):

为什么此构造函数在现代 PC 上运行如此缓慢(AMD 四核 2.3 GHz,运行 Windows 8,具有 16 GB 物理内存并且没有显着的额外应用程序加载)?其他构造函数在同一台机器上快速运行,并使用相同的事实做明显相似的事情。

这是执行此示例的 Jave VisualVM 采样器输出:

在此处输入图像描述

RDF4J org.eclipse.rdf4j.common.concurrent.locks.LockManager$1.release() 和 org.eclipse.rdf4j.common.concurrent.locks.LockManager.createLock() 支配着 Self Time。为什么??我可以做些什么来重写我的规则以避免这种时间消耗?

笔记:

  1. WHERE 子句的第一个三元组在 SPIN 构造函数中不是必需的,因为 ?this 是自动设置的。但是,我包含它是为了通过将此构造函数复制到工作台中的 SPARQL 查询 (Explore/Query) 中来简化调试。我还发现将 CONSTRUCT 子句替换为“SELECT DISTINCT *”很方便,同时保留 WHERE 子句以进行构造函数调试。
  2. 此构造函数中 WHERE 子句的唯一目的是提供图形模式匹配,以显示 CONSTRUCT 子句中存在的固定错误消息的错误条件。没有绑定从 WHERE 子句转移到 CONSTRUCT 子句中,但 WHERE 子句仍然控制 CONSTRUCT 子句中三元组的断言。

更新

我通过从构造函数中删除一个 FILTER 和关联的三元组来修改构造函数:

这导致在 TBC FE 中显示如下构造函数:

在此处输入图像描述

使用相同的 2 个 SPARQL 更新查询运行相同的测试,第二个查询的执行时间非常非线性地减少,从超过 20 秒减少到不到 2 秒。同样,这似乎不正确。

0 投票
1 回答
135 浏览

sparql - 像 Anzo 这样的语义工具会创建数据副本吗?

我是语义技术的新手。我了解 RDF、OWL 和 Ontologies 以及其他基本术语是什么以及语义搜索如何使用它们。当我们使用具有企业搜索功能的 anzo 创建语义搜索模块时。它连接各种数据源并在它们之间建立关系。现在我很想知道像 anzo 这样的语义工具在内部做了什么。

  1. 它是在本地机器上创建数据副本还是每次我们执行 SPARQL 查询时都会命中数据源
  2. 如果它存储数据,该数据是以它的行格式存储的,还是在清理并创建它们之间的语义关系之后存储的数据。
  3. 执行查询后数据会发生什么。它如何每次获取当前数据?

任何关于它的想法对我来说都是有价值的。

提前非常感谢!

0 投票
2 回答
180 浏览

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 查询来查找此类诊断。似乎有道理。我错过了一些东西。

谢谢。

0 投票
0 回答
114 浏览

rdf - AllegroGraph RDF 三重存储使用什么推理器?

我在 TopBraid Composer 中创建了一个本体并将其加载到 AllegroGraph Triple Store。RDFS++ 推理(在此处的示例 19 中解释)有效。

现在我想使用一个语义推理器,它可以做的不仅仅是 RDFS++ 推理(例如 Pellet、HermiT 或 FACT..)。

你会推荐哪一个?

0 投票
1 回答
277 浏览

sparql - 使用 SPIN 将默认值设置为属性

我是 SPIN 的新手。我想知道将它用于以下目的是否有意义。假设我有以下类层次结构:

某些类将属性owl:equivalenClass设置为某个值,例如:

owl:equivalentClass没有设置值的情况下,它应该取它的父类的值。在上面的例子中:

在我使用 TopBraid 的情况下,这可以通过 SPIN 完成吗?