Mercurial > hg > semantic-sia
view src/org/qmul/eecs/c4dm/sia/SiaDatapointFactory.java @ 68:260eb78f0854
modified to take into account that sia:Datapoints now have sia:vector properties which then have sia:dimVals, rather than sia:Datapoints having their own sia:dimVal properties
author | stevenh |
---|---|
date | Fri, 02 Aug 2013 10:40:42 +0100 |
parents | f2d9567c6591 |
children | affdfe375b41 |
line wrap: on
line source
package org.qmul.eecs.c4dm.sia; import java.util.ArrayList; import java.util.List; import java.util.Vector; import org.qmul.eecs.c4dm.sia.model.Datapoint; import org.qmul.eecs.c4dm.sia.model.DimensionValue; import org.qmul.eecs.c4dm.sia.model.DirectlyFollows; import org.qmul.eecs.c4dm.sia.model.MemberOfOrderedSet; import org.qmul.eecs.c4dm.sia.model.OrderedIndex; import org.qmul.eecs.c4dm.sia.model.OrderedSet; import org.qmul.eecs.c4dm.sia.model.SiaVector; import com.hp.hpl.jena.ontology.OntClass; import com.hp.hpl.jena.ontology.OntModel; import com.hp.hpl.jena.ontology.OntResource; import com.hp.hpl.jena.rdf.model.AnonId; import com.hp.hpl.jena.rdf.model.Property; import com.hp.hpl.jena.rdf.model.RDFNode; import com.hp.hpl.jena.rdf.model.Resource; import com.hp.hpl.jena.rdf.model.Statement; import com.hp.hpl.jena.rdf.model.StmtIterator; import com.hp.hpl.jena.util.iterator.ExtendedIterator; import com.hp.hpl.jena.vocabulary.RDF; public class SiaDatapointFactory { /** * @param ontModel * @return List<Datapoint> */ public static List<Datapoint> create(OntModel ontModel) { List<Datapoint> datapointsList = new ArrayList<Datapoint>(); Datapoint datapoint; OntClass datapointClass = ontModel.getOntClass(Datapoint.RESOURCE_URI); ExtendedIterator<? extends OntResource> datapointIter; try { datapointIter = datapointClass.listInstances(); } catch (NullPointerException npe) { return datapointsList; } // Find all rdf datapoints OntResource datapointIndividual; while (datapointIter.hasNext()) { datapointIndividual = datapointIter.next(); datapoint = new Datapoint(); datapoint.setResource(datapointIndividual); Property vectorProperty = ontModel.getOntProperty(SiaVector.PROPERTY_URI); Statement vector = datapointIndividual.getProperty(vectorProperty); Vector<DimensionValue> dimValsList = SiaDimensionValueFactory.getDimensionValuesForResource( ontModel, vector.getResource()); datapoint.setDimensionValues(dimValsList); datapointsList.add(datapoint); } return datapointsList; } /** * @param ontModel * @param datapoints */ public static void assertOrder(OntModel ontModel, List<Datapoint> datapoints) { Resource bnode = ontModel.createResource(AnonId.create()); Resource siaOrderedSet = ontModel.createResource(OrderedSet.RESOURCE_URI); ontModel.add(bnode, RDF.type, siaOrderedSet); int numDatapoints = datapoints.size(); Datapoint datapoint; Datapoint nextDatapoint; Property memberOfOrderedSetProperty; Property directlyFollowsProperty; Property orderedIndexProperty; for (int orderedIndex = 0; orderedIndex < numDatapoints; orderedIndex++) { // Assert <bnode, rdf:type, sia:OrderedSet> datapoint = datapoints.get(orderedIndex); datapoint.setOrderedIndex(orderedIndex + 1); memberOfOrderedSetProperty = ontModel.getProperty(MemberOfOrderedSet.PROPERTY_URI); ontModel.add(datapoint.getResource(), memberOfOrderedSetProperty, bnode); if (orderedIndex < numDatapoints - 1) { // Assert <nextDatapoint, sia:directlyFollows, currentDatapoint> nextDatapoint = datapoints.get(orderedIndex + 1); directlyFollowsProperty = ontModel.getProperty(DirectlyFollows.PROPERTY_URI); ontModel.add(nextDatapoint.getResource(), directlyFollowsProperty, datapoint.getResource()); } // Assert <currentDatapoint, sia:orderedIndex, orderedIndex> orderedIndexProperty = ontModel.getProperty(OrderedIndex.PROPERTY_URI); ontModel.addLiteral(datapoint.getResource(), orderedIndexProperty, orderedIndex); } } }