Section4Test.java

/*******************************************************************************
 * Copyright (c) 2018 Eclipse RDF4J contributors.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Distribution License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 *******************************************************************************/

package org.eclipse.rdf4j.sparqlbuilder.examples.sparql11spec;

import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
import static org.eclipse.rdf4j.sparqlbuilder.rdf.Rdf.iri;

import org.eclipse.rdf4j.sparqlbuilder.core.Prefix;
import org.eclipse.rdf4j.sparqlbuilder.core.SparqlBuilder;
import org.eclipse.rdf4j.sparqlbuilder.core.Variable;
import org.eclipse.rdf4j.sparqlbuilder.examples.BaseExamples;
import org.eclipse.rdf4j.sparqlbuilder.graphpattern.GraphPatterns;
import org.eclipse.rdf4j.sparqlbuilder.graphpattern.TriplePattern;
import org.eclipse.rdf4j.sparqlbuilder.rdf.Iri;
import org.eclipse.rdf4j.sparqlbuilder.rdf.Rdf;
import org.eclipse.rdf4j.sparqlbuilder.rdf.RdfBlankNode;
import org.eclipse.rdf4j.sparqlbuilder.rdf.RdfBlankNode.PropertiesBlankNode;
import org.eclipse.rdf4j.sparqlbuilder.rdf.RdfLiteral.StringLiteral;
import org.eclipse.rdf4j.sparqlbuilder.rdf.RdfPredicate;
import org.junit.jupiter.api.Test;

public class Section4Test extends BaseExamples {
	Prefix foaf = SparqlBuilder.prefix("foaf", iri(FOAF_NS));
	Variable x = SparqlBuilder.var("x"), name = SparqlBuilder.var("name");

	@Test
	public void example_4_1_4() {
		Prefix defPrefix = SparqlBuilder.prefix(iri(DC_NS));

		// [ :p "v" ] .
		PropertiesBlankNode bnode = Rdf.bNode(defPrefix.iri("p"), Rdf.literalOf("v"));
		assertThat(bnode.toTp().getQueryString()).is(stringEqualsIgnoreCaseAndWhitespace("[ :p \"v\"] ."));

		// [] :p "v" .
		TriplePattern tp = Rdf.bNode().has(defPrefix.iri("p"), Rdf.literalOf("v"));
		assertThat(tp.getQueryString()).is(stringEqualsIgnoreCaseAndWhitespace("[] :p \"v\" ."));

		// [ :p "v" ] :q "w" .
		tp = bnode.has(defPrefix.iri("q"), Rdf.literalOf("w"));
		assertThat(tp.getQueryString()).is(stringEqualsIgnoreCaseAndWhitespace("[ :p \"v\" ] :q \"w\" ."));

		// :x :q [ :p "v" ] .
		tp = defPrefix.iri("x").has(defPrefix.iri("q"), bnode);
		assertThat(tp.getQueryString()).is(stringEqualsIgnoreCaseAndWhitespace(":x :q [ :p \"v\" ] ."));

		RdfBlankNode labelledNode = Rdf.bNode("b57");
		tp = defPrefix.iri("x").has(defPrefix.iri("q"), labelledNode);
		assertThat(tp.getQueryString()).is(stringEqualsIgnoreCaseAndWhitespace(":x :q _:b57 ."));
		tp = labelledNode.has(defPrefix.iri("p"), "v");
		assertThat(tp.getQueryString()).is(stringEqualsIgnoreCaseAndWhitespace("_:b57 :p \"v\". "));

		// [ foaf:name ?name ;
		// foaf:mbox <mailto:alice@example.org> ]
		bnode = Rdf.bNode(foaf.iri("name"), name).andHas(foaf.iri("mbox"), iri("mailto:alice@example.org"));
		assertThat(bnode.getQueryString()).is(stringEqualsIgnoreCaseAndWhitespace(
				"[ foaf:name ?name ;"
						+ "foaf:mbox <mailto:alice@example.org> ]"
		));
	}

	@Test
	public void example_4_2_1() {
		Variable mbox = SparqlBuilder.var("mbox");

		TriplePattern tp = GraphPatterns.tp(x, foaf.iri("name"), name).andHas(foaf.iri("mbox"), mbox);
		assertThat(tp.getQueryString()).is(stringEqualsIgnoreCaseAndWhitespace(
				"    ?x  foaf:name  ?name ;\n"
						+ "        foaf:mbox  ?mbox ."
		));
	}

	@Test
	public void example_4_2_2() {
		Prefix foaf = SparqlBuilder.prefix("foaf", iri(FOAF_NS));
		Variable x = SparqlBuilder.var("x"), name = SparqlBuilder.var("name");
		Iri nick = foaf.iri("nick");
		StringLiteral aliceNick = Rdf.literalOf("Alice"), alice_Nick = Rdf.literalOf("Alice_");

		TriplePattern tp = GraphPatterns.tp(x, nick, aliceNick, alice_Nick);
		assertThat(tp.getQueryString()).is(stringEqualsIgnoreCaseAndWhitespace(
				"?x foaf:nick  \"Alice\" , \"Alice_\" ."
		));

		tp = x.has(foaf.iri("name"), name).andHas(nick, aliceNick, alice_Nick);
		assertThat(tp.getQueryString()).is(stringEqualsIgnoreCaseAndWhitespace(
				"?x  foaf:name ?name ; foaf:nick  \"Alice\" , \"Alice_\" ."
		));
	}

	@Test
	public void example_4_2_4() {
		Prefix defPrefix = SparqlBuilder.prefix(iri(DC_NS));

		// isA() is a shortcut method to create triples using the "a" keyword
		TriplePattern tp = SparqlBuilder.var("x").isA(defPrefix.iri("Class1"));
		assertThat(tp.getQueryString()).is(stringEqualsIgnoreCaseAndWhitespace("?x  a  :Class1 ."));

		// the isA predicate is a static member of RdfPredicate
		tp = Rdf.bNode(RdfPredicate.a, defPrefix.iri("appClass")).has(defPrefix.iri("p"), "v");
		assertThat(tp.getQueryString()).is(stringEqualsIgnoreCaseAndWhitespace(
				"  [ a :appClass ] :p \"v\" ."
		));
	}
}