@Override public CompletionStage<Void> add(final IRI id, final Dataset dataset) { return runAsync(() -> { final IRI graphName = rdf.createIRI(id.getIRIString() + "?ext=audit"); try (final Dataset data = rdf.createDataset()) { dataset.getGraph(PreferAudit).ifPresent(g -> g.stream().forEach(t -> data.add(graphName, t.getSubject(), t.getPredicate(), t.getObject()))); executeWrite(rdfConnection, () -> rdfConnection.loadDataset(asJenaDataset(data))); } catch (final Exception ex) { throw new RuntimeTrellisException("Error storing audit dataset for " + id, ex); } }); }
@Test public void testBaseIRIliteral() { final Literal l = jenaRdf.createLiteral("a literal"); assertEquals(l, TriplestoreUtils.getBaseIRI(l), "Incorrect literal value!"); } }
@Test public void testNodeConversion() { final Resource s = createResource("http://example.com/Resource"); final Property p = createProperty("http://example.com/prop"); final Resource o = createResource("http://example.com/Other"); assertFalse(TriplestoreUtils.nodesToTriple(null, null, null).isPresent(), "null nodes yield valid triple!"); assertFalse(TriplestoreUtils.nodesToTriple(s, null, null).isPresent(), "null node results in a valid triple!"); assertFalse(TriplestoreUtils.nodesToTriple(null, p, null).isPresent(), "null node results in a valid triple!"); assertFalse(TriplestoreUtils.nodesToTriple(null, null, o).isPresent(), "null node results in a valid triple!"); assertFalse(TriplestoreUtils.nodesToTriple(s, p, null).isPresent(), "null node results in a valid triple!"); assertFalse(TriplestoreUtils.nodesToTriple(s, null, o).isPresent(), "null node results in a valid triple!"); assertFalse(TriplestoreUtils.nodesToTriple(null, p, o).isPresent(), "null node results in a valid triple!"); assertTrue(TriplestoreUtils.nodesToTriple(s, p, o).isPresent(), "Nodes not converted to triple!"); }
/** * This code is equivalent to the SPARQL query below. * * <p><pre><code> * SELECT ?subject ?predicate ?object * WHERE { GRAPH fromGraphName { ?subject ?predicate ?object } } * </code></pre> */ private Stream<Quad> fetchAllFromGraph(final String fromGraphName, final IRI toGraphName) { final Query q = new Query(); q.setQuerySelectType(); q.addResultVar(SUBJECT); q.addResultVar(PREDICATE); q.addResultVar(OBJECT); final ElementPathBlock epb = new ElementPathBlock(); epb.addTriple(create(SUBJECT, PREDICATE, OBJECT)); final ElementGroup elg = new ElementGroup(); elg.addElement(new ElementNamedGraph(createURI(fromGraphName), epb)); q.setQueryPattern(elg); final Stream.Builder<Quad> builder = builder(); rdfConnection.querySelect(q, qs -> builder.accept(rdf.createQuad(toGraphName, getSubject(qs), getPredicate(qs), getObject(qs)))); return builder.build(); }
final RDFNode p = qs.get("binaryPredicate"); final RDFNode o = qs.get("binaryObject"); nodesToTriple(s, p, o).ifPresent(t -> data.put(t.getPredicate(), t.getObject())); data.put(getPredicate(qs), getObject(qs)); });
getPredicate(qs), getObject(qs)))); return builder.build();
/** * This code is equivalent to the SPARQL query below. * * <p><pre><code> * SELECT ?object * WHERE { * GRAPH trellis:PreferServerManaged { ?object dc:isPartOf IDENTIFIER } * } * </code></pre> */ private Stream<Quad> fetchContainmentQuads() { if (getInteractionModel().getIRIString().endsWith("Container")) { final Query q = new Query(); q.setQuerySelectType(); q.addResultVar(OBJECT); final ElementPathBlock epb = new ElementPathBlock(); epb.addTriple(create(OBJECT, rdf.asJenaNode(DC.isPartOf), rdf.asJenaNode(identifier))); final ElementNamedGraph ng = new ElementNamedGraph(rdf.asJenaNode(Trellis.PreferServerManaged), epb); final ElementGroup elg = new ElementGroup(); elg.addElement(ng); q.setQueryPattern(elg); final Stream.Builder<Quad> builder = builder(); rdfConnection.querySelect(q, qs -> builder.accept(rdf.createQuad(LDP.PreferContainment, identifier, LDP.contains, getObject(qs)))); return builder.build(); } return Stream.empty(); }
/** * This code is equivalent to the SPARQL query below. * * <p><pre><code> * SELECT ?subject ?predicate ?object * WHERE { GRAPH fromGraphName { ?subject ?predicate ?object } } * </code></pre> */ private Stream<Quad> fetchAllFromGraph(final String fromGraphName, final IRI toGraphName) { final Query q = new Query(); q.setQuerySelectType(); q.addResultVar(SUBJECT); q.addResultVar(PREDICATE); q.addResultVar(OBJECT); final ElementPathBlock epb = new ElementPathBlock(); epb.addTriple(create(SUBJECT, PREDICATE, OBJECT)); final ElementGroup elg = new ElementGroup(); elg.addElement(new ElementNamedGraph(createURI(fromGraphName), epb)); q.setQueryPattern(elg); final Stream.Builder<Quad> builder = builder(); rdfConnection.querySelect(q, qs -> builder.accept(rdf.createQuad(toGraphName, getSubject(qs), getPredicate(qs), getObject(qs)))); return builder.build(); }
final RDFNode p = qs.get("binaryPredicate"); final RDFNode o = qs.get("binaryObject"); nodesToTriple(s, p, o).ifPresent(t -> data.put(t.getPredicate(), t.getObject())); data.put(getPredicate(qs), getObject(qs)); });
getPredicate(qs), getObject(qs)))); return builder.build();
/** * This code is equivalent to the SPARQL query below. * * <p><pre><code> * SELECT ?object * WHERE { * GRAPH trellis:PreferServerManaged { ?object dc:isPartOf IDENTIFIER } * } * </code></pre> */ private Stream<Quad> fetchContainmentQuads() { if (getInteractionModel().getIRIString().endsWith("Container")) { final Query q = new Query(); q.setQuerySelectType(); q.addResultVar(OBJECT); final ElementPathBlock epb = new ElementPathBlock(); epb.addTriple(create(OBJECT, rdf.asJenaNode(DC.isPartOf), rdf.asJenaNode(identifier))); final ElementNamedGraph ng = new ElementNamedGraph(rdf.asJenaNode(Trellis.PreferServerManaged), epb); final ElementGroup elg = new ElementGroup(); elg.addElement(ng); q.setQueryPattern(elg); final Stream.Builder<Quad> builder = builder(); rdfConnection.querySelect(q, qs -> builder.accept(rdf.createQuad(LDP.PreferContainment, identifier, LDP.contains, getObject(qs)))); return builder.build(); } return Stream.empty(); }
rdfConnection.querySelect(q, qs -> builder.accept(rdf.createQuad(LDP.PreferMembership, getSubject(qs), getPredicate(qs), getObject(qs)))); return builder.build();
@Test public void testBaseIRInoTruncate() { final IRI iri = jenaRdf.createIRI("http://example.com/resource"); assertEquals(iri, TriplestoreUtils.getBaseIRI(iri), "Check that fragment URLs are removed"); }
@Override public CompletionStage<Void> add(final IRI id, final Dataset dataset) { return runAsync(() -> { final IRI graphName = rdf.createIRI(id.getIRIString() + "?ext=audit"); try (final Dataset data = rdf.createDataset()) { dataset.getGraph(PreferAudit).ifPresent(g -> g.stream().forEach(t -> data.add(graphName, t.getSubject(), t.getPredicate(), t.getObject()))); executeWrite(rdfConnection, () -> rdfConnection.loadDataset(asJenaDataset(data))); } catch (final Exception ex) { throw new RuntimeTrellisException("Error storing audit dataset for " + id, ex); } }); }
rdfConnection.querySelect(q, qs -> builder.accept(getObject(qs))); if (!builder.build().findFirst().isPresent()) { final Literal time = rdf.createLiteral(now().toString(), XSD.dateTime);
rdfConnection.querySelect(q, qs -> builder.accept(rdf.createQuad(LDP.PreferMembership, getSubject(qs), getPredicate(qs), getObject(qs)))); return builder.build();
private void createOrReplace(final Metadata metadata, final Dataset dataset, final OperationType type) { final Instant eventTime = now(); // Set the LDP type dataset.add(PreferServerManaged, metadata.getIdentifier(), RDF.type, metadata.getInteractionModel()); // Relocate some user-managed triples into the server-managed graph metadata.getMembershipResource().ifPresent(member -> { dataset.add(PreferServerManaged, metadata.getIdentifier(), LDP.member, getBaseIRI(member)); dataset.add(PreferServerManaged, metadata.getIdentifier(), LDP.membershipResource, member); }); metadata.getMemberRelation().ifPresent(relation -> dataset.add(PreferServerManaged, metadata.getIdentifier(), LDP.hasMemberRelation, relation)); metadata.getMemberOfRelation().ifPresent(relation -> dataset.add(PreferServerManaged, metadata.getIdentifier(), LDP.isMemberOfRelation, relation)); if (asList(LDP.IndirectContainer, LDP.DirectContainer).contains(metadata.getInteractionModel())) { dataset.add(PreferServerManaged, metadata.getIdentifier(), LDP.insertedContentRelation, metadata.getInsertedContentRelation().orElse(LDP.MemberSubject)); } // Set the parent relationship metadata.getContainer().ifPresent(parent -> dataset.add(PreferServerManaged, metadata.getIdentifier(), DC.isPartOf, parent)); metadata.getBinary().ifPresent(binary -> { dataset.add(PreferServerManaged, metadata.getIdentifier(), DC.hasPart, binary.getIdentifier()); binary.getMimeType().map(rdf::createLiteral).ifPresent(mimeType -> dataset.add(PreferServerManaged, binary.getIdentifier(), DC.format, mimeType)); }); storeResource(metadata.getIdentifier(), dataset, eventTime, type); }
@Test public void testDatasetNoConversion() { final Dataset dataset = jenaRdf.createDataset(); dataset.add(jenaRdf.createQuad(PreferUserManaged, subject, SKOS.prefLabel, literal)); dataset.add(jenaRdf.createQuad(PreferUserManaged, subject, type, SKOS.Concept)); dataset.add(jenaRdf.createQuad(PreferUserManaged, subject, DC.subject, AS.Activity)); assertEquals(3L, dataset.size(), "Confirm dataset size"); assertTrue(TriplestoreUtils.asJenaDataset(dataset).containsNamedModel(PreferUserManaged.getIRIString()), "Confirm presence of trellis:PreferUserManaged named graph"); assertEquals(TriplestoreUtils.asJenaDataset(dataset).asDatasetGraph(), TriplestoreUtils.asJenaDataset(dataset).asDatasetGraph(), "Confirm datasets are equal"); }
rdfConnection.querySelect(q, qs -> builder.accept(getObject(qs))); if (!builder.build().findFirst().isPresent()) { final Literal time = rdf.createLiteral(now().toString(), XSD.dateTime);
builder.accept(rdf.createQuad(LDP.PreferMembership, getSubject(qs), getPredicate(qs), getObject(qs)))); return builder.build();