aboutsummaryrefslogtreecommitdiff
path: root/src/uk/ac/ox/cs/pagoda/hermit/RuleHelper.java
diff options
context:
space:
mode:
authorRncLsn <rnc.lsn@gmail.com>2015-08-04 18:30:46 +0100
committerRncLsn <rnc.lsn@gmail.com>2015-08-04 18:30:46 +0100
commitc3480bb733b8bca976718a3dc2f09a21cb4b1b45 (patch)
tree648b2dacb4b162205d26856c4be4bb7389f99141 /src/uk/ac/ox/cs/pagoda/hermit/RuleHelper.java
parent0c39145b3b76b3db73db0a38d5324caa7ff3c434 (diff)
downloadACQuA-c3480bb733b8bca976718a3dc2f09a21cb4b1b45.tar.gz
ACQuA-c3480bb733b8bca976718a3dc2f09a21cb4b1b45.zip
Rules parsing.
Diffstat (limited to 'src/uk/ac/ox/cs/pagoda/hermit/RuleHelper.java')
-rw-r--r--src/uk/ac/ox/cs/pagoda/hermit/RuleHelper.java83
1 files changed, 79 insertions, 4 deletions
diff --git a/src/uk/ac/ox/cs/pagoda/hermit/RuleHelper.java b/src/uk/ac/ox/cs/pagoda/hermit/RuleHelper.java
index 81c99a4..43c5849 100644
--- a/src/uk/ac/ox/cs/pagoda/hermit/RuleHelper.java
+++ b/src/uk/ac/ox/cs/pagoda/hermit/RuleHelper.java
@@ -2,9 +2,16 @@ package uk.ac.ox.cs.pagoda.hermit;
2 2
3import org.semanticweb.HermiT.model.*; 3import org.semanticweb.HermiT.model.*;
4import uk.ac.ox.cs.pagoda.MyPrefixes; 4import uk.ac.ox.cs.pagoda.MyPrefixes;
5import uk.ac.ox.cs.pagoda.owl.OWLHelper;
5import uk.ac.ox.cs.pagoda.util.Namespace; 6import uk.ac.ox.cs.pagoda.util.Namespace;
6 7
8import java.security.InvalidParameterException;
9import java.util.ArrayList;
10
7public class RuleHelper { 11public class RuleHelper {
12 private static final String OR = "|";
13 private static final String IF = ":-";
14 private static final String AND = ",";
8 15
9// public static String abbreviateIRI(String text) { 16// public static String abbreviateIRI(String text) {
10// String prefixName, prefixIRI; 17// String prefixName, prefixIRI;
@@ -37,16 +44,16 @@ public class RuleHelper {
37 boolean lastSpace = true; 44 boolean lastSpace = true;
38 for (Atom headAtom: clause.getHeadAtoms()) { 45 for (Atom headAtom: clause.getHeadAtoms()) {
39 if ((atomText = getText(headAtom)) == null) continue; 46 if ((atomText = getText(headAtom)) == null) continue;
40 if (!lastSpace) buf.append(" v "); 47 if (!lastSpace) buf.append(" ").append(OR).append(" ");
41 buf.append(atomText); 48 buf.append(atomText);
42 lastSpace = false; 49 lastSpace = false;
43 } 50 }
44 buf.append(" :- "); 51 buf.append(" ").append(IF).append(" ");
45 lastSpace = true; 52 lastSpace = true;
46 for (Atom bodyAtom: clause.getBodyAtoms()) { 53 for (Atom bodyAtom: clause.getBodyAtoms()) {
47// for (String str: strs[1].split(", ")) { 54// for (String str: strs[1].split(", ")) {
48 if ((atomText = getText(bodyAtom)) == null) continue; 55 if ((atomText = getText(bodyAtom)) == null) continue;
49 if (!lastSpace) buf.append(", "); 56 if (!lastSpace) buf.append(AND).append(" ");
50 buf.append(atomText); 57 buf.append(atomText);
51 lastSpace = false; 58 lastSpace = false;
52 } 59 }
@@ -74,7 +81,7 @@ public class RuleHelper {
74 else builder.append(getText(p)); 81 else builder.append(getText(p));
75 builder.append("("); 82 builder.append("(");
76 builder.append(getText(atom.getArgument(0))); 83 builder.append(getText(atom.getArgument(0)));
77 builder.append(","); 84 builder.append(",");
78 builder.append(getText(atom.getArgument(1))); 85 builder.append(getText(atom.getArgument(1)));
79 builder.append(")"); 86 builder.append(")");
80 } 87 }
@@ -95,4 +102,72 @@ public class RuleHelper {
95 return MyPrefixes.PAGOdAPrefixes.abbreviateIRI(t.toString()); 102 return MyPrefixes.PAGOdAPrefixes.abbreviateIRI(t.toString());
96 } 103 }
97 104
105 public static Term parseTerm(String s) {
106 s = s.trim();
107 if(s.startsWith("?")) return Variable.create(s.substring(1));
108 return Individual.create(MyPrefixes.PAGOdAPrefixes.expandIRI(s));
109 }
110
111 public static Atom parseAtom(String s) {
112 s = s.trim();
113
114 String[] split = s.split("\\(");
115 String predicateIri = OWLHelper.removeAngles(MyPrefixes.PAGOdAPrefixes.expandText(split[0]));
116 String[] predicateArgs = split[1].substring(0, split[1].length() - 1).split(",");
117 int numOfargs = predicateArgs.length;
118 Term terms[] = new Term[predicateArgs.length];
119 for (int i = 0; i < terms.length; i++)
120 terms[i] = parseTerm(predicateArgs[i]);
121 if(numOfargs == 1) {
122 AtomicConcept atomicConcept = AtomicConcept.create(predicateIri);
123 return Atom.create(atomicConcept, terms);
124 }
125 else if(numOfargs == 2) {
126 AtomicRole atomicRole = AtomicRole.create(predicateIri);
127 return Atom.create(atomicRole, terms);
128 }
129 else
130 throw new InvalidParameterException();
131 // TODO? add equality (owl:sameAs)?
132 }
133
134 public static DLClause parseClause(String s) {
135 s = s.trim();
136 if(s.endsWith(".")) s = s.substring(0, s.length()-1).trim();
137
138 String[] headAndBody = s.split(IF);
139 String[] headAtomsStr = splitAtoms(headAndBody[0], OR);
140 String[] bodyAtomsStr = splitAtoms(headAndBody[1], AND);
141
142 Atom[] headAtoms = new Atom[headAtomsStr.length];
143 Atom[] bodyAtoms = new Atom[bodyAtomsStr.length];
144 for (int i = 0; i < headAtoms.length; i++)
145 headAtoms[i] = parseAtom(headAtomsStr[i]);
146 for (int i = 0; i < bodyAtoms.length; i++)
147 bodyAtoms[i] = parseAtom(bodyAtomsStr[i]);
148
149 return DLClause.create(headAtoms, bodyAtoms);
150 }
151
152 private static String[] splitAtoms(String s, String operator) {
153 char op = operator.charAt(0);
154 ArrayList<String> result = new ArrayList<>();
155
156 int b = 0;
157 boolean betweenParenthesis = false;
158 for (int i = 0; i < s.length(); i++) {
159 if(s.charAt(i) == '(')
160 betweenParenthesis = true;
161 else if(s.charAt(i) == ')')
162 betweenParenthesis = false;
163 else if(s.charAt(i) == op && !betweenParenthesis) {
164 result.add(s.substring(b, i));
165 b = i + 1;
166 }
167 }
168 if(b < s.length()) result.add(s.substring(b));
169
170 return result.toArray(new String[0]);
171 }
172
98} 173}