public static void main(String[] args) {
OntModel model = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
String fileName = "C:/Users/Felipe/Desktop/workspace/JenaTutorial/ontrdf.rdf";
try {
InputStream inputStream = new FileInputStream(fileName);
model.read(inputStream, "RDF/XML");
inputStream.close();
} catch (Exception e) {
System.out.println(e.getClass());
System.out.println(e.getMessage());
}
ExtendedIterator<OntClass> it = model.listClasses();
while (itI.hasNext()) {
OntClass ontclass = it.next();
System.out.println(ontclass.getLocalName());
}
}
Run Code Online (Sandbox Code Playgroud)
我想仅列出我在本体上插入的真正的六个类(年份,出版商,语言,国家,书籍和作者).我不知道前六个意味着什么后面的那些线.有人知道如何过滤输出吗?
控制台显示:
Year
Publisher
Language
Country
Book
Author
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
Exception in thread "main" java.util.NoSuchElementException
at com.hp.hpl.jena.util.iterator.FilterIterator.next(FilterIterator.java:92)
at tutorial.HelloRDFWorld.main(HelloRDFWorld.java:35)
Run Code Online (Sandbox Code Playgroud)
如果您更新代码以打印类而不是其本地名称,您将获得更有用的结果:
http://www.semanticweb.org/ikop/ontologies/untitled-ontology-46#Year
http://www.semanticweb.org/ikop/ontologies/untitled-ontology-46#Publisher
http://www.semanticweb.org/ikop/ontologies/untitled-ontology-46#Language
http://www.semanticweb.org/ikop/ontologies/untitled-ontology-46#Country
http://www.semanticweb.org/ikop/ontologies/untitled-ontology-46#Book
http://www.semanticweb.org/ikop/ontologies/untitled-ontology-46#Author
560855f:146ffa04e87:-7fe2
560855f:146ffa04e87:-7ff9
560855f:146ffa04e87:-7ff7
…
Run Code Online (Sandbox Code Playgroud)
末尾的那些值(截断的)是空白节点标识符.本体中有许多匿名限制类.例如,
<Class rdf:about="http://www.semanticweb.org/ikop/ontologies/untitled-ontology-46#Author">
<rdfs:subClassOf>
<Restriction>
<onProperty rdf:resource="http://www.semanticweb.org/ikop/ontologies/untitled-ontology-46#authorHasAuthorshipOfBook"/>
<someValuesFrom rdf:resource="http://www.semanticweb.org/ikop/ontologies/untitled-ontology-46#Book"/>
</Restriction>
</rdfs:subClassOf>
…
Run Code Online (Sandbox Code Playgroud)
这是公理
作者subClassOf(authorHasAuthorshipOfBook一些书)
要认识到的重要一点是,这(authorHasAuthorshipOfBook some Book)是一个阶级.这是一类具有书籍作者身份的东西.它可以包含实例,超类,子类等,就像任何其他类一样.因此,它出现在listClasses中.如果只打印URI资源,则可以获得所需的结果:
while ( it.hasNext() ) {
OntClass klass = it.next();
if ( klass.isURIResource() ) {
System.out.println( klass );
}
}
Run Code Online (Sandbox Code Playgroud)
当然,Jena的扩展迭代器允许你过滤,所以你实际上可以保持相同的迭代代码,但使用稍微不同的迭代器:
import com.hp.hpl.jena.ontology.OntClass;
import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.ontology.OntModelSpec;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.util.iterator.ExtendedIterator;
import com.hp.hpl.jena.util.iterator.Filter;
public class ListOntClassesExample {
public static void main(String[] args) {
OntModel model = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM );
model.read( "http://pastebin.com/raw.php?i=MaeEbaux" );
ExtendedIterator<OntClass> it = model.listClasses().filterKeep( new Filter<OntClass>() {
@Override
public boolean accept(OntClass o) {
return o.isURIResource();
}
});
while ( it.hasNext() ) {
OntClass klass = it.next();
System.out.println( klass );
}
}
}
Run Code Online (Sandbox Code Playgroud)
http://www.semanticweb.org/ikop/ontologies/untitled-ontology-46#Year
http://www.semanticweb.org/ikop/ontologies/untitled-ontology-46#Publisher
http://www.semanticweb.org/ikop/ontologies/untitled-ontology-46#Language
http://www.semanticweb.org/ikop/ontologies/untitled-ontology-46#Country
http://www.semanticweb.org/ikop/ontologies/untitled-ontology-46#Book
http://www.semanticweb.org/ikop/ontologies/untitled-ontology-46#Author
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
577 次 |
| 最近记录: |