java - 如何将规则的结果写入模型(在耶拿)?

标签 java jena ontology protege jena-rules

我正在开发一个项目,需要使用 Jena freamwork 创建一些规则。

我已经创建了规则,它们按其应有的方式工作。我可以在屏幕上看到输出,但我想做的是将结果存储到我拥有的本体模型中。

我有这个代码:

@prefix ex: <http://www.semanticweb.org/prova_rules_M#> . 
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . 
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@include <OWL>
[pippo:
(?p http://www.semanticweb.org/prova_rules_M#anni_persona ?x)
         <- 
         (?p rdf:type ex:Persona)
         (?p http://www.semanticweb.org/prova_rules_M/persona#data_nascita ?c)
         myDiffDateYear(?c,"2014-06-18T00:00:00.0"^^xsd:dateTime,?x)
]

在此示例中,我使用了之前创建的自定义内置程序。它返回两个日期之间相差的年数。通过以下代码,我可以在屏幕上看到输出:

String percorsoFile ="./prova_rules_M_rdf.owl";
String ruleFile= "./prova_rules_M_rdf_7_diffDate.txt";

Model rawModel = ModelFactory.createDefaultModel();

//create a resource (empty model)
Resource configuration = rawModel.createResource();

// set engine mode
configuration.addProperty(ReasonerVocabulary.PROPruleMode, "hybrid");
// set the rules file
configuration.addProperty(ReasonerVocabulary.PROPruleSet, ruleFile);

List<Rule> rules = Rule.rulesFromURL(ruleFile);

GenericRuleReasoner reasonerRULE = (GenericRuleReasoner) GenericRuleReasonerFactory.theInstance().create(configuration);
reasonerRULE.setRules(rules);

Model modelRULE= FileManager.get().loadModel(percorsoFile);
//create the inference model
InfModel infModelRULE = ModelFactory.createInfModel(reasonerRULE, modelRULE);
//force starting the rule execution
infModelRULE.prepare();

//write down the result in RDFXML form
infModelRULE.write(System.out);

如何在模型中写入数据属性“anni_persona”的结果(而不仅仅是作为输出)?

谢谢。

最佳答案

向后链接推理规则与模型(在本例中为您的 infModelRULE)关联时的工作方式是,当尝试读取该模型时,任何推断的三元组都将可用.

例如,如果您询问 infModelRule.contains(...) 是否是一个您知道已推断出并在输出中看到的三元组,那么您将得到 true 结果。您的模型不需要单独的步骤来“写入”结果。

如果将模型写入磁盘而不只是标准输出(psudocode):

try( final FileOutputStream out = new FileOutputStream(new File("blah.rdf")) ){
   infModelRule.write(out);
} 

...然后您也会看到在那里推断出的三元组。如果您稍后将该文件读入模型而不附加推理器,则三元组将保留。

关于java - 如何将规则的结果写入模型(在耶拿)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24288787/

相关文章:

java - 配置失败: @BeforeClass setUp org.mockito.exceptions.base.MockitoException:无法初始化@Spy注释字段 'allRequestParams'

mysql - 耶拿与外部数据库的连接

xml - <owl :Ontology rdf:about ="xml:base"/> in an ontology mean? 是什么

java - Spring Boot 应用程序在幕后如何与 mongodb 及其文档连接

c# - 从java到c#的base64编码和解码问题

mysql - 线程 "main"java.lang.NoClassDefFoundError : sdb/sdbconfig 中的异常

java - 如何从 sparql 结果中提取 dataproperty 值?

java - Jena 模型中 RDF 资源的 URI

perl - 是否有一种优雅的方式来存储本体图和与节点关联的定义/数据?

java - 按下 '.' 时按 Tab 键切换到 Eclipse JFace 对话框中的下一个字段