似乎 OWLRDFConsumer 通常用于将 RDF 解析器与 OWL 感知处理器连接。以下代码似乎可以工作,但正如我在注释中指出的那样,有几个地方我需要一个参数并放入唯一可用的东西。
以下代码:创建本体;声明两个命名个体,Tom和Anna;声明一个对象属性likes和一个数据属性age。一旦这些被声明,我们打印本体以确保它符合我们的期望。然后创建一个OWLRDFConsumer。消费者构造函数需要一个本体、一个
AnonymousNodeChecker和一个
OWLOntologyLoaderConfiguration。对于配置,我只使用了一个通过无参构造函数创建的配置,我认为这是可以的。对于节点检查器,唯一方便的实现者是TurtleParser,因此我创建了一个TurtleParser,将
null
作为Reader传递。我认为这将是可以的,因为解析器不会被调用来读取任何内容。然后使用消费者的
handle(IRI,IRI,IRI)和
handle(IRI,IRI,OWLLiteral)方法逐个处理三元组。我们添加这些三元组。
:Tom :likes :Anna
:Tom :age 35
然后再次打印本体以确保已添加断言。由于您已经获取了RDFTriples,因此应该能够提取出handle()需要的参数。在处理三元组之前,本体包含:
<NamedIndividual rdf:about="http://example.org/Tom"/>
然后是这个:
<NamedIndividual rdf:about="http://example.org/Tom">
<example:age rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">35</example:age>
<example:likes rdf:resource="http://example.org/Anna"/>
</NamedIndividual>
这里是代码:
import java.io.Reader;
import org.coode.owlapi.rdfxml.parser.OWLRDFConsumer;
import org.semanticweb.owlapi.apibinding.OWLManager;
import org.semanticweb.owlapi.model.IRI;
import org.semanticweb.owlapi.model.OWLDataFactory;
import org.semanticweb.owlapi.model.OWLDataProperty;
import org.semanticweb.owlapi.model.OWLEntity;
import org.semanticweb.owlapi.model.OWLNamedIndividual;
import org.semanticweb.owlapi.model.OWLObjectProperty;
import org.semanticweb.owlapi.model.OWLOntology;
import org.semanticweb.owlapi.model.OWLOntologyCreationException;
import org.semanticweb.owlapi.model.OWLOntologyLoaderConfiguration;
import org.semanticweb.owlapi.model.OWLOntologyManager;
import org.semanticweb.owlapi.model.OWLOntologyStorageException;
import uk.ac.manchester.cs.owl.owlapi.turtle.parser.TurtleParser;
public class ExampleOWLRDFConsumer {
public static void main(String[] args) throws OWLOntologyCreationException, OWLOntologyStorageException {
OWLOntologyManager manager = OWLManager.createOWLOntologyManager();
OWLDataFactory factory = manager.getOWLDataFactory();
OWLOntology ontology = manager.createOntology();
String ns = "http://example.org/";
OWLNamedIndividual tom = factory.getOWLNamedIndividual( IRI.create( ns+"Tom" ));
OWLObjectProperty likes = factory.getOWLObjectProperty( IRI.create( ns+"likes" ));
OWLDataProperty age = factory.getOWLDataProperty( IRI.create( ns+"age" ));
OWLNamedIndividual anna = factory.getOWLNamedIndividual( IRI.create( ns+"Anna" ));
for ( OWLEntity entity : new OWLEntity[] { tom, likes, age, anna } ) {
manager.addAxiom( ontology, factory.getOWLDeclarationAxiom( entity ));
}
manager.saveOntology( ontology, System.out );
OWLRDFConsumer consumer = new OWLRDFConsumer( ontology, new TurtleParser((Reader) null), new OWLOntologyLoaderConfiguration() );
consumer.handle( tom.getIRI(), likes.getIRI(), anna.getIRI() );
consumer.handle( tom.getIRI(), age.getIRI(), factory.getOWLLiteral( 35 ));
manager.saveOntology( ontology, System.out );
}
}
RDFTriple
具有RDFResource
作为主语和谓语,以及RDFNode
作为宾语。如果您使用getSubject
获取RDFResource
,然后使用getResource
获取IRI
,然后在其上使用toString
,我认为您将获得IRI文本(而不是toQuotedString
,它返回由尖括号包围的文本)。 - Joshua Taylor