Я использую аргумент Pellet с Йеной. Я вставил некоторые данные в хранилище TDB. У меня также есть онтология схемы в файле и правила Йены. Я наложил аргумент Generic rule и Pellet. Тем не менее, я получаю непоследовательную ошибку онтологии из-за литералов, но вставленные данные имеют одинаковый тип данных с определением схемы. Мои данные:Гранулы, рассуждающие над XML-литералами
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:resource="http://www.cs.kaist.ac.kr/medication/resource#"
xmlns:time="http://www.w3.org/2006/time#"
xmlns:medication="http://www.cs.kaist.ac.kr/medication/ontology#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#" >
.......
<rdf:Description rdf:about="http://www.cs.kaist.ac.kr/medication/resource#TimeDesc300">
<rdf:type rdf:resource="http://www.w3.org/2006/time#TimeDescription"/>
<time:hour rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">3</time:hour>
<time:year rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">2014</time:year>
<time:month rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">8</time:month>
<time:day rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">26</time:day>
<time:minute rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">0</time:minute>
<time:second rdf:datatype="http://www.w3.org/2001/XMLSchema#decimal">0</time:second>
</rdf:Description>
.......
рассуждающий:
.......
TDBConnection connection = new TDBConnection();
connection.getDataset().begin(ReadWrite.WRITE);
Model dataTDB = connection.getDataset().getDefaultModel();
/*OntModel ontology = ModelFactory.createOntologyModel();
ontology.read("data//medtimeOnto.owl");*/
Model ontMedical = FileManager.get().loadModel("data//medtimeOnto.owl");
ontMedical.add(FileManager.get().loadModel("data//myOwnTimeFinal.owl"));
OntModel ontology = ModelFactory.createOntologyModel(PelletReasonerFactory.THE_SPEC,
ontMedical);
//Reasoner owlReasoner = (Reasoner) ReasonerRegistry.getOWLReasoner();
//InfModel owlInfModel = ModelFactory.createInfModel(owlReasoner, ontology, dataTDB);
List <Rule> rules= Rule.rulesFromURL("data//testrule.rules");
GenericRuleReasoner ruleReasoner = new GenericRuleReasoner(rules);
InfModel ruleInfModel = ModelFactory.createInfModel(ruleReasoner, ontology,dataTDB);
Reasoner pelletReasoner = PelletReasonerFactory.theInstance().create();
InfModel pelletInfModel = ModelFactory.createInfModel(pelletReasoner, ruleInfModel);
ExtendedIterator<Statement> stmts = pelletInfModel.listStatements().
filterDrop(new Filter<Statement>() {
public boolean accept(Statement o) {
return ontology.add(dataTDB).contains(o);
}
});
Model deductions = ModelFactory.createDefaultModel().add(new StmtIteratorImpl(stmts));
deductions.write(System.out);
Ошибка подвожу:
............
Realizing finished in 00:00
Exception in thread "main" org.mindswap.pellet.exceptions.InconsistentOntologyException:
Cannot do reasoning with inconsistent ontologies!
Reason for inconsistency: Literal value "2014"^^integer does not belong to datatype integer
at org.mindswap.pellet.KnowledgeBase.ensureConsistency(KnowledgeBase.java:2076)
at org.mindswap.pellet.KnowledgeBase.isSameAs(KnowledgeBase.java:2973)
at rg.mindswap.pellet.jena.graph.query.GraphQueryHandler$94.contains
(GraphQueryHandler.java:1457)
at org.mindswap.pellet.jena.graph.query.GraphQueryHandler.containsTriple
(GraphQueryHandler.java:1554)
at org.mindswap.pellet.jena.PelletInfGraph.containsTriple(PelletInfGraph.java:472)
at org.mindswap.pellet.jena.PelletInfGraph.graphBaseContains(PelletInfGraph.java:319)
at com.hp.hpl.jena.graph.impl.GraphBase.contains(GraphBase.java:301)
at com.hp.hpl.jena.rdf.model.impl.ModelCom.contains(ModelCom.java:1207)
at com.kaist.medserver.MyReasoner$1.accept(MyReasoner.java:63)
at com.kaist.medserver.MyReasoner$1.accept(MyReasoner.java:1)
at com.hp.hpl.jena.util.iterator.FilterDropIterator.accept(FilterDropIterator.java:33)
at com.hp.hpl.jena.util.iterator.FilterIterator.hasNext(FilterIterator.java:55)
at com.hp.hpl.jena.util.iterator.WrappedIterator.hasNext(WrappedIterator.java:90)
at com.hp.hpl.jena.util.iterator.Map1Iterator.hasNext(Map1Iterator.java:48)
at com.hp.hpl.jena.util.IteratorCollection.iteratorToList(IteratorCollection.java:63)
at com.hp.hpl.jena.graph.GraphUtil.add(GraphUtil.java:165)
at com.hp.hpl.jena.rdf.model.impl.ModelCom.add(ModelCom.java:197)
at com.kaist.medserver.MyReasoner.main(MyReasoner.java:66)
Первоначально я использовал gYear, gMonth и Gday типы данных. Я вставил данные, используя createTypedLiteral (String, RDFDatatype), но этот метод создает все как целое, хотя я использовал XSDDatatype.XSDgYear, XSDgMonth и XSDgDay. Итак, я изменил свойства схемы на целое число, но проблема все же не исчезла. – alem