2012-10-10 57 views
2

我想從RDF/XML文檔中提取所有URI。在Jena Library中將RDF/XML轉換爲模型類,然後爲每個語句提取每個主題,謂詞和對象的URI(非null)將對我有用?通過Jena Library從RDF/XML文檔中提取URI

Model read = ModelFactory.createDefaultModel().read(my_url); 
    StmtIterator si; 
    si = read.listStatements(); 

其中URL是RDF/XML Web文檔..

回答

2

隨着Javadoc說,listStatements()將列出所有報表 - 即三倍 - 在模型中。

如果你想列出所有的的URI,你需要考慮它們在RDF模型中發生的位置。你可能會或可能不想要所有這些。對於給定的三重,T,由一個主體,謂語和賓語的:

  • T的受試者將有一個URI,除非是其一個匿名資源(B節點)
  • T的謂詞將有一個URI
  • T的對象將具有一個URI,如果它是一個資源不是文本,並且如果它不是一個B節點

所以(未測試的代碼):

Set<String> uris = new HashSet<String>(); 
for (StmtIterator i = model.listStatements(); i.hasNext();) { 
    Statement s = i.next(); 
    if (!s.getSubject().isAnon()) { 
     uris.add(s.getSubject().getURI()); 
    } 
    uris.add(s.getPredicate().getURI()); 
    if (s.getObject().isResource() && !s.getResource().isAnon()) { 
     uris.add(s.getResource().getURI()); 
    } 
}