@Override public BlankNodeOrIRI getSubject() { return Quad.this.getSubject(); }
/** * Serialize an RDF Quad. * @param quad the quad * @return a serialization of the quad */ public static String serializeQuad(final Quad quad) { return quad.getSubject() + SEP + quad.getPredicate() + SEP + quad.getObject() + SEP + quad.getGraphName().map(g -> g + " .").orElse("."); }
@Override public String toString() { return asDataset().stream() .map(q -> format("%1$s %2$s %3$s %4$s .", q.getSubject().ntriplesString(), q.getPredicate().ntriplesString(), q.getObject().ntriplesString(), q.getGraphName().map(BlankNodeOrIRI::ntriplesString).orElse(""))) .collect(joining("\n")); } }
@Override public String toString() { return dataset.stream() .map(q -> format("%1$s %2$s %3$s %4$s .", q.getSubject().ntriplesString(), q.getPredicate().ntriplesString(), q.getObject().ntriplesString(), q.getGraphName().map(BlankNodeOrIRI::ntriplesString).orElse(""))) .collect(joining("\n")); } }
/** * Adapt a Commons RDF {@link org.apache.commons.rdf.api.Quad} as a JsonLd * {@link com.github.jsonldjava.core.RDFDataset.Quad}. * * @param quad * Commons RDF {@link org.apache.commons.rdf.api.Quad} to adapt * @return Adapted JsonLd {@link com.github.jsonldjava.core.RDFDataset.Quad} */ public RDFDataset.Quad asJsonLdQuad(final org.apache.commons.rdf.api.Quad quad) { final BlankNodeOrIRI g = quad.getGraphName().orElse(null); return createJsonLdQuad(g, quad.getSubject(), quad.getPredicate(), quad.getObject()); }
@Override public void add(final Quad quad) { final BlankNodeOrIRI newGraph = (BlankNodeOrIRI) internallyMap(quad.getGraphName().orElse(null)); final BlankNodeOrIRI newSubject = (BlankNodeOrIRI) internallyMap(quad.getSubject()); final IRI newPredicate = (IRI) internallyMap(quad.getPredicate()); final RDFTerm newObject = internallyMap(quad.getObject()); // Check if any of the object references changed during the mapping, to // avoid creating a new Quad object if possible if (newGraph == quad.getGraphName().orElse(null) && newSubject == quad.getSubject() && newPredicate == quad.getPredicate() && newObject == quad.getObject()) { quads.add(quad); } else { // Make a new Quad with our mapped instances final Quad result = factory.createQuad(newGraph, newSubject, newPredicate, newObject); quads.add(result); } }
@Override public void remove(final Quad q) { remove(q.getGraphName(), q.getSubject(), q.getPredicate(), q.getObject()); }
@Override public boolean equals(final Object other) { if (other == this) { return true; } if (!(other instanceof Quad)) { return false; } final Quad quad = (Quad) other; return getGraphName().equals(quad.getGraphName()) && getSubject().equals(quad.getSubject()) && getPredicate().equals(quad.getPredicate()) && getObject().equals(quad.getObject()); }
@Override public boolean equals(final Object obj) { if (obj == this) { return true; } if (!(obj instanceof org.apache.commons.rdf.api.Quad)) { return false; } final org.apache.commons.rdf.api.Quad other = (org.apache.commons.rdf.api.Quad) obj; return getGraphName().equals(other.getGraphName()) && getSubject().equals(other.getSubject()) && getPredicate().equals(other.getPredicate()) && getObject().equals(other.getObject()); }
@Test public void getSubject() throws Exception { assertEquals(1, ((DummyIRI) quad.getSubject()).i); } @Test
private static List<RDFTerm> quadList(final Quad q) { return Arrays.asList( q.getGraphName().orElse(null), q.getSubject(), q.getPredicate(), q.getObject()); }
@Override public boolean equals(final Object obj) { if (!(obj instanceof Quad)) { return false; } final Quad other = (Quad) obj; return getGraphName().equals(other.getGraphName()) && getSubject().equals(other.getSubject()) && getPredicate().equals(other.getPredicate()) && getObject().equals(other.getObject()); }
/** * Convert quads from an external form to a skolemized form. * * @param svc the resource service * @param baseUrl the base URL * @return a mapping function */ public static Function<Quad, Quad> skolemizeQuads(final ResourceService svc, final String baseUrl) { return quad -> rdf.createQuad(quad.getGraphName().orElse(PreferUserManaged), (BlankNodeOrIRI) svc.toInternal(svc.skolemize(quad.getSubject()), baseUrl), quad.getPredicate(), svc.toInternal(svc.skolemize(quad.getObject()), baseUrl)); }
/** * Convert quads from a skolemized form to an external form. * * @param svc the resource service * @param baseUrl the base URL * @return a mapping function */ public static Function<Quad, Quad> unskolemizeQuads(final ResourceService svc, final String baseUrl) { return quad -> rdf.createQuad(quad.getGraphName().orElse(PreferUserManaged), (BlankNodeOrIRI) svc.toExternal(svc.unskolemize(quad.getSubject()), baseUrl), quad.getPredicate(), svc.toExternal(svc.unskolemize(quad.getObject()), baseUrl)); }
@Override public void remove(final Quad quad) { // COMMONSRDF-51: datasetGraph.deleteAny( toJenaPattern(quad.getGraphName()), toJenaPattern(quad.getSubject()), toJenaPattern(quad.getPredicate()), toJenaPattern(quad.getObject())); }
@Test public void testHashCode() { final int expected = Objects.hash(quad.getSubject(), quad.getPredicate(), quad.getObject(), quad.getGraphName()); assertEquals(expected, quad.hashCode()); } }
@Test public void testParseQuad() { final Optional<Quad> quad = FileUtils.parseQuad( "<trellis:data/resource> <http://purl.org/dc/terms/title> " + "\"Some title\" <http://www.trellisldp.org/ns/trellis#PreferUserManaged> .").findFirst(); assertTrue(quad.isPresent(), "Quad isn't present in parsed string!"); quad.ifPresent(q -> { assertEquals("trellis:data/resource", ((IRI) q.getSubject()).getIRIString(), "Incorrect subject!"); assertEquals(DC.title, q.getPredicate(), "Incorrect predicate!"); assertEquals("Some title", ((Literal) q.getObject()).getLexicalForm(), "Incorrect literal object!"); assertTrue(q.getGraphName().isPresent(), "Graph name isn't present!"); q.getGraphName().ifPresent(g -> assertEquals(Trellis.PreferUserManaged, g, "Incorrect graph name!")); }); }
@Test public void testParseQuadNoGraph() { final Optional<Quad> quad = FileUtils.parseQuad( "<trellis:data/resource> <http://purl.org/dc/terms/title> " + "\"A different title\" .").findFirst(); assertTrue(quad.isPresent(), "Quad isn't present in parsed Triple string!"); quad.ifPresent(q -> { assertEquals("trellis:data/resource", ((IRI) q.getSubject()).getIRIString(), "Incorrect subject!"); assertEquals(DC.title, q.getPredicate(), "Incorrect predicate!"); assertEquals("A different title", ((Literal) q.getObject()).getLexicalForm(), "Incorrect literal object!"); assertFalse(q.getGraphName().isPresent(), "Graph name shouldn't have been present!"); }); }
@Test public void testResourceWithAuditQuads() { final JenaDataset dataset = buildLdpDataset(LDP.RDFSource); auditService.creation(identifier, mockSession).forEach(q -> dataset.add(auditId, q.getSubject(), q.getPredicate(), q.getObject())); final TriplestoreResource res = new TriplestoreResource(connect(wrap(dataset.asJenaDatasetGraph())), identifier); res.fetchData(); assertTrue(res.exists(), "Missing resource!"); assertAll("Check resource", checkResource(res, identifier, LDP.RDFSource, false, false, false)); assertAll("Check LDP properties", checkLdpProperties(res, null, null, null, null)); assertAll("Check RDF stream", checkRdfStream(res, 2L, 0L, 5L, 0L, 0L)); }
@Test public void testResourceWithAclQuads() { final JenaDataset dataset = buildLdpDataset(LDP.RDFSource); dataset.add(aclId, aclSubject, ACL.mode, ACL.Read); dataset.add(aclId, aclSubject, ACL.agentClass, FOAF.Agent); dataset.add(aclId, aclSubject, ACL.accessTo, identifier); auditService.creation(identifier, mockSession).forEach(q -> dataset.add(auditId, q.getSubject(), q.getPredicate(), q.getObject())); final TriplestoreResource res = new TriplestoreResource(connect(wrap(dataset.asJenaDatasetGraph())), identifier); res.fetchData(); assertTrue(res.exists(), "Missing resource!"); assertAll("Check resource", checkResource(res, identifier, LDP.RDFSource, false, true, false)); assertAll("Check LDP properties", checkLdpProperties(res, null, null, null, null)); assertAll("Check RDF stream", checkRdfStream(res, 2L, 3L, 5L, 0L, 0L)); }