Created
December 3, 2010 14:57
-
-
Save shellac/727062 to your computer and use it in GitHub Desktop.
desc handler for ARQ
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package org.ilrt.researchrevealed.describehandler; | |
import com.hp.hpl.jena.query.Dataset; | |
import com.hp.hpl.jena.rdf.model.Model; | |
import com.hp.hpl.jena.rdf.model.ModelFactory; | |
import com.hp.hpl.jena.rdf.model.RDFNode; | |
import com.hp.hpl.jena.rdf.model.Resource; | |
import com.hp.hpl.jena.sparql.ARQConstants; | |
import com.hp.hpl.jena.sparql.core.Quad; | |
import com.hp.hpl.jena.sparql.core.describe.DescribeHandler; | |
import com.hp.hpl.jena.sparql.core.describe.DescribeHandlerFactory; | |
import com.hp.hpl.jena.sparql.core.describe.DescribeHandlerRegistry; | |
import com.hp.hpl.jena.sparql.util.Context; | |
import com.hp.hpl.jena.util.iterator.ExtendedIterator; | |
import com.hp.hpl.jena.vocabulary.RDFS; | |
import org.slf4j.Logger; | |
import org.slf4j.LoggerFactory; | |
/** | |
* | |
* @author Damian Steer <[email protected]> | |
*/ | |
public class BackwardForwardDescribeFactory implements DescribeHandlerFactory { | |
final static Logger log = LoggerFactory.getLogger(BackwardForwardDescribeFactory.class); | |
static { | |
log.info("Attaching replacement describe handler"); | |
DescribeHandlerRegistry reg = DescribeHandlerRegistry.get(); | |
log.info("Clearing existing describe handlers"); | |
reg.clear(); | |
reg.add(new BackwardForwardDescribeFactory()); | |
log.info("Attached"); | |
} | |
@Override | |
public DescribeHandler create() { | |
return new BackwardForwardDescribe(); | |
} | |
public static class BackwardForwardDescribe implements DescribeHandler { | |
private Dataset dataset; | |
private Model result; | |
private Model defaultModel; | |
private Model unionModel; | |
@Override | |
public void start(Model accumulateResultModel, Context qContext) { | |
this.result = accumulateResultModel; | |
this.dataset = (Dataset) qContext.get(ARQConstants.sysCurrentDataset); | |
this.defaultModel = dataset.getDefaultModel(); | |
this.unionModel = dataset.getNamedModel(Quad.unionGraph.getURI()); | |
} | |
@Override | |
public void describe(Resource resource) { | |
result.add(defaultModel.listStatements(resource, null, (RDFNode) null)); | |
log.info("1. Result size is: {}", result.size()); | |
result.add(defaultModel.listStatements(null, null, resource)); | |
log.info("2. Result size is: {}", result.size()); | |
result.add(unionModel.listStatements(resource, null, (RDFNode) null)); | |
log.info("3. Result size is: {}", result.size()); | |
result.add(unionModel.listStatements(null, null, resource)); | |
log.info("4. Result size is: {}", result.size()); | |
// Gather labels for dangling refs | |
Model labels = ModelFactory.createDefaultModel(); | |
ExtendedIterator<RDFNode> it = result.listObjects().andThen(result.listSubjects()); | |
while (it.hasNext()) { | |
RDFNode node = it.next(); | |
if (node.isLiteral() || resource.equals(node)) continue; | |
labels.add(defaultModel.listStatements((Resource) node, RDFS.label, (RDFNode) null)); | |
labels.add(unionModel.listStatements((Resource) node, RDFS.label, (RDFNode) null)); | |
log.info("5. Labels subsize is: {}", labels.size()); | |
} | |
result.add(labels); | |
} | |
@Override | |
public void finish() { | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment