2014-06-18 6 views
0

저는 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"의 결과를 쓰기 (및뿐만 아니라 출력으로) 할 수 있습니까?

감사합니다.

답변

2

역 체인 추론 규칙이 모델 (이 경우, infModelRULE)과 연결될 때 작동하는 방식은 무언가가 해당 모델을 읽으려고 시도 할 때 유추 된 3 배가 될 수 있다는 것입니다.

예를 들어, infModelRule.contains(...)의 트리플이 유추 된 것으로 추측되고 결과물에 표시되면 true이 표시됩니다. 모델에 결과를 '쓰기'위한 별도의 단계가 필요하지 않습니다.

당신은 디스크에 대신 그냥 표준 (psudocode)에 모델을 작성하는 경우 :

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

... 당신은 거기뿐만 아니라 추론했다 트리플을 볼 수 있습니다. 나중에 추론자가 첨부되지 않은 모델로 파일을 읽는다면, 세배는 남을 것입니다.

+0

작성한대로 노력했습니다. 작동하지만 내 규칙의 결과는 "annotation"으로 기록되며 "data_property"로 기록되지 않습니다. "data_property"로 가져오고 싶습니다. 이유를 알고 계십니까? – user3563844

+0

결과 모델의'# anni_persona' 속성을 설명하는 트리플이 있습니까? 'owl : ObjectProperty' 또는'owl : DatatypeProperty'로 명시 적으로 표시되어 있지 않으면 Protege와 같은 도구는 대신 주석 유형 속성이라고 가정하는 경향이 있습니다. –

+0

작성된 부동산의 해석에 대한 추가 지원이 필요한 경우 최소한의 예 (입력 데이터, 출력 데이터, 규칙, 사용중인 모든 스키마 등)를 작성하여 새 질문으로 게시 할 수 있습니다. 다른 사람들도 도움을 줄 수 있음). 이 질문과는 별개의 문제인 것처럼 보입니다. –