All Downloads are FREE. Search and download functionalities are using the official Maven repository.

it.uniroma2.art.sheet2rdf.pearl.GraphPearlElementTripleBased Maven / Gradle / Ivy

The newest version!
package it.uniroma2.art.sheet2rdf.pearl;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.eclipse.rdf4j.model.IRI;
import org.eclipse.rdf4j.model.Value;

import it.uniroma2.art.coda.structures.ValueOrString;
import it.uniroma2.art.sheet2rdf.utils.S2RDFUtils;
import org.eclipse.rdf4j.rio.helpers.NTriplesUtil;

public class GraphPearlElementTripleBased extends GraphPearlElement {

	private List triplesList;

	public GraphPearlElementTripleBased(boolean optional, boolean delete) {
		super(optional, delete);
		triplesList = new ArrayList<>();
	}

	/**
	 * Adds a graph triple to the GraphPearlElement
	 *
	 * @param subject
	 * @param predicate if null, the serialization will replace the predicate with a placeholder like
	 *                  <please_provide_a_predicate>
	 * @param object
	 */
	public void add(String subject, IRI predicate, ValueOrString object) {
		subject = "$" + subject;
		triplesList.add(new GraphTriple(subject, predicate, object));
	}

	@Override
	public String serialize(String tabs, Map prefixMapping) {
		List triplesSerialized = new ArrayList<>();
		for (GraphTriple triple : triplesList) {
			String subject = triple.getSubject();
			String predicateSerialization = "%pls_provide_a_predicate%";
			if (triple.getPredicate() != null) {
				String qname = S2RDFUtils.asQName(triple.getPredicate(), prefixMapping);
				if (qname == null) { //not been collapsed to qname
					predicateSerialization = NTriplesUtil.toNTriplesString(triple.getPredicate());
				} else {
					predicateSerialization = qname;
				}
			}
			String objectSerialization = "";
			ValueOrString object = triple.getObject();
			if (object == null) {
				objectSerialization = "%pls_provide_a_value%";
			} else if (object.isValue()) {
				Value objValue = object.getValue();
				if (objValue instanceof IRI) {
					//try to get the IRI as qname
					String qname = S2RDFUtils.asQName((IRI) objValue, prefixMapping);
					if (qname != null) {
						objectSerialization = qname;
					} else {
						objectSerialization = NTriplesUtil.toNTriplesString(objValue);
					}
				}
			} else {
				objectSerialization = object.getString();
			}
			triplesSerialized.add(subject + " " + predicateSerialization + " " + objectSerialization + " .");
		}
		String output;
		if (triplesSerialized.size() == 1) {
			if (optional) {
				output = tabs + "OPTIONAL { " + triplesSerialized.get(0) + " }";
			} else {
				output = tabs + triplesSerialized.get(0);
			}
		} else { //multiple triple
			if (optional) {
				String optionalBlockSerialized = "";
				for (String ts : triplesSerialized) {
					optionalBlockSerialized += "\n" + tabs + "\t" + ts; //optional, so newline and a further tab
				}
				output = tabs + "OPTIONAL {" + optionalBlockSerialized + "\n" + tabs + "}";
			} else {
				output = String.join("\n" + tabs, triplesSerialized);
			}
		}
		return output;
	}


	private static class GraphTriple {

		private String subject;
		private IRI predicate;
		private ValueOrString object;

		public GraphTriple(String subject, IRI predicate, ValueOrString object) {
			this.subject = subject;
			this.predicate = predicate;
			this.object = object;
		}

		public String getSubject() {
			return subject;
		}

		public IRI getPredicate() {
			return predicate;
		}

		public ValueOrString getObject() {
			return object;
		}
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy