我想验证本体并在出现任何错误时抛出错误.
我必须做的最多验证看起来像这样:我有一个这样的类:
<owl:Class rdf:about="&schema;ExampleClass">
<rdfs:subClassOf rdf:resource="&schema;SuperClass"/>
<rdfs:subClassOf>
<owl:Restriction>
<owl:onProperty rdf:resource="&schema;myProperty"/>
<owl:onClass rdf:resource="&schema;OtherClass"/>
<owl:qualifiedCardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:qualifiedCardinality>
</owl:Restriction>
</rdfs:subClassOf>
</owl:Class>
Run Code Online (Sandbox Code Playgroud)
(有趣的部分是第二个subClassOf.)在Protege中这意味着ExampleClass is subClass of myProperty exactly 1 OtherClass.
所以我想验证只有一个myProperty值:一个类型为OtherClass的个体.
是否可以验证这样的规则?如果有一个规则可以为所有类使用此建模执行此操作(并且可能还至少为1,正好为2,...),那将是完美的.
另一个问题是:是否有一个现成的封闭世界推理器正在为我做这个?
我有一个严重的问题,让任何推理器运行起来.此外,文档中的示例:https://jena.apache.org/documentation/inference/ 在此处不起作用.我将示例转移到单元测试中,以便可以更容易地再现问题.
推理仅限于某些环境,如空间JDK等,或者我得到了错误?
谢谢
这里的示例代码(作为java单元测试):
import static org.junit.Assert.assertNotNull;
import java.io.PrintWriter;
import java.util.Iterator;
import org.junit.Before;
import org.junit.Test;
import com.hp.hpl.jena.rdf.model.InfModel;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.Property;
import com.hp.hpl.jena.rdf.model.Resource;
import com.hp.hpl.jena.rdf.model.Statement;
import com.hp.hpl.jena.rdf.model.StmtIterator;
import com.hp.hpl.jena.reasoner.Derivation;
import com.hp.hpl.jena.reasoner.rulesys.GenericRuleReasoner;
import com.hp.hpl.jena.reasoner.rulesys.Rule;
import com.hp.hpl.jena.vocabulary.RDFS;
public class ReasonerTest {
String NS = "urn:x-hp-jena:eg/";
// Build a trivial example data set
Model model = ModelFactory.createDefaultModel();
InfModel inf;
Resource A = model.createResource(NS + "A");
Resource B = model.createResource(NS + "B");
Resource C = model.createResource(NS + "C"); …Run Code Online (Sandbox Code Playgroud) 我可以知道Apahe JENA是否在Java中支持OWL 2语法?它确实提到在文档(https://jena.apache.org/documentation/ontology/)中,它仅提供了有限的基数限制。我想向专家们证实这一点。
我有一个问答游戏,学生必须解决化学,英语,物理三个类别的问题.学生将在这些类别中获得积分,例如student1在化学中有50分,在英语中有70分,在物理上有65分.
我可以弄清楚学生在哪个类别中得分最高.但是,我怎样才能获得哪一个是哪个学生拥有的最高分?我的意思是如果一个学生用英语得到90分(没有其他学生得到这个分数),那么我们怎么能算出这个英语的最高分为90分.
记住:英语分数,化学分数,物理分数是存储在rdf文件中的数据属性.如果可以使用Jena规则或SPARQL或普通Java代码,我想要.