Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
add the existing namespace prefix mappings to the sparql update by de…
…fault
  • Loading branch information
cbeer committed Jun 20, 2013
1 parent f1013f2 commit 1af2cd2
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 6 deletions.
Expand Up @@ -20,7 +20,8 @@

<form id="action_sparql_update">
<h3>Update Properties</h3>
<textarea class="span3" rows="5" id="sparql_update_query" name="query">
<textarea class="span3" rows="10" id="sparql_update_query" name="query">
$helpers.getPrefixPreamble($model)
DELETE { }
INSERT { }
WHERE { }
Expand Down
Expand Up @@ -5,6 +5,7 @@
import com.google.common.collect.Ordering;
import com.hp.hpl.jena.graph.Node;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.Property;
import com.hp.hpl.jena.rdf.model.Resource;
import com.hp.hpl.jena.shared.PrefixMapping;
import com.hp.hpl.jena.sparql.core.DatasetGraph;
Expand Down Expand Up @@ -35,20 +36,45 @@ public static ViewHelpers getInstance() {
return instance;
}

/**
* Return an iterator of Quads that match the given subject and predicate
* @param dataset
* @param subject
* @param predicate
* @return
*/
public Iterator<Quad> getObjects(final DatasetGraph dataset, final Node subject, final Resource predicate) {
return dataset.find(Node.ANY, subject, predicate.asNode(), Node.ANY);
}

/**
* Get the canonical title of a subject from the graph
* @param dataset
* @param subject
* @return
*/
public String getObjectTitle(final DatasetGraph dataset, final Node subject) {
final Iterator<Quad> objects = getObjects(dataset, subject, RdfLexicon.DC_TITLE);

if (objects.hasNext()) {
return objects.next().getObject().getLiteralValue().toString();
} else {
return subject.getURI();
Property[] properties = new Property[] { RdfLexicon.RDFS_LABEL, RdfLexicon.DC_TITLE };

for (Property p : properties) {
final Iterator<Quad> objects = getObjects(dataset, subject, p);

if (objects.hasNext()) {
return objects.next().getObject().getLiteralValue().toString();
}
}

return subject.getURI();
}

/**
* Get the string version of the object that matches the given subject and predicate
* @param dataset
* @param subject
* @param predicate
* @return
*/
public String getObjectsAsString(final DatasetGraph dataset, final Node subject, final Resource predicate) {
final Iterator<Quad> iterator = getObjects(dataset, subject, predicate);

Expand All @@ -72,6 +98,12 @@ public String getObjectsAsString(final DatasetGraph dataset, final Node subject,
}
}

/**
* Generate url -> local name breadcrumbs for a given node's tree
* @param uriInfo
* @param subject
* @return
*/
public Map<String, String> getNodeBreadcrumbs(final UriInfo uriInfo, final Node subject) {
final String topic = subject.getURI();

Expand Down Expand Up @@ -116,10 +148,22 @@ public Map<String, String> getNodeBreadcrumbs(final UriInfo uriInfo, final Node

}

/**
* Sort a Iterator of Quads alphabetically by its subject, predicate, and object
* @param model
* @param it
* @return
*/
public List<Quad> getSortedTriples(final Model model, final Iterator<Quad> it) {
return Ordering.from(new QuadOrdering(model)).sortedCopy(ImmutableList.copyOf(it));
}

/**
* Get the namespace prefix (or the namespace URI itself, if no prefix is available) from a prefix mapping
* @param mapping
* @param namespace
* @return
*/
public String getNamespacePrefix(final PrefixMapping mapping, final String namespace) {
final String nsURIPrefix = mapping.getNsURIPrefix(namespace);

Expand All @@ -130,4 +174,22 @@ public String getNamespacePrefix(final PrefixMapping mapping, final String names
}
}

/**
* Get a prefix preamble appropriate for a SPARQL-UPDATE query from a prefix mapping object
* @param mapping
* @return
*/
public String getPrefixPreamble(final PrefixMapping mapping) {
StringBuilder sb = new StringBuilder();

final Map<String, String> nsPrefixMap = mapping.getNsPrefixMap();

for (Map.Entry<String, String> entry : nsPrefixMap.entrySet()) {
sb.append("PREFIX " + entry.getKey() + ": <" + entry.getValue() + ">\n");
}

sb.append("\n");
return sb.toString();
}

}
Expand Up @@ -118,4 +118,16 @@ public void shouldSortTriplesForDisplay() {
sortedTriples.get(4).matches(Node.ANY, resourceB.asNode(), propertyC.asNode(), literalA.asNode());

}

@Test
public void shouldConvertPrefixMappingToSparqlUpdatePrefixPreamble() {

final Model model = ModelFactory.createDefaultModel();

model.setNsPrefix("prefix", "namespace");

final String prefixPreamble = testObj.getPrefixPreamble(model);

assertEquals("PREFIX prefix: <namespace>\n\n", prefixPreamble);
}
}

0 comments on commit 1af2cd2

Please sign in to comment.