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. --- src/main/java/uk/ac/ox/cs/pagoda/MyPrefixes.java | 162 +++++++++++++++++++++++ 1 file changed, 162 insertions(+) create mode 100644 src/main/java/uk/ac/ox/cs/pagoda/MyPrefixes.java (limited to 'src/main/java/uk/ac/ox/cs/pagoda/MyPrefixes.java') diff --git a/src/main/java/uk/ac/ox/cs/pagoda/MyPrefixes.java b/src/main/java/uk/ac/ox/cs/pagoda/MyPrefixes.java new file mode 100644 index 0000000..98a4e97 --- /dev/null +++ b/src/main/java/uk/ac/ox/cs/pagoda/MyPrefixes.java @@ -0,0 +1,162 @@ +package uk.ac.ox.cs.pagoda; + +import java.util.Map; + +import uk.ac.ox.cs.pagoda.owl.OWLHelper; +import uk.ac.ox.cs.pagoda.util.Namespace; +import uk.ac.ox.cs.pagoda.util.Utility; + +public class MyPrefixes { + + public final static MyPrefixes PAGOdAPrefixes = new MyPrefixes(); + + private org.semanticweb.HermiT.Prefixes hermit = new org.semanticweb.HermiT.Prefixes(); + private uk.ac.ox.cs.JRDFox.Prefixes rdfox = new uk.ac.ox.cs.JRDFox.Prefixes(); + + public MyPrefixes() { + hermit.declareSemanticWebPrefixes(); + hermit.declarePrefix("anony:", Namespace.PAGODA_ANONY); + hermit.declarePrefix("aux:", Namespace.PAGODA_AUX); + + rdfox.declareSemanticWebPrefixes(); + rdfox.declarePrefix("anony:", Namespace.PAGODA_ANONY); + rdfox.declarePrefix("aux:", Namespace.PAGODA_AUX); + } + + public org.semanticweb.HermiT.Prefixes getHermiTPrefixes() { + return hermit; + } + + public uk.ac.ox.cs.JRDFox.Prefixes getRDFoxPrefixes() { + return rdfox; + } + + public void declarePrefix(String prefixName, String prefixIRI) { + Utility.logDebug("Prefix declared: " + prefixName + "=" + prefixIRI); + hermit.declarePrefix(prefixName, prefixIRI); + rdfox.declarePrefix(prefixName, prefixIRI); + } + + public static boolean isColon4Prefixes(String text, int index) { + if (index >= text.length() - 1) return false; + if (index > 0 && text.charAt(index - 1) == '_') return false; // _: blank node + char nextCharacter = text.charAt(index + 1); + if (nextCharacter == '-') return false; // :- + if (nextCharacter == '/') return false; // :/ + return true; + } + + public String expandText(String text) { + for (int index = 0; ;) { + index = text.indexOf(':', index); + if (!isColon4Prefixes(text, index)) { + ++index; + continue; + } + if (index == -1) return text; + int start = index - 1, ends = index + 1; + char ch; + while (start >= 0 && (ch = text.charAt(start)) != ',' && ch != '(' && ch != ' ') --start; + while (ends < text.length() && (ch = text.charAt(ends)) != '(' && ch != ',' && ch != ')') ++ends; + + String sub = text.substring(start + 1, ends); + String newSub = OWLHelper.addAngles(hermit.expandAbbreviatedIRI(sub)); + + text = text.replaceAll(sub, newSub); + index = ends + newSub.length() - sub.length(); + } + } + + public void declareNewPrefix(String iri) { + if (!iri.startsWith("<")) return ; + int index = splitPoint(iri); + if (index >= 0) { + String prefixIRI = iri.substring(1, index + 1), prefixName; + if ((prefixName = getPrefixName(prefixIRI)) == null) { + prefixName = getNewPrefixName(); + declarePrefix(prefixName, prefixIRI); + } + } + } + + /** + * detect the split point of prefix and name for an + * + * @param uri + * @param index + * @return + */ + private int splitPoint(String uri) { + int index = uri.lastIndexOf("#"); + if (index != -1) return index; + index = uri.lastIndexOf("/"); + if (index > 0 && uri.charAt(index - 1) != '/') + return index; + return -1; + } + + + private int prefixNumber = 0; + + public String getNewPrefixName() { + return "prefix" + (prefixNumber ++) + ":"; + } + + public String abbreviateIRI(String iri) { + declareNewPrefix(iri); + + if (iri.startsWith("<")) + return hermit.abbreviateIRI(OWLHelper.removeAngles(iri)); + else if (iri.contains("^^")) { + int index = iri.indexOf("^^"); + if (iri.charAt(index + 2) == '<') + return iri.substring(0, index + 2) + abbreviateIRI(iri.substring(index + 2, iri.lastIndexOf('>') + 1)); + } + return iri; + } + + /** + * expanded iri without <> + * + * @param iri + * @return + */ + public String expandIRI(String iri) { + if (hermit.canBeExpanded(iri)) + return hermit.expandAbbreviatedIRI(iri); + else if (iri.startsWith("<")) + return iri.substring(1, iri.length() - 1); + else + return iri; + } + + /** + * expanded iri with <> + * + * @param iri + * @return + */ + public String getQuotedIRI(String iri) { + if (iri.startsWith("<")) return iri; + if (hermit.canBeExpanded(iri)) + return OWLHelper.addAngles(hermit.expandAbbreviatedIRI(iri)); + return iri; + } + + public String getPrefixName(String prefixIRI) { + return hermit.getPrefixName(prefixIRI); + } + + public Map getPrefixIRIsByPrefixName() { + return hermit.getPrefixIRIsByPrefixName(); + } + + public String prefixesText() { + StringBuffer buf = new StringBuffer(); + for (Map.Entry entry: getPrefixIRIsByPrefixName().entrySet()) + buf.append("PREFIX ").append(entry.getKey()).append(" <").append(entry.getValue()).append(">").append(Utility.LINE_SEPARATOR); + return buf.toString(); + } + + +} -- cgit v1.2.3