From adaf1ffb348b9cbedb30a64b9471fc216ba5efd0 Mon Sep 17 00:00:00 2001 From: Anders Nilsson <andersn@fiol> Date: Sun, 24 Sep 2006 21:28:05 +0200 Subject: [PATCH] Can now generate abstract grammar for the small ontology. Must fix the duplicated hasSkill attribute in the Device class though. --- CompilerGeneration.jrag | 83 +++++------ Rewrites.jrag | 316 ++++++++++++++++++++++++---------------- owl.ast | 11 +- 3 files changed, 236 insertions(+), 174 deletions(-) diff --git a/CompilerGeneration.jrag b/CompilerGeneration.jrag index 561936a..2b6c253 100644 --- a/CompilerGeneration.jrag +++ b/CompilerGeneration.jrag @@ -4,63 +4,64 @@ import java.io.*; aspect AbsGrammarGeneration { void ASTNode.genAbsGrammar(PrintStream pStream) { - for (int i=0; i<getNumChild(); i++) { - getChild(i).genAbsGrammar(pStream); - } + for (int i=0; i<getNumChild(); i++) { + getChild(i).genAbsGrammar(pStream); + } } public void Start.genAbsGrammar(PrintStream pStream) { - super.genAbsGrammar(pStream); + super.genAbsGrammar(pStream); } void OwlClassDecl.genAbsGrammar(PrintStream pStream) { - pStream.print(getId()); - pStream.print(" : "+getSuperClass().getId()); - pStream.print(" ::="); - Restrictions restrs = getRestrictions(); - for (int i=0; i<restrs.getNumOwlRestriction(); i++) { - pStream.print(" "); - restrs.getOwlRestriction(i).genAbsGrammar(pStream); - } - pStream.println(";"); + pStream.print(getId()); + pStream.print(" : "+getSuperClass().getId()); + pStream.print(" ::="); + Restrictions restrs = getRestrictions(); + for (int i=0; i<restrs.getNumOwlRestriction(); i++) { + pStream.print(" "); + restrs.getOwlRestriction(i).genAbsGrammar(pStream); + } + pStream.println(";"); } void OwlRestriction.genAbsGrammar(PrintStream pStream) { - pStream.print(getRestrictionProperty().getId()); - pStream.print(":"); - pStream.print(getRestrictionClass().getId()); - if (allValuesFrom()) { - pStream.print("*"); - } + pStream.print(getRestrictionPropertyId()); + pStream.print(":"); + pStream.print(getRestrictionClassId()); + if (allValuesFrom()) { + pStream.print("*"); + } } - OwlProperty OwlRestriction.getRestrictionProperty() { - for (int i=0; i<getNumElement(); i++) { - Element e = getElement(i); - if (e instanceof OwlOnProperty) { - return (OwlProperty) ((ComplexElement) e).getElement(0); // Ugly as hell!! - } - } - return new OwlProperty(); + String OwlRestriction.getRestrictionPropertyId() { + for (int i=0; i<getNumElement(); i++) { + ComplexElement e = (ComplexElement) getElement(i); + if (e instanceof OwlOnProperty) { + return e.getId(); + } + } + return "_Unknown_"; } - OwlClassUse OwlRestriction.getRestrictionClass() { - for (int i=0; i<getNumElement(); i++) { - Element e = getElement(i); - if (e instanceof OwlAllValuesFrom || e instanceof OwlSomeValuesFrom) { - return (OwlClassUse) ((ComplexElement) e).getElement(0); // Ugly as hell!! - } - } - return new OwlClassUse(); + String OwlRestriction.getRestrictionClassId() { + for (int i=0; i<getNumElement(); i++) { + ComplexElement e = (ComplexElement) getElement(i); + if (e instanceof OwlAllValuesFrom || + e instanceof OwlSomeValuesFrom) { + return e.getId(); // Ugly as hell!! + } + } + return "_Unknown_"; } syn lazy boolean OwlRestriction.allValuesFrom() { - for (int i=0; i<getNumElement(); i++) { - if (getElement(i) instanceof OwlAllValuesFrom) { - return true; - } - } - return false; + for (int i=0; i<getNumElement(); i++) { + if (getElement(i) instanceof OwlAllValuesFrom) { + return true; + } + } + return false; } } diff --git a/Rewrites.jrag b/Rewrites.jrag index b852f6d..74f4486 100644 --- a/Rewrites.jrag +++ b/Rewrites.jrag @@ -2,184 +2,242 @@ aspect MiscUtilities { boolean Element.isTopLevel() { - if ( getParent() != null ) { - return getParent().getParent() instanceof RdfDeclaration; - } else { - return false; - } + if ( getParent() != null ) { + return getParent().getParent() instanceof RdfDeclaration; + } else { + return false; + } } syn lazy String Attribute.trim() { - String s = getValue().getSTRING_LITERAL(); - if (s.indexOf('"') == 0) { - s = s.substring(1,s.length()-1).trim(); - } - if (s.indexOf('#') > -1) { - s = s.substring(s.indexOf('#')+1,s.length()).trim(); - } - return s.trim(); + String s = getValue().getSTRING_LITERAL(); + if (s.indexOf('"') == 0) { + s = s.substring(1,s.length()-1).trim(); + } + if (s.indexOf('#') > -1) { + s = s.substring(s.indexOf('#')+1,s.length()).trim(); + } + return s.trim(); } eq RdfResource.trim() { - String s = getValue().getSTRING_LITERAL(); - if (s.indexOf('"') == 0) { - s = s.substring(1,s.length()-1).trim(); - } - if (s.indexOf('#') > -1) { - s = s.substring(s.indexOf('#')+1,s.length()).trim(); - } - if (s.equals("string")) { - s = "String"; - } - return s.trim(); + String s = getValue().getSTRING_LITERAL(); + if (s.indexOf('"') == 0) { + s = s.substring(1,s.length()-1).trim(); + } + if (s.indexOf('#') > -1) { + s = s.substring(s.indexOf('#')+1,s.length()).trim(); + } + if (s.equals("string")) { + s = "String"; + } + return s.trim(); } boolean ComplexElement.hasRdfId() { - for (int i=0; i<getNumAttribute(); i++) { - if (getAttribute(i) instanceof RdfId) { - return true; - } - } - return false; + for (int i=0; i<getNumAttribute(); i++) { + if (getAttribute(i) instanceof RdfId) { + return true; + } + } + return false; } boolean ComplexElement.hasRdfAbout() { - for (int i=0; i<getNumAttribute(); i++) { - if (getAttribute(i) instanceof RdfAbout) { - return true; - } - } - return false; + for (int i=0; i<getNumAttribute(); i++) { + if (getAttribute(i) instanceof RdfAbout) { + return true; + } + } + return false; } boolean ComplexElement.hasRdfResource() { - for (int i=0; i<getNumAttribute(); i++) { - if (getAttribute(i) instanceof RdfResource) { - return true; - } - } - return false; + for (int i=0; i<getNumAttribute(); i++) { + if (getAttribute(i) instanceof RdfResource) { + return true; + } + } + return false; } syn lazy String Element.getId() { - return new String("Element has no ID"); + return new String("Element has no ID"); } eq ComplexElement.getId() { - if (hasRdfId()) { - for (int i=0; i<getNumAttribute(); i++) { - if (getAttribute(i) instanceof RdfId) { - return getAttribute(i).trim(); - } - } - } else if (hasRdfAbout()) { - for (int i=0; i<getNumAttribute(); i++) { - if (getAttribute(i) instanceof RdfAbout) { - return getAttribute(i).trim(); - } - } - } else if (hasRdfResource()) { - for (int i=0; i<getNumAttribute(); i++) { - if (getAttribute(i) instanceof RdfResource) { - return getAttribute(i).trim(); - } - } + if (hasRdfId()) { + for (int i=0; i<getNumAttribute(); i++) { + if (getAttribute(i) instanceof RdfId) { + return getAttribute(i).trim(); + } + } + } else if (hasRdfAbout()) { + for (int i=0; i<getNumAttribute(); i++) { + if (getAttribute(i) instanceof RdfAbout) { + return getAttribute(i).trim(); + } + } + } else if (hasRdfResource()) { + for (int i=0; i<getNumAttribute(); i++) { + if (getAttribute(i) instanceof RdfResource) { + return getAttribute(i).trim(); + } + } + } + // Fall through. Could not find Id, so let's return something + // well known + return "_Unknown_"; + } + + eq OwlValuesFrom.getId() { + if (hasRdfAbout()) { + for (int i=0; i<getNumAttribute(); i++) { + if (getAttribute(i) instanceof RdfAbout) { + return getAttribute(i).trim(); + } + } + } else if (hasRdfResource()) { + for (int i=0; i<getNumAttribute(); i++) { + if (getAttribute(i) instanceof RdfResource) { + return getAttribute(i).trim(); + } + } + } else { + for (int i=0; i<getNumElement(); i++) { + ComplexElement e = (ComplexElement) getElement(i); + if (e instanceof OClass) { + return e.getId(); + } + } + } + // Fall through. Could not find Id, so let's return something + // well known + return "_Unknown_"; + } + + eq OwlProperty.getId() { + if (hasRdfId()) { + for (int i=0; i<getNumAttribute(); i++) { + if (getAttribute(i) instanceof RdfId) { + return getAttribute(i).trim(); + } + } + } else if (hasRdfAbout()) { + for (int i=0; i<getNumAttribute(); i++) { + if (getAttribute(i) instanceof RdfAbout) { + return getAttribute(i).trim(); + } + } + } else if (hasRdfResource()) { + for (int i=0; i<getNumAttribute(); i++) { + if (getAttribute(i) instanceof RdfResource) { + return getAttribute(i).trim(); + } + } + } else { + for (int i=0; i<getNumElement(); i++) { + ComplexElement e = (ComplexElement) getElement(i); + if (e instanceof OwlProperty) { + return e.getId(); + } + } + } + // Fall through. Could not find Id, so let's return something + // well known + return "_Unknown_"; } - // Fall through. Could not find Id, so let's return something - // well known - return "_Unknown_"; - } syn lazy String Element.type() = null; eq RdfsRange.type() { - if (hasRdfResource()) { - for (int i=0; i<getNumAttribute(); i++) { - if (getAttribute(i) instanceof RdfResource) { - return getAttribute(i).trim(); + if (hasRdfResource()) { + for (int i=0; i<getNumAttribute(); i++) { + if (getAttribute(i) instanceof RdfResource) { + return getAttribute(i).trim(); + } + } } - } - } - for (int i=0; i<getNumElement(); i++) { - String s = getElement(i).type(); - if (s != null) { - return s; - } - } - // Fall through. Could not find Id, so let's return something - // well known - return "_Unknown_"; + for (int i=0; i<getNumElement(); i++) { + String s = getElement(i).type(); + if (s != null) { + return s; + } + } + // Fall through. Could not find Id, so let's return something + // well known + return "_Unknown_"; } eq OwlDataRange.type() { - for (int i=0; i<getNumElement(); i++) { - String s = getElement(i).type(); - if (s != null) { - return s; - } - } - return null; + for (int i=0; i<getNumElement(); i++) { + String s = getElement(i).type(); + if (s != null) { + return s; + } + } + return null; } eq OwlOneOf.type() { - for (int i=0; i<getNumElement(); i++) { - String s = getElement(i).type(); - if (s != null) { - return s; - } - } - return null; + for (int i=0; i<getNumElement(); i++) { + String s = getElement(i).type(); + if (s != null) { + return s; + } + } + return null; } eq RdfFirst.type() { - for (int i=0; i<getNumAttribute(); i++) { - if (getAttribute(i) instanceof RdfDatatype) { - return getAttribute(i).trim(); - } - } - return null; + for (int i=0; i<getNumAttribute(); i++) { + if (getAttribute(i) instanceof RdfDatatype) { + return getAttribute(i).trim(); + } + } + return null; } ComplexElement ComplexElement.getTopElement() { - ASTNode e = this; - while (e != null && !(e instanceof RdfDeclaration)) { - e = e.getParent(); - } - return (ComplexElement) e; + ASTNode e = this; + while (e != null && !(e instanceof RdfDeclaration)) { + e = e.getParent(); + } + return (ComplexElement) e; } } aspect RewriteClasses { rewrite OwlClass { - when (isTopLevel()) - to OwlClassDecl { - return new OwlClassDecl(new List(), getElementList(), getId()); - } - when (!isTopLevel()) - to OwlClassUse { - return new OwlClassUse(new List(), getElementList(), getId()); - } + when (isTopLevel()) + to OwlClassDecl { + return new OwlClassDecl(new List(), getElementList(), getId()); + } + when (!isTopLevel()) + to OwlClassUse { + return new OwlClassUse(new List(), getElementList(), getId()); + } } rewrite RdfsSubClassOf { - when (getNumAttribute()>0 && getAttribute(0) instanceof RdfResource) - to RdfsSubClassOf { - Value value = getAttribute(0).getValue(); - OwlClass oc = new OwlClass(new List().add(new RdfAbout(value)), - new List()); - return new RdfsSubClassOf(new List(), - new List().add(oc)); - } + when (getNumAttribute()>0 && getAttribute(0) instanceof RdfResource) + to RdfsSubClassOf { + Value value = getAttribute(0).getValue(); + OwlClass oc = new OwlClass(new List().add(new RdfAbout(value)), + new List()); + return new RdfsSubClassOf(new List(), + new List().add(oc)); + } } rewrite RdfsDomain { - when (getNumAttribute()>0 && getAttribute(0) instanceof RdfResource) - to RdfsDomain { - Value value = getAttribute(0).getValue(); - OwlClass oc = new OwlClass(new List().add(new RdfAbout(value)), - new List()); - return new RdfsDomain(new List(), - new List().add(oc)); - } + when (getNumAttribute()>0 && getAttribute(0) instanceof RdfResource) + to RdfsDomain { + Value value = getAttribute(0).getValue(); + OwlClass oc = new OwlClass(new List().add(new RdfAbout(value)), + new List()); + return new RdfsDomain(new List(), + new List().add(oc)); + } } } diff --git a/owl.ast b/owl.ast index b9b120e..19b4e67 100644 --- a/owl.ast +++ b/owl.ast @@ -18,7 +18,7 @@ RdfsSubClassOf : ComplexElement; RdfsSubPropertyOf : ComplexElement; OwlOntology : ComplexElement; OwlAllDifferent : ComplexElement; -OwlAllValuesFrom : ComplexElement; +OwlAllValuesFrom : OwlValuesFrom; OwlCardinality : ComplexElement; OwlClass : ComplexElement; OwlDataRange : ComplexElement; @@ -33,7 +33,7 @@ OwlMinCardinality : ComplexElement; OwlObjectProperty : OwlProperty; OwlOneOf : ComplexElement; OwlOnProperty : OwlProperty; -OwlSomeValuesFrom : ComplexElement; +OwlSomeValuesFrom : OwlValuesFrom; OwlRestriction : ComplexElement; OwlUnionOf : ComplexElement; @@ -63,12 +63,15 @@ XmlnsOwl : Attribute; Value ::= <STRING_LITERAL>; -// Types generated by rewrite rules +// Types used by rewrite rules abstract OClass : ComplexElement; OwlClassDecl : OClass ::= <Id:String> ; OwlClassUse : OClass ::= <Id:String> ; +abstract OwlValuesFrom: ComplexElement; + + Properties ::= Property:Element*; Restrictions ::= OwlRestriction*; -OwlProperty : ComplexElement; +abstract OwlProperty : ComplexElement; -- GitLab