From 17bd9beaf7f358a44e5bf36a5855fe6727d506dc Mon Sep 17 00:00:00 2001 From: Federico Igne Date: Tue, 10 May 2022 18:17:06 +0100 Subject: [pagoda] Move project to Scala This commit includes a few changes: - The repository still uses Maven to manage dependency but it is now a Scala project. - The code has been ported from OWLAPI 3.4.10 to 5.1.20 - A proof of concept program using both RSAComb and PAGOdA has been added. --- .../karma2/model/ExtendedConjunctiveQuery.java | 94 ++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 src/main/java/org/semanticweb/karma2/model/ExtendedConjunctiveQuery.java (limited to 'src/main/java/org/semanticweb/karma2/model/ExtendedConjunctiveQuery.java') diff --git a/src/main/java/org/semanticweb/karma2/model/ExtendedConjunctiveQuery.java b/src/main/java/org/semanticweb/karma2/model/ExtendedConjunctiveQuery.java new file mode 100644 index 0000000..de2f87e --- /dev/null +++ b/src/main/java/org/semanticweb/karma2/model/ExtendedConjunctiveQuery.java @@ -0,0 +1,94 @@ +package org.semanticweb.karma2.model; + +import java.util.LinkedHashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; + +import org.semanticweb.HermiT.model.Atom; +import org.semanticweb.HermiT.model.Term; +import org.semanticweb.HermiT.model.Variable; + +import uk.ac.ox.cs.JRDFox.Prefixes; + + +public class ExtendedConjunctiveQuery extends ConjunctiveQuery { + + private Term[] ansTerms; + private Term[] terms; + + public ExtendedConjunctiveQuery( + Atom[] queryAtoms, Term[] answerTerms, Prefixes pref) { + super(queryAtoms, getExtendedHead(queryAtoms, answerTerms), pref); + this.ansTerms = answerTerms.clone(); + terms = getQueryTerms(queryAtoms); + } + + public int getNumberOfRealAnswerTerms() { + return ansTerms.length; + } + + public Term getRealAnswerTerm(int termIndex) { + return ansTerms[termIndex]; + } + + public int getNumberOfTerms() { + return terms.length; + } + + public Term[] getTerms() { + return terms; + } + + + public Atom[] getAtoms() { + return m_queryAtoms; + } + + public Term[] getRealAnswerTerms() { + return ansTerms; + } + + private static Term[] getExtendedHead(Atom[] queryAtoms, Term[] answerTerms) { + List terms = new LinkedList(); + for (Term t :answerTerms) { + terms.add(t); + } + for (Atom a : queryAtoms) { + if (a.getArgument(0) instanceof Variable && !terms.contains(a.getArgument(0))) + terms.add(a.getArgument(0)); + if (a.getArity()> 1 && a.getArgument(1) instanceof Variable && !terms.contains(a.getArgument(1))) + terms.add(a.getArgument(1)); + } + return terms.toArray(new Term[terms.size()]); + + } + + private static Term[] getQueryTerms(Atom[] queryAtoms) { + Set terms = new LinkedHashSet(); + for (Atom a : queryAtoms) { + terms.add(a.getArgument(0)); + if (a.getArity()> 1) + terms.add(a.getArgument(1)); + } + return terms.toArray(new Term[terms.size()]); + } + + + public static ExtendedConjunctiveQuery computeExtension(ConjunctiveQuery q) { + Term[] answerTerms = new Term[q.getNumberOfAnswerTerms()]; + for (int i = 0; i < q.getNumberOfAnswerTerms(); i++) + answerTerms[i] = q.getAnswerTerm(i); + Atom[] atoms = new Atom[q.getNumberOfQueryAtoms()]; + for (int i = 0; i < q.getNumberOfQueryAtoms(); i++) + atoms[i] = q.getQueryAtom(i); + return new ExtendedConjunctiveQuery(atoms, answerTerms,q.prefixes); + + } + + public Term getTerm(int i) { + return terms[i]; + } + + +} -- cgit v1.2.3