diff options
| author | Federico Igne <federico.igne@cs.ox.ac.uk> | 2022-05-10 18:17:06 +0100 |
|---|---|---|
| committer | Federico Igne <federico.igne@cs.ox.ac.uk> | 2022-05-11 12:34:47 +0100 |
| commit | 17bd9beaf7f358a44e5bf36a5855fe6727d506dc (patch) | |
| tree | 47e9310a0cff869d9ec017dcb2c81876407782c8 /src/main/java/org/semanticweb/karma2/model/ExtendedConjunctiveQuery.java | |
| parent | 8651164cd632a5db310b457ce32d4fbc97bdc41c (diff) | |
| download | ACQuA-17bd9beaf7f358a44e5bf36a5855fe6727d506dc.tar.gz ACQuA-17bd9beaf7f358a44e5bf36a5855fe6727d506dc.zip | |
[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.
Diffstat (limited to 'src/main/java/org/semanticweb/karma2/model/ExtendedConjunctiveQuery.java')
| -rw-r--r-- | src/main/java/org/semanticweb/karma2/model/ExtendedConjunctiveQuery.java | 94 |
1 files changed, 94 insertions, 0 deletions
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 @@ | |||
| 1 | package org.semanticweb.karma2.model; | ||
| 2 | |||
| 3 | import java.util.LinkedHashSet; | ||
| 4 | import java.util.LinkedList; | ||
| 5 | import java.util.List; | ||
| 6 | import java.util.Set; | ||
| 7 | |||
| 8 | import org.semanticweb.HermiT.model.Atom; | ||
| 9 | import org.semanticweb.HermiT.model.Term; | ||
| 10 | import org.semanticweb.HermiT.model.Variable; | ||
| 11 | |||
| 12 | import uk.ac.ox.cs.JRDFox.Prefixes; | ||
| 13 | |||
| 14 | |||
| 15 | public class ExtendedConjunctiveQuery extends ConjunctiveQuery { | ||
| 16 | |||
| 17 | private Term[] ansTerms; | ||
| 18 | private Term[] terms; | ||
| 19 | |||
| 20 | public ExtendedConjunctiveQuery( | ||
| 21 | Atom[] queryAtoms, Term[] answerTerms, Prefixes pref) { | ||
| 22 | super(queryAtoms, getExtendedHead(queryAtoms, answerTerms), pref); | ||
| 23 | this.ansTerms = answerTerms.clone(); | ||
| 24 | terms = getQueryTerms(queryAtoms); | ||
| 25 | } | ||
| 26 | |||
| 27 | public int getNumberOfRealAnswerTerms() { | ||
| 28 | return ansTerms.length; | ||
| 29 | } | ||
| 30 | |||
| 31 | public Term getRealAnswerTerm(int termIndex) { | ||
| 32 | return ansTerms[termIndex]; | ||
| 33 | } | ||
| 34 | |||
| 35 | public int getNumberOfTerms() { | ||
| 36 | return terms.length; | ||
| 37 | } | ||
| 38 | |||
| 39 | public Term[] getTerms() { | ||
| 40 | return terms; | ||
| 41 | } | ||
| 42 | |||
| 43 | |||
| 44 | public Atom[] getAtoms() { | ||
| 45 | return m_queryAtoms; | ||
| 46 | } | ||
| 47 | |||
| 48 | public Term[] getRealAnswerTerms() { | ||
| 49 | return ansTerms; | ||
| 50 | } | ||
| 51 | |||
| 52 | private static Term[] getExtendedHead(Atom[] queryAtoms, Term[] answerTerms) { | ||
| 53 | List<Term> terms = new LinkedList<Term>(); | ||
| 54 | for (Term t :answerTerms) { | ||
| 55 | terms.add(t); | ||
| 56 | } | ||
| 57 | for (Atom a : queryAtoms) { | ||
| 58 | if (a.getArgument(0) instanceof Variable && !terms.contains(a.getArgument(0))) | ||
| 59 | terms.add(a.getArgument(0)); | ||
| 60 | if (a.getArity()> 1 && a.getArgument(1) instanceof Variable && !terms.contains(a.getArgument(1))) | ||
| 61 | terms.add(a.getArgument(1)); | ||
| 62 | } | ||
| 63 | return terms.toArray(new Term[terms.size()]); | ||
| 64 | |||
| 65 | } | ||
| 66 | |||
| 67 | private static Term[] getQueryTerms(Atom[] queryAtoms) { | ||
| 68 | Set<Term> terms = new LinkedHashSet<Term>(); | ||
| 69 | for (Atom a : queryAtoms) { | ||
| 70 | terms.add(a.getArgument(0)); | ||
| 71 | if (a.getArity()> 1) | ||
| 72 | terms.add(a.getArgument(1)); | ||
| 73 | } | ||
| 74 | return terms.toArray(new Term[terms.size()]); | ||
| 75 | } | ||
| 76 | |||
| 77 | |||
| 78 | public static ExtendedConjunctiveQuery computeExtension(ConjunctiveQuery q) { | ||
| 79 | Term[] answerTerms = new Term[q.getNumberOfAnswerTerms()]; | ||
| 80 | for (int i = 0; i < q.getNumberOfAnswerTerms(); i++) | ||
| 81 | answerTerms[i] = q.getAnswerTerm(i); | ||
| 82 | Atom[] atoms = new Atom[q.getNumberOfQueryAtoms()]; | ||
| 83 | for (int i = 0; i < q.getNumberOfQueryAtoms(); i++) | ||
| 84 | atoms[i] = q.getQueryAtom(i); | ||
| 85 | return new ExtendedConjunctiveQuery(atoms, answerTerms,q.prefixes); | ||
| 86 | |||
| 87 | } | ||
| 88 | |||
| 89 | public Term getTerm(int i) { | ||
| 90 | return terms[i]; | ||
| 91 | } | ||
| 92 | |||
| 93 | |||
| 94 | } | ||
