in commons-rdf-jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraphLike.java [167:198]
Predicate<RDFDataset.Quad> quadFilter(final BlankNodeOrIRI subject, final IRI predicate, final RDFTerm object) {
final Optional<Node> subjectNode = Optional.ofNullable(subject).map(factory::asJsonLdNode);
final Optional<Node> predicateNode = Optional.ofNullable(predicate).map(factory::asJsonLdNode);
final Optional<Node> objectNode = Optional.ofNullable(object).map(factory::asJsonLdNode);
return q -> {
if (subjectNode.isPresent() && subjectNode.get().compareTo(q.getSubject()) != 0) {
return false;
}
if (predicateNode.isPresent() && predicateNode.get().compareTo(q.getPredicate()) != 0) {
return false;
}
if (objectNode.isPresent()) {
if (object instanceof Literal && q.getObject().isLiteral()) {
// Special handling for COMMONSRDF-56, COMMONSRDF-51:
// Less efficient wrapper to a Commons RDF Literal so
// we can use our RDF 1.1-compliant .equals()
final RDFTerm otherObj = factory.asRDFTerm(q.getObject());
if (! (object.equals(otherObj))) {
return false;
}
} else {
// JSONLD-Java's .compareTo can handle IRI, BlankNode and type-mismatch
if (objectNode.get().compareTo(q.getObject()) != 0) {
return false;
}
}
}
// All patterns checked, must be good!
return true;
};
}