После анализа файла в модели Jena вы можете выполнять итерацию и фильтрацию с помощью чего-то вроде:
//Property to filter the model
Property geoProperty =
model. createProperty("http://www.w3.org/2003/01/geo/wgs84_pos#",
"geometry");
//Iterator based on a Simple selector
StmtIterator iter =
model.listStatements(new SimpleSelector(null, geoProperty, (RDFNode)null));
//Loop to traverse the statements that match the SimpleSelector
while (iter.hasNext()) {
Statement stmt = iter.nextStatement();
System.out.print(stmt.getSubject().toString());
System.out.print(stmt.getPredicate().toString());
System.out.println(stmt.getObject().toString());
}
SimpleSelector
позволяет вам передавать любой (субъект, предикат, объект) шаблон для сопоставленияутверждения в модели.В вашем случае, если вы заботитесь только о конкретном предикате, тогда первый и третий параметры конструктора равны нулю.
Разрешение фильтрации двух разных свойств
Для более сложной фильтрацииВы можете реализовать метод selects
в интерфейсе SimpleSelector
, как здесь:
Property geoProperty = /* like before */;
Property countryLargestCityProperty =
model. createProperty("http://dbpedia.org/property/",
"countryLargestCity");
SimpleSelector selector = new SimpleSelector(null, null, (RDFNode)null) {
public boolean selects(Statement s)
{ return s.getPredicate().equals(geoProperty) ||
s.getPredicate().equals(countryLargestCityProperty) ;}
}
StmtIterator iter = model.listStatements(selector);
while(it.hasNext()) {
/* same as in the previous example */
}
Редактировать: включая полный пример
Этот код включает полный примерэто работает для меня.
import com.hp.hpl.jena.util.FileManager;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.SimpleSelector;
import com.hp.hpl.jena.rdf.model.Property;
import com.hp.hpl.jena.rdf.model.RDFNode;
import com.hp.hpl.jena.rdf.model.Literal;
import com.hp.hpl.jena.rdf.model.StmtIterator;
import com.hp.hpl.jena.rdf.model.Statement;
public class TestJena {
public static void main(String[] args) {
FileManager fManager = FileManager.get();
fManager.addLocatorURL();
Model model = fManager.loadModel("http://dbpedia.org/data/Ireland.rdf");
Property geoProperty =
model. createProperty("http://www.w3.org/2003/01/geo/wgs84_pos#",
"geometry");
StmtIterator iter =
model.listStatements(new SimpleSelector(null, geoProperty,(RDFNode) null));
//Loop to traverse the statements that match the SimpleSelector
while (iter.hasNext()) {
Statement stmt = iter.nextStatement();
if (stmt.getObject().isLiteral()) {
Literal obj = (Literal) stmt.getObject();
System.out.println("The geometry predicate value is " +
obj.getString());
}
}
}
}
Этот полный пример печатает:
The geometry predicate value is POINT(-7 53)
Примечания по связанным данным
http://dbpedia.org/page/Ireland
- этоHTML-версия ресурса ресурса http://dbpedia.org/resource/Ireland
Чтобы получить RDF, необходимо решить:
http://dbpedia.org/data/Ireland.rdf
или
http://dbpedia.org/resource/Ireland
+ Accept: application/rdfxml
в заголовке HTTP.С curl
это будет что-то вроде:
curl -L -H 'Accept: application/rdf+xml' <a href="http://dbpedia.org/resource/Ireland" rel="nofollow">http://dbpedia.org/resource/Ireland</a>