- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 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 行)会默默地放入输出中(输出也包含在下面)。
/*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* See the NOTICE file distributed with this work for additional
* information regarding copyright ownership.
*/
package mil.disa.dso.spo.a2i.nsc.sharing2025.raaDemo;
import org.topbraid.spin.arq.ARQ2SPIN;
import org.topbraid.spin.arq.ARQFactory;
import org.topbraid.spin.model.Select;
import org.topbraid.spin.system.SPINModuleRegistry;
import org.apache.jena.query.Query;
import org.apache.jena.rdf.model.Model;
import org.apache.jena.rdf.model.ModelFactory;
import org.apache.jena.rdf.model.Property;
import org.apache.jena.util.FileUtils;
import org.apache.jena.vocabulary.RDF;
/**
* Converts between textual SPARQL representation and SPIN RDF model.
*
* @author Holger Knublauch
*/
public class SPINParsingExample {
/**
* @param args
*/
public static void main(String[] args) {
// Register system functions (such as sp:gt (>))
SPINModuleRegistry.get().init();
// Create an empty OntModel importing SP
Model model = ModelFactory.createDefaultModel();
model.setNsPrefix("rdf", RDF.getURI());
model.setNsPrefix("ex", "http://example.org/demo#");
String query =
"# This is an example SPARQL comment\n" +
"SELECT ?person\n" +
"WHERE {\n" +
" ?person a ex:Person .\n" +
" ?person ex:age ?age .\n" +
" FILTER (?age > 18) .\n" +
"}";
System.out.println("Original SPARQL query string:\n\n" + query);
Query arqQuery = ARQFactory.get().createQuery(model, query);
ARQ2SPIN arq2SPIN = new ARQ2SPIN(model);
Select spinQuery = (Select) arq2SPIN.createQuery(arqQuery, null);
// TODO what about the sp:text? It's not in the artifacts printed below...
// TODO figure out how to add a comment to the tokenized query... does not propagate from source string above
// perhaps this is through and addProperty call to add an rdfs:comment?? many calls, not clear how to use...
// get javadoc?
System.out.println("\n-----");
System.out.println("SPIN query in Turtle:\n");
model.write(System.out, FileUtils.langTurtle);
System.out.println("\n-----");
System.out.println("SPIN query in XML:\n");
model.write(System.out, FileUtils.langXML);
System.out.println("\n-----");
String str = spinQuery.toString();
System.out.println("SPIN query:\n\n" + str);
// Now turn it back into a Jena Query
Query parsedBack = ARQFactory.get().createQuery(spinQuery);
System.out.println("Jena query:\n" + parsedBack);
}
}
上面的输出...
log4j:WARN No appenders could be found for logger (Jena).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Original SPARQL query string:
# This is an example SPARQL comment
SELECT ?person
WHERE {
?person a ex:Person .
?person ex:age ?age .
FILTER (?age > 18) .
}
-----
SPIN query in Turtle:
@prefix ex: <http://example.org/demo#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix sp: <http://spinrdf.org/sp#> .
[ a sp:Select ;
sp:resultVariables ( [ sp:varName "person" ]
) ;
sp:where ( [ sp:object ex:Person ;
sp:predicate rdf:type ;
sp:subject [ sp:varName "person" ]
]
[ sp:object [ sp:varName "age" ] ;
sp:predicate ex:age ;
sp:subject [ sp:varName "person" ]
]
[ a sp:Filter ;
sp:expression [ a sp:gt ;
sp:arg1 [ sp:varName "age" ] ;
sp:arg2 18
]
]
)
] .
-----
SPIN query in XML:
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:ex="http://example.org/demo#"
xmlns:sp="http://spinrdf.org/sp#">
<sp:Select>
<sp:resultVariables rdf:parseType="Collection">
<rdf:Description>
<sp:varName>person</sp:varName>
</rdf:Description>
</sp:resultVariables>
<sp:where rdf:parseType="Collection">
<rdf:Description>
<sp:object rdf:resource="http://example.org/demo#Person"/>
<sp:predicate rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#type"/>
<sp:subject rdf:parseType="Resource">
<sp:varName>person</sp:varName>
</sp:subject>
</rdf:Description>
<rdf:Description>
<sp:object rdf:parseType="Resource">
<sp:varName>age</sp:varName>
</sp:object>
<sp:predicate rdf:resource="http://example.org/demo#age"/>
<sp:subject rdf:parseType="Resource">
<sp:varName>person</sp:varName>
</sp:subject>
</rdf:Description>
<sp:Filter>
<sp:expression>
<sp:gt>
<sp:arg2 rdf:datatype="http://www.w3.org/2001/XMLSchema#integer"
>18</sp:arg2>
<sp:arg1 rdf:parseType="Resource">
<sp:varName>age</sp:varName>
</sp:arg1>
</sp:gt>
</sp:expression>
</sp:Filter>
</sp:where>
</sp:Select>
</rdf:RDF>
-----
SPIN query:
SELECT ?person
WHERE {
?person a ex:Person .
?person ex:age ?age .
FILTER (?age > 18) .
}
Jena query:
SELECT ?person
WHERE
{ ?person a <http://example.org/demo#Person> ;
<http://example.org/demo#age> ?age
FILTER ( ?age > 18 )
}
我确信有一种方法可以将 rdfs:comment 和源代码(通过 sp:text)添加到 RDF,但我还没有找到。我怀疑可以通过示例(第 66 行)中的 spinQuery 实例化调用 Select 类的方法来完成这两项操作,但我不确定如何实现。任何指示将不胜感激。
这个问题与我之前回答的问题How to turn a SPARQL/SPIN query/rule into an RDF structure from Java?有关但专门研究 RDF 中的注释和源代码。
最佳答案
看来您只能将 rdfs:comment
添加到详细的 rdf 形式的查询中。无法将 rdfs:comment
传递给 sp:text
,因为最后一个是字符串文字的谓词,您只能将其作为字符串的一部分。看来 Topbraid 只允许通过 RDF 图进行评论,并且文本查询仅存在于 GUI 中(作为分离模型)。建议:将查询保持为 RDF 形式,在这种情况下,前缀也不会出现任何问题。
如何添加 rdfs:comment
和 sp:text
的示例:
public static void main(String ... args) {
Model model = ModelFactory.createDefaultModel();
model.setNsPrefix("rdf", RDF.getURI());
model.setNsPrefix("ex", "http://example.org/demo#");
model.setNsPrefix("sp", SP.getURI());
model.setNsPrefix("rdfs", RDFS.getURI());
String query = "SELECT ?person\n" +
"WHERE {\n" +
" ?person a ex:Person .\n" +
" ?person ex:age ?age .\n" +
" FILTER (?age > 18) .\n" +
"}";
Query arqQuery = ARQFactory.get().createQuery(model, query);
ARQ2SPIN arq2SPIN = new ARQ2SPIN(model);
Select select1 = (Select) arq2SPIN.createQuery(arqQuery, null);
select1.addProperty(RDFS.comment, "Comment1"); // <-- as part of rdf
Resource anon = model.createResource();
anon.addProperty(RDF.type, SP.Select);
anon.addProperty(SP.text, model.createTypedLiteral(
"# Comment2\n" + // <-- as part of string
"SELECT ?person\n" +
"WHERE {\n" +
" ?person a ex:Person .\n" +
" ?person ex:age ?age .\n" +
" FILTER (?age < 22) .\n" +
"}"));
Select select2 = anon.as(Select.class);
System.out.println("========================");
model.write(System.out, "ttl");
System.out.println("========================");
System.out.println("Select1:\n" + select1);
System.out.println("Select2:\n" + select2);
}
并输出:
========================
@prefix ex: <http://example.org/demo#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix sp: <http://spinrdf.org/sp#> .
_:b0 a sp:Filter ;
sp:expression [ a sp:gt ;
sp:arg1 [ sp:varName "age" ] ;
sp:arg2 18
] .
_:b1 sp:object [ sp:varName "age" ] ;
sp:predicate ex:age ;
sp:subject [ sp:varName "person" ] .
[ a sp:Select ;
rdfs:comment "Comment1" ;
sp:resultVariables ( _:b2 ) ;
sp:where ( _:b3 _:b1 _:b0 )
] .
_:b3 sp:object ex:Person ;
sp:predicate rdf:type ;
sp:subject [ sp:varName "person" ] .
_:b2 sp:varName "person" .
[ a sp:Select ;
sp:text "# Comment2\nSELECT ?person\nWHERE {\n ?person a ex:Person .\n ?person ex:age ?age .\n FILTER (?age < 22) .\n}"
] .
========================
Select1:
# Comment1
SELECT ?person
WHERE {
?person a ex:Person .
?person ex:age ?age .
FILTER sp:gt(?age, 18) .
}
Select2:
# Comment2
SELECT ?person
WHERE {
?person a ex:Person .
?person ex:age ?age .
FILTER (?age < 22) .
}
关于java - 在文本 SPARQL 语法和 SPIN RDF 词汇之间进行转换 : How to add rdfs:comment and sp:text,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45867102/
我在 Spin 中编写了一个模型。我想检查模型上的一些零担。 例如: ltl L1 {<>[]Working} 在验证窗口中,我选择选项“使用声明”并单击“运行”: ltl L1: <> ([] (W
一旦流程完成,我需要从元素中删除 fa-spin 类。 问题是旋转图标和非旋转图标之间没有过渡。 setTimeout(function() { stopSpinner(); }, 2500);
我是尝试使用 Promela 和 SPIN 的初学者。在开发一些简单的 Promela 规范时,我想使用 printf() 检查程序中变量的值。我已阅读 this man page并且正在尝试运行一个
背景 我正在使用开源off-heap缓存实现,ohc 。 最近,我发现了一个pull request在 github 上建议 replace spin-on-compare-and-set with
我正在尝试使用 SPIN API 运行模板。对于简单的模板,这很有效,但我在使用包含 FILTERs 的模板时遇到了麻烦。 出于验证目的,我在运行模板之前打印模板的主体,但我看到的并不是我期望看到的:
我使用的是 Windows 操作系统,在 Cygwin 中输入:wish -f ispin.tcl 打开 ispin 界面。我打开一个文件 test.pml,其中包含: byte state = 2;
我找到了 angular-spinner这是基于 spin.js ,我想使用它。无论如何,在 angular-spinner 的自述文件 (http://plnkr.co/edit/BGLUYcylb
我需要在我的输入数字字段中向上和向下箭头左侧留出一些空间,我打算在其中默认放置一些符号。但是 -webkit-outer-spin-button 和 -webkit-inner-spin-button
在我的设计中,我有 电话 全局变量和一个方法,根据状态将一些提到的参数作为参数。 我可以通过引用将全局变量作为参数传递吗? This paper在结论部分明确说 "special form of ca
我正在开发一个需要结合 pcl 和 vtk 的 c++ 项目。但是,我在使用 spin 功能更新场景时遇到了问题。我知道 spin 函数在无限循环中调用 spinOnce 来更新pcl visuali
我的 Web 应用程序 (struts2) 查询通常很繁重,需要相当长的时间才能做出响应。 我添加了一些简单的(只是一个 html DIV 和一些 CSS)等待 Action 调用的陀螺。 a whi
是否可以从另一个进程访问一个进程的局部变量的值。 例如在下面的程序中,我想从经理读取 my_id 的值。 proctype user (byte id){ byte my_id = id; }
我一直想知道它们是什么:每次我听到它们时,类似 future 派飞轮的设备的图像都会在我的脑海中跳舞(滚动?)...... 它们是什么? 最佳答案 当您使用常规锁(互斥锁、临界区等)时,操作系统会将您
我制作了登录屏幕,现在我必须做一些后台工作,大约需要 8-10 秒,我制作了带有进度指示器的新窗口(不确定),但它只是弹出并且是静态的(不旋转),我想我'我在线程部分做错了,这里是代码: Task l
我正在尝试在树莓派3上旋转一个容器。该容器具有一个MySQL服务器,当我尝试旋转时会给我带来一些麻烦。 $ docker-compose up > /dev/null & $ Building mys
对于那些喜欢先写代码再写文本的人来说,knitr::spin() 是一个很棒的工具。我想用它来生成几乎没有代码回显但有大量输出和文本注释的文档。但是,每次我关闭回显然后添加一些文本时,spin() 都
有人接触过用这个工具进行模型检查SPIN ,甚至更多model checking的任何信息(并发程序) 最佳答案 是的,SPIN 是一个非常好的模型检查器,但我想知道你想要什么?您只是想听听,是的,我
我正在使用 AllegroGraph 4.4。我有他们关于肯尼迪家谱的样本数据库输入。我从他们关于 SPIN 的教程中复制了一个示例。这里是: (ag.spin:register-spin-funct
我是 SPIN 的新手,我阅读了文档并查阅了一些示例,但我想开始使用它。 我从 http://topquadrant.com 看到了一些工具对于 SPIN,但我已经使用 openrdf-sesame
我正在使用spin.js用于页面上的微调器。有没有办法让我可以在 4 圈后停止旋转并用文本替换旋转。 如有任何帮助,我们将不胜感激! 我的代码如下: var opts = {
我是一名优秀的程序员,十分优秀!