From dde6e8409020dc177527c85d25ae67e947b59423 Mon Sep 17 00:00:00 2001 From: Unknown Date: Sun, 10 Sep 2017 23:34:19 -0600 Subject: [PATCH] add blank node functionality --- .../constraint/ConnectiveOperation.java | 3 - .../anqit/spanqit/constraint/Expression.java | 1 - .../spanqit/constraint/ExpressionOperand.java | 3 - .../anqit/spanqit/constraint/Expressions.java | 2 - .../java/com/anqit/spanqit/core/Prefix.java | 2 - .../spanqit/core/PrefixDeclarations.java | 2 - .../com/anqit/spanqit/core/Projection.java | 2 - .../java/com/anqit/spanqit/core/Query.java | 2 +- .../com/anqit/spanqit/core/QueryPattern.java | 2 - .../java/com/anqit/spanqit/core/Spanqit.java | 3 - .../spanqit/core/SpanqitStringUtils.java | 6 +- .../java/com/anqit/spanqit/core/Variable.java | 2 - .../graphpattern/BNodeTriplePattern.java | 36 +++++ .../spanqit/graphpattern/GraphPattern.java | 2 - .../spanqit/graphpattern/GraphPatterns.java | 27 ++-- .../graphpattern/GroupGraphPattern.java | 2 +- .../anqit/spanqit/graphpattern/SubSelect.java | 4 +- .../spanqit/graphpattern/TriplePattern.java | 82 ++++-------- .../graphpattern/TriplesSameSubject.java | 55 ++++++++ src/main/java/com/anqit/spanqit/rdf/Rdf.java | 13 ++ .../com/anqit/spanqit/rdf/RdfBlankNode.java | 123 ++++++++++++++++++ .../com/anqit/spanqit/rdf/RdfLiteral.java | 1 - .../java/com/anqit/spanqit/rdf/RdfObject.java | 3 - .../com/anqit/spanqit/rdf/RdfPredicate.java | 9 +- .../RdfPredicateObjectList.java} | 10 +- .../rdf/RdfPredicateObjectListCollection.java | 38 ++++++ .../com/anqit/spanqit/rdf/RdfResource.java | 2 - .../com/anqit/spanqit/rdf/RdfSubject.java | 17 ++- .../java/com/anqit/spanqit/rdf/RdfValue.java | 3 - 29 files changed, 340 insertions(+), 117 deletions(-) create mode 100644 src/main/java/com/anqit/spanqit/graphpattern/BNodeTriplePattern.java create mode 100644 src/main/java/com/anqit/spanqit/graphpattern/TriplesSameSubject.java create mode 100644 src/main/java/com/anqit/spanqit/rdf/Rdf.java create mode 100644 src/main/java/com/anqit/spanqit/rdf/RdfBlankNode.java rename src/main/java/com/anqit/spanqit/{graphpattern/RdfPredicateRdfObjectListPair.java => rdf/RdfPredicateObjectList.java} (51%) create mode 100644 src/main/java/com/anqit/spanqit/rdf/RdfPredicateObjectListCollection.java diff --git a/src/main/java/com/anqit/spanqit/constraint/ConnectiveOperation.java b/src/main/java/com/anqit/spanqit/constraint/ConnectiveOperation.java index 304e509..bd91745 100644 --- a/src/main/java/com/anqit/spanqit/constraint/ConnectiveOperation.java +++ b/src/main/java/com/anqit/spanqit/constraint/ConnectiveOperation.java @@ -3,9 +3,6 @@ /** * Represents a SPARQL connective operation, which takes an arbitrary number of * arguments - * - * @author Ankit - * */ class ConnectiveOperation extends Operation { ConnectiveOperation(ConnectiveOperator operator) { diff --git a/src/main/java/com/anqit/spanqit/constraint/Expression.java b/src/main/java/com/anqit/spanqit/constraint/Expression.java index 97a3694..4adacab 100644 --- a/src/main/java/com/anqit/spanqit/constraint/Expression.java +++ b/src/main/java/com/anqit/spanqit/constraint/Expression.java @@ -12,7 +12,6 @@ * A SPARQL expression. Used by filters, having clauses, order and group by * clauses, assignments, and as arguments to other expressions. * - * @author Ankit * @param * the type of Expression (ie, Function or Operation). Used to * support fluency diff --git a/src/main/java/com/anqit/spanqit/constraint/ExpressionOperand.java b/src/main/java/com/anqit/spanqit/constraint/ExpressionOperand.java index 24d7b9a..9702238 100644 --- a/src/main/java/com/anqit/spanqit/constraint/ExpressionOperand.java +++ b/src/main/java/com/anqit/spanqit/constraint/ExpressionOperand.java @@ -5,8 +5,5 @@ /** * An element that can be used as an operand to an * {@link com.anqit.spanqit.constraint.Expression} - * - * @author Ankit - * */ public interface ExpressionOperand extends QueryElement { } \ No newline at end of file diff --git a/src/main/java/com/anqit/spanqit/constraint/Expressions.java b/src/main/java/com/anqit/spanqit/constraint/Expressions.java index ac1042a..0d482e9 100644 --- a/src/main/java/com/anqit/spanqit/constraint/Expressions.java +++ b/src/main/java/com/anqit/spanqit/constraint/Expressions.java @@ -18,8 +18,6 @@ * @see * SPARQL Function Definitions - * @author Ankit - * */ public class Expressions { // prevent instantiation of this class diff --git a/src/main/java/com/anqit/spanqit/core/Prefix.java b/src/main/java/com/anqit/spanqit/core/Prefix.java index 9e6f969..99ce07f 100644 --- a/src/main/java/com/anqit/spanqit/core/Prefix.java +++ b/src/main/java/com/anqit/spanqit/core/Prefix.java @@ -5,8 +5,6 @@ /** * A SPARQL Prefix declaration * - * @author Ankit - * * @see * SPARQL Prefix diff --git a/src/main/java/com/anqit/spanqit/core/PrefixDeclarations.java b/src/main/java/com/anqit/spanqit/core/PrefixDeclarations.java index 8f6c93d..bda4244 100644 --- a/src/main/java/com/anqit/spanqit/core/PrefixDeclarations.java +++ b/src/main/java/com/anqit/spanqit/core/PrefixDeclarations.java @@ -3,8 +3,6 @@ /** * A collection of SPARQL Prefix declarations * - * @author Ankit - * * @see * SPARQL Prefix diff --git a/src/main/java/com/anqit/spanqit/core/Projection.java b/src/main/java/com/anqit/spanqit/core/Projection.java index 44274d8..0beb51e 100644 --- a/src/main/java/com/anqit/spanqit/core/Projection.java +++ b/src/main/java/com/anqit/spanqit/core/Projection.java @@ -5,8 +5,6 @@ /** * A SPARQL Projection * - * @author Ankit - * * @see * SPARQL Projections diff --git a/src/main/java/com/anqit/spanqit/core/Query.java b/src/main/java/com/anqit/spanqit/core/Query.java index d46d934..a4048a7 100644 --- a/src/main/java/com/anqit/spanqit/core/Query.java +++ b/src/main/java/com/anqit/spanqit/core/Query.java @@ -186,7 +186,7 @@ public T offset(int offset) { * @return a SparqlVariable object that is unique to this query instance */ public Variable var() { - return new Variable("x" + ++varCount); + return Spanqit.var("x" + ++varCount); } protected abstract String getQueryActionString(); diff --git a/src/main/java/com/anqit/spanqit/core/QueryPattern.java b/src/main/java/com/anqit/spanqit/core/QueryPattern.java index f5a3d50..67e589c 100644 --- a/src/main/java/com/anqit/spanqit/core/QueryPattern.java +++ b/src/main/java/com/anqit/spanqit/core/QueryPattern.java @@ -7,8 +7,6 @@ /** * A SPARQL Query Pattern (WHERE clause) * - * @author Ankit - * * @see * Query Pattern Definition diff --git a/src/main/java/com/anqit/spanqit/core/Spanqit.java b/src/main/java/com/anqit/spanqit/core/Spanqit.java index 11f5341..d60621f 100644 --- a/src/main/java/com/anqit/spanqit/core/Spanqit.java +++ b/src/main/java/com/anqit/spanqit/core/Spanqit.java @@ -7,9 +7,6 @@ /** * A class to with static methods to create SPARQL query elements. - * - * @author Ankit - * */ public class Spanqit { // prevent instantiation of this class diff --git a/src/main/java/com/anqit/spanqit/core/SpanqitStringUtils.java b/src/main/java/com/anqit/spanqit/core/SpanqitStringUtils.java index 386b521..a76207c 100644 --- a/src/main/java/com/anqit/spanqit/core/SpanqitStringUtils.java +++ b/src/main/java/com/anqit/spanqit/core/SpanqitStringUtils.java @@ -10,10 +10,14 @@ public static void appendAndNewlineIfNonNull(QueryElement element, StringBuilder builder.append(Optional.ofNullable(element).map(e -> e.getQueryString() + "\n").orElse("")); } - public static String getBracketedString(String contents) { + public static String getBracedString(String contents) { return getEnclosedString("{", "}", contents); } + public static String getBracketedString(String contents) { + return getEnclosedString("[", "]", contents); + } + public static String getParenthesizedString(String contents) { return getEnclosedString("(", ")", contents); } diff --git a/src/main/java/com/anqit/spanqit/core/Variable.java b/src/main/java/com/anqit/spanqit/core/Variable.java index 8a3b45b..8ea39ee 100644 --- a/src/main/java/com/anqit/spanqit/core/Variable.java +++ b/src/main/java/com/anqit/spanqit/core/Variable.java @@ -9,8 +9,6 @@ /** * A SPARQL query variable * - * @author Ankit - * * @see * SPARQL Variable Syntax diff --git a/src/main/java/com/anqit/spanqit/graphpattern/BNodeTriplePattern.java b/src/main/java/com/anqit/spanqit/graphpattern/BNodeTriplePattern.java new file mode 100644 index 0000000..09f2f4d --- /dev/null +++ b/src/main/java/com/anqit/spanqit/graphpattern/BNodeTriplePattern.java @@ -0,0 +1,36 @@ +package com.anqit.spanqit.graphpattern; + +import com.anqit.spanqit.rdf.RdfBlankNode.PropertiesBlankNode; +import com.anqit.spanqit.rdf.RdfObject; +import com.anqit.spanqit.rdf.RdfPredicate; + +/** + * A triple pattern formed by a property-list blank node + * + * @see + * blank node syntax + */ +class BNodeTriplePattern implements TriplePattern { + private PropertiesBlankNode bnode; + + BNodeTriplePattern(PropertiesBlankNode subject) { + this.bnode = subject; + } + + @Override + public BNodeTriplePattern andHas(RdfPredicate predicate, RdfObject... objects) { + bnode.andHas(predicate, objects); + + return this; + } + + @Override + public boolean isEmpty() { + return false; + } + + @Override + public String getQueryString() { + return bnode.getQueryString() + SUFFIX; + } +} diff --git a/src/main/java/com/anqit/spanqit/graphpattern/GraphPattern.java b/src/main/java/com/anqit/spanqit/graphpattern/GraphPattern.java index eb7d70e..3a98b0e 100644 --- a/src/main/java/com/anqit/spanqit/graphpattern/GraphPattern.java +++ b/src/main/java/com/anqit/spanqit/graphpattern/GraphPattern.java @@ -5,8 +5,6 @@ /** * Denotes a SPARQL Graph Pattern * - * @author Ankit - * * @see * SPARQL Graph Patterns diff --git a/src/main/java/com/anqit/spanqit/graphpattern/GraphPatterns.java b/src/main/java/com/anqit/spanqit/graphpattern/GraphPatterns.java index 2ddd101..c24fd5d 100644 --- a/src/main/java/com/anqit/spanqit/graphpattern/GraphPatterns.java +++ b/src/main/java/com/anqit/spanqit/graphpattern/GraphPatterns.java @@ -1,24 +1,21 @@ package com.anqit.spanqit.graphpattern; import com.anqit.spanqit.core.Projectable; +import com.anqit.spanqit.rdf.RdfBlankNode.PropertiesBlankNode; import com.anqit.spanqit.rdf.RdfObject; import com.anqit.spanqit.rdf.RdfPredicate; import com.anqit.spanqit.rdf.RdfSubject; /** - * A class with static methods to create graph patterns. Obviously there's some - * more flushing out TODO still + * A class with static methods to create graph patterns. * - * @author Ankit - * * @see SPARQL * Graph Pattern */ public class GraphPatterns { // prevent instantiation of this class - private GraphPatterns() { - } + private GraphPatterns() { } /** * Create a triple pattern with the given subject, predicate, and object(s) @@ -33,9 +30,21 @@ private GraphPatterns() { * href="http://www.w3.org/TR/2013/REC-sparql11-query-20130321/#QSynTriples"> * Triple pattern syntax */ - public static TriplePattern tp(RdfSubject subject, - RdfPredicate predicate, RdfObject... objects) { - return new TriplePattern(subject, predicate, objects); + public static TriplePattern tp(RdfSubject subject, RdfPredicate predicate, RdfObject... objects) { + return new TriplesSameSubject(subject, predicate, objects); + } + + /** + * Create a triple pattern from a property-list blank node + * @param bnode the PropertiesBlankNode instance to convert to a triple pattern + * + * @return the triple pattern represented by the expansion of this blank node + * + * @see + * blank node syntax + */ + public static TriplePattern tp(PropertiesBlankNode bnode) { + return new BNodeTriplePattern(bnode); } /** diff --git a/src/main/java/com/anqit/spanqit/graphpattern/GroupGraphPattern.java b/src/main/java/com/anqit/spanqit/graphpattern/GroupGraphPattern.java index 2377537..9086072 100644 --- a/src/main/java/com/anqit/spanqit/graphpattern/GroupGraphPattern.java +++ b/src/main/java/com/anqit/spanqit/graphpattern/GroupGraphPattern.java @@ -95,7 +95,7 @@ public String getQueryString() { } if (bracketize) { - pattern.append(SpanqitStringUtils.getBracketedString(innerPattern + pattern.append(SpanqitStringUtils.getBracedString(innerPattern .toString())); } else { pattern.append(innerPattern.toString()); diff --git a/src/main/java/com/anqit/spanqit/graphpattern/SubSelect.java b/src/main/java/com/anqit/spanqit/graphpattern/SubSelect.java index 5c3a5a6..79f6c9e 100644 --- a/src/main/java/com/anqit/spanqit/graphpattern/SubSelect.java +++ b/src/main/java/com/anqit/spanqit/graphpattern/SubSelect.java @@ -9,8 +9,6 @@ /** * A SPARQL subquery * - * @author Ankit - * * @see * SPARQL Subquery @@ -140,6 +138,6 @@ public String getQueryString() { // TODO: VALUES // subselect.append(values.getQueryString()); - return SpanqitStringUtils.getBracketedString(subSelect.toString()); + return SpanqitStringUtils.getBracedString(subSelect.toString()); } } \ No newline at end of file diff --git a/src/main/java/com/anqit/spanqit/graphpattern/TriplePattern.java b/src/main/java/com/anqit/spanqit/graphpattern/TriplePattern.java index cd76200..b85a33d 100644 --- a/src/main/java/com/anqit/spanqit/graphpattern/TriplePattern.java +++ b/src/main/java/com/anqit/spanqit/graphpattern/TriplePattern.java @@ -1,54 +1,28 @@ -package com.anqit.spanqit.graphpattern; - -import com.anqit.spanqit.core.QueryElementCollection; -import com.anqit.spanqit.rdf.RdfObject; -import com.anqit.spanqit.rdf.RdfPredicate; -import com.anqit.spanqit.rdf.RdfSubject; - -/** - * A SPARQL Triple Pattern. - * - * @see - * Triple pattern syntax - */ -public class TriplePattern extends QueryElementCollection implements GraphPattern { - private RdfSubject subject; - - TriplePattern(RdfSubject subject, RdfPredicate predicate, - RdfObject... objects) { - super(" ;\n\t"); - this.subject = subject; - andHas(predicate, objects); - } - - /** - * Using the predicate-object and object list mechanisms, expand this triple pattern to include - * triples consisting of this subject, and the given predicate and object(s) - * - * @param predicate the predicate of the triple to add - * @param objects the object or objects of the triple to add - * - * @return this triple pattern - * - * @see - * Predicate-Object Lists - * @see - * Object Lists - */ - public TriplePattern andHas(RdfPredicate predicate, RdfObject... objects) { - elements.add(new RdfPredicateRdfObjectListPair(predicate, objects)); - - return this; - } - - @Override - public boolean isEmpty() { - return false; - } - - @Override - public String getQueryString() { - return subject.getQueryString() + " " + super.getQueryString() + " ."; - } -} \ No newline at end of file +package com.anqit.spanqit.graphpattern; + +import com.anqit.spanqit.rdf.RdfObject; +import com.anqit.spanqit.rdf.RdfPredicate; + +/** + * Denotes a SPARQL Triple Pattern + * + * @param the type of triple pattern; used to support fluency + * + * @see + * Triple pattern syntax + * @see + * blank node syntax + */ +public interface TriplePattern> extends GraphPattern { + static String SUFFIX = " ."; + + /** + * add predicate-object lists describing this triple pattern's subject + * + * @param predicate the predicate to use to describe this triple pattern's subject + * @param objects the corresponding object(s) + * @return this triple pattern + */ + public T andHas(RdfPredicate predicate, RdfObject... objects); +} diff --git a/src/main/java/com/anqit/spanqit/graphpattern/TriplesSameSubject.java b/src/main/java/com/anqit/spanqit/graphpattern/TriplesSameSubject.java new file mode 100644 index 0000000..6eca59e --- /dev/null +++ b/src/main/java/com/anqit/spanqit/graphpattern/TriplesSameSubject.java @@ -0,0 +1,55 @@ +package com.anqit.spanqit.graphpattern; + +import com.anqit.spanqit.rdf.Rdf; +import com.anqit.spanqit.rdf.RdfObject; +import com.anqit.spanqit.rdf.RdfPredicate; +import com.anqit.spanqit.rdf.RdfPredicateObjectListCollection; +import com.anqit.spanqit.rdf.RdfSubject; + +/** + * A SPARQL Triple Pattern. + * + * @see + * Triple pattern syntax + */ +class TriplesSameSubject implements TriplePattern { + private RdfSubject subject; + private RdfPredicateObjectListCollection predicateObjectLists = Rdf.predicateObjectListCollection(); + + TriplesSameSubject(RdfSubject subject, RdfPredicate predicate, RdfObject... objects) { + this.subject = subject; + andHas(predicate, objects); + } + + /** + * Using the predicate-object and object list mechanisms, expand this triple pattern to include + * triples consisting of this subject, and the given predicate and object(s) + * + * @param predicate the predicate of the triple to add + * @param objects the object or objects of the triple to add + * + * @return this triple pattern + * + * @see + * Predicate-Object Lists + * @see + * Object Lists + */ + @Override + public TriplesSameSubject andHas(RdfPredicate predicate, RdfObject... objects) { + predicateObjectLists.andHas(predicate, objects); + + return this; + } + + @Override + public boolean isEmpty() { + return false; + } + + @Override + public String getQueryString() { + return subject.getQueryString() + " " + predicateObjectLists.getQueryString() + SUFFIX; + } +} \ No newline at end of file diff --git a/src/main/java/com/anqit/spanqit/rdf/Rdf.java b/src/main/java/com/anqit/spanqit/rdf/Rdf.java new file mode 100644 index 0000000..285b02f --- /dev/null +++ b/src/main/java/com/anqit/spanqit/rdf/Rdf.java @@ -0,0 +1,13 @@ +package com.anqit.spanqit.rdf; + +/** + * A class with static methods to create basic RDF objects + */ +public class Rdf { + + private Rdf() { } + + public static RdfPredicateObjectListCollection predicateObjectListCollection() { + return new RdfPredicateObjectListCollection(); + } +} diff --git a/src/main/java/com/anqit/spanqit/rdf/RdfBlankNode.java b/src/main/java/com/anqit/spanqit/rdf/RdfBlankNode.java new file mode 100644 index 0000000..07c3ece --- /dev/null +++ b/src/main/java/com/anqit/spanqit/rdf/RdfBlankNode.java @@ -0,0 +1,123 @@ +package com.anqit.spanqit.rdf; + +import com.anqit.spanqit.core.SpanqitStringUtils; +import com.anqit.spanqit.graphpattern.GraphPatterns; +import com.anqit.spanqit.graphpattern.TriplePattern; + +/** + * Denotes an RDF Blank Node + */ +public interface RdfBlankNode extends RdfResource { + /** + * creates a labeled blank node + * + * @param label the label of the blank node + * + * @return a new {@link LabeledBlankNode} instance + */ + public static LabeledBlankNode bNode(String label) { + return new LabeledBlankNode(label); + } + + /** + * creates a label-less blank node, identified by the supplied predicate-object lists + * + * @param predicate the predicate of the initial predicate-object list to populate this blank node with + * @param objects the objects of the initial predicate-object list to populate this blank node with + * + * @return a new {@link AnonymousBlankNode} instance + * + * @see + * Blank node syntax + */ + public static PropertiesBlankNode bNode(RdfPredicate predicate, RdfObject... objects) { + return new PropertiesBlankNode(predicate, objects); + } + + /** + * create an empty anonymous blank node + * @return an empty {@link AnonymousBlankNode} instance + */ + public static AnonymousBlankNode bNode() { + return new AnonymousBlankNode(); + } + + /** + * a labeled blank node, of the form "_:label" + */ + public static class LabeledBlankNode implements RdfBlankNode { + private String label; + + private LabeledBlankNode(String label) { + this.label = label; + } + + @Override + public String getQueryString() { + return "_:" + label; + } + } + + /** + * an anonymous blank node, identifying a resource matching all of the containing predicate-object lists + * @see + * Blank node syntax + */ + public static class AnonymousBlankNode implements RdfBlankNode { + @Override + public String getQueryString() { + return SpanqitStringUtils.getBracketedString(" "); + } + } + + /** + * A blank node representing a resource that matches a set of predicate-object lists + * + * @see + * blank node syntax + */ + public static class PropertiesBlankNode implements RdfBlankNode { + private RdfPredicateObjectListCollection predicateObjectLists = Rdf.predicateObjectListCollection(); + + private PropertiesBlankNode(RdfPredicate predicate, RdfObject... objects) { + andHas(predicate, objects); + } + + /** + * Using the predicate-object and object list mechanisms, expand this triple pattern to include + * triples consisting of this subject, and the given predicate and object(s) + * + * @param predicate the predicate of the triple to add + * @param objects the object or objects of the triple to add + * + * @return this blank node + * + * @see + * Predicate-Object Lists + * @see + * Object Lists + */ + public PropertiesBlankNode andHas(RdfPredicate predicate, RdfObject... objects) { + predicateObjectLists.andHas(predicate, objects); + + return this; + } + + /** + * convert this blank node to a triple pattern + * + * @return the triple pattern identified by this blank node + * + * @see + * blank node syntax + */ + public TriplePattern toTp() { + return GraphPatterns.tp(this); + } + + @Override + public String getQueryString() { + return SpanqitStringUtils.getBracketedString(predicateObjectLists.getQueryString()); + } + } +} diff --git a/src/main/java/com/anqit/spanqit/rdf/RdfLiteral.java b/src/main/java/com/anqit/spanqit/rdf/RdfLiteral.java index 64f9875..fac2178 100644 --- a/src/main/java/com/anqit/spanqit/rdf/RdfLiteral.java +++ b/src/main/java/com/anqit/spanqit/rdf/RdfLiteral.java @@ -5,7 +5,6 @@ /** * Denotes an RDF literal * - * @author Ankit * @param the datatype of the literal * * @see rdf:type + * + * @see + * RDF Type abbreviation + */ public static RdfPredicate isA = () -> "a"; } \ No newline at end of file diff --git a/src/main/java/com/anqit/spanqit/graphpattern/RdfPredicateRdfObjectListPair.java b/src/main/java/com/anqit/spanqit/rdf/RdfPredicateObjectList.java similarity index 51% rename from src/main/java/com/anqit/spanqit/graphpattern/RdfPredicateRdfObjectListPair.java rename to src/main/java/com/anqit/spanqit/rdf/RdfPredicateObjectList.java index 9030746..8a53c68 100644 --- a/src/main/java/com/anqit/spanqit/graphpattern/RdfPredicateRdfObjectListPair.java +++ b/src/main/java/com/anqit/spanqit/rdf/RdfPredicateObjectList.java @@ -1,21 +1,19 @@ -package com.anqit.spanqit.graphpattern; +package com.anqit.spanqit.rdf; import java.util.Collections; import com.anqit.spanqit.core.QueryElementCollection; -import com.anqit.spanqit.rdf.RdfObject; -import com.anqit.spanqit.rdf.RdfPredicate; -class RdfPredicateRdfObjectListPair extends QueryElementCollection { +class RdfPredicateObjectList extends QueryElementCollection { private RdfPredicate predicate; - RdfPredicateRdfObjectListPair(RdfPredicate predicate, RdfObject... objects) { + RdfPredicateObjectList(RdfPredicate predicate, RdfObject... objects) { super(", "); this.predicate = predicate; and(objects); } - public RdfPredicateRdfObjectListPair and(RdfObject... objects) { + public RdfPredicateObjectList and(RdfObject... objects) { Collections.addAll(elements, objects); return this; diff --git a/src/main/java/com/anqit/spanqit/rdf/RdfPredicateObjectListCollection.java b/src/main/java/com/anqit/spanqit/rdf/RdfPredicateObjectListCollection.java new file mode 100644 index 0000000..9fd11d5 --- /dev/null +++ b/src/main/java/com/anqit/spanqit/rdf/RdfPredicateObjectListCollection.java @@ -0,0 +1,38 @@ +package com.anqit.spanqit.rdf; + +import com.anqit.spanqit.core.QueryElementCollection; + +/** + * An RDF predicate-object list collection + * + * @see + * Predicate-Object Lists + * @see + * Object Lists + */ +public class RdfPredicateObjectListCollection extends QueryElementCollection { + private static String DELIMITER = " ;\n "; + + RdfPredicateObjectListCollection(RdfPredicate predicate, RdfObject... objects) { + this(); + andHas(predicate, objects); + } + + RdfPredicateObjectListCollection() { + super(DELIMITER); + }; + + /** + * add predicate-object lists to this collection + * + * @param predicate the predicate of the predicate-object list to add + * @param objects the object or objects to add + * + * @return this instance + */ + public RdfPredicateObjectListCollection andHas(RdfPredicate predicate, RdfObject... objects) { + elements.add(new RdfPredicateObjectList(predicate, objects)); + + return this; + } +} diff --git a/src/main/java/com/anqit/spanqit/rdf/RdfResource.java b/src/main/java/com/anqit/spanqit/rdf/RdfResource.java index 4bc0cf4..8497413 100644 --- a/src/main/java/com/anqit/spanqit/rdf/RdfResource.java +++ b/src/main/java/com/anqit/spanqit/rdf/RdfResource.java @@ -3,8 +3,6 @@ /** * Denotes an RDF Resource * - * @author Ankit - * * @see * RDF Resources diff --git a/src/main/java/com/anqit/spanqit/rdf/RdfSubject.java b/src/main/java/com/anqit/spanqit/rdf/RdfSubject.java index c7f725b..f9a500e 100644 --- a/src/main/java/com/anqit/spanqit/rdf/RdfSubject.java +++ b/src/main/java/com/anqit/spanqit/rdf/RdfSubject.java @@ -7,9 +7,6 @@ /** * Denotes an element that can represent a subject in a * {@link com.anqit.spanqit.graphpattern.TriplePattern} - * - * @author Ankit - * */ public interface RdfSubject extends QueryElement { /** @@ -18,7 +15,7 @@ public interface RdfSubject extends QueryElement { * * @param predicate * the predicate of the triple pattern - * @param object + * @param objects * the object(s) of the triple pattern * @return a new triple pattern with this subject, and the given predicate * and object(s) @@ -27,11 +24,19 @@ public interface RdfSubject extends QueryElement { * href="http://www.w3.org/TR/2013/REC-sparql11-query-20130321/#QSynTriples"> * Triple pattern syntax */ - default public TriplePattern has(RdfPredicate predicate, - RdfObject... objects) { + default public TriplePattern has(RdfPredicate predicate, RdfObject... objects) { return GraphPatterns.tp(this, predicate, objects); } + /** + * Use the built-in shortcut "a" for rdf:type to build a triple with this subject and the given objects + * @param objects the objects to use to describe the rdf:type of this subject + * + * @return a {@link TriplePattern} object with this subject, the "a" shortcut predicate, and the given objects + * + * @see + * RDF Type abbreviation + */ default public TriplePattern isA(RdfObject... objects) { return has(RdfPredicate.isA, objects); } diff --git a/src/main/java/com/anqit/spanqit/rdf/RdfValue.java b/src/main/java/com/anqit/spanqit/rdf/RdfValue.java index a6ba9de..7c6990a 100644 --- a/src/main/java/com/anqit/spanqit/rdf/RdfValue.java +++ b/src/main/java/com/anqit/spanqit/rdf/RdfValue.java @@ -4,8 +4,5 @@ /** * Denotes an RDF Value. - * - * @author Ankit - * */ public interface RdfValue extends RdfObject, ExpressionOperand { } \ No newline at end of file