From 439a1d8ec1f56ffd88832319f9b117c52f6aa3c0 Mon Sep 17 00:00:00 2001
From: Anders Nilsson <anders.nilsson@cs.lth.se>
Date: Thu, 16 Feb 2006 11:39:40 +0100
Subject: [PATCH] Can find some simple functional properties belonging to a
 class

---
 DumpClasses.jrag |  5 ++++-
 Rewrites.jrag    | 23 +++++++++++++++++++----
 Types.jrag       | 31 ++++++++++++++++++++++++-------
 owl.ast          |  8 ++++----
 4 files changed, 51 insertions(+), 16 deletions(-)

diff --git a/DumpClasses.jrag b/DumpClasses.jrag
index efb26c0..faa8cfe 100644
--- a/DumpClasses.jrag
+++ b/DumpClasses.jrag
@@ -17,7 +17,10 @@ aspect DumpClasses {
 	pStream.print(getId());
 	pStream.print(" : "+getSuperClass().getId());	
 	pStream.print(" ::= ");
-
+	Properties props = getFunctionalProperties();
+	for (int i=0; i<props.getNumProperty(); i++) {
+	    pStream.print(props.getProperty(i).getId()+" ");
+	}
 	pStream.println(";");
     }
 }
\ No newline at end of file
diff --git a/Rewrites.jrag b/Rewrites.jrag
index 3c85ed2..08de276 100644
--- a/Rewrites.jrag
+++ b/Rewrites.jrag
@@ -38,7 +38,11 @@ aspect MiscUtilities {
 	return false;
     }
 
-    String ComplexElement.getId() {
+    syn lazy String Element.getId() {
+	return new String("Element has no ID");
+    }
+
+    eq ComplexElement.getId() {
 	if (hasRdfId()) {
 	    for (int i=0; i<getNumAttribute(); i++) {
 		if (getAttribute(i) instanceof RdfId) {
@@ -58,11 +62,11 @@ aspect MiscUtilities {
     }
 
     ComplexElement ComplexElement.getTopElement() {
-	ComplexElement e = this;
+	ASTNode e = this;
 	while (e != null && !(e instanceof RdfDeclaration)) {
-	    e = (ComplexElement) e.getParent().getParent();
+	    e = e.getParent();
 	}
-	return e;
+	return (ComplexElement) e;
     }
 }
 
@@ -88,4 +92,15 @@ aspect RewriteClasses {
 				      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));
+	}
+    }
 }
\ No newline at end of file
diff --git a/Types.jrag b/Types.jrag
index 618608f..1dd46ad 100644
--- a/Types.jrag
+++ b/Types.jrag
@@ -1,13 +1,13 @@
 /* -*-Java-*- */
 
 aspect Types {
-    syn lazy Class Class.getSuperClass();
+    syn lazy OClass OClass.getSuperClass();
     eq OwlClassDecl.getSuperClass() {
 	for (int i=0; i<getNumElement(); i++) {
 	    if (getElement(i) instanceof RdfsSubClassOf) {
 		RdfsSubClassOf e = (RdfsSubClassOf) getElement(i);
-		if (e.getElement(0) instanceof Class) {
-		    return ((Class) e.getElement(0)).decl();
+		if (e.getElement(0) instanceof OClass) {
+		    return ((OClass) e.getElement(0)).decl();
 		}
 	    }
 	}
@@ -18,7 +18,7 @@ aspect Types {
 	return null;
     }
 
-    syn lazy OwlClassDecl Class.decl();
+    syn lazy OwlClassDecl OClass.decl();
     eq OwlClassDecl.decl() = this;
     eq OwlClassUse.decl() {
 	ComplexElement top = getTopElement();
@@ -44,7 +44,7 @@ aspect Types {
 	for (int i=0; i<l.getNumChild(); i++) {
 	    OwlFunctionalProperty op = (OwlFunctionalProperty) l.getChild(i);
 	    if (op.domainIncludes(this)) {
-		p.addElement(op);
+		p.addProperty(op);
 	    }
 	}
 	return p;
@@ -62,12 +62,29 @@ aspect Properties {
 	l.add(this);
     }
 
-    boolean OwlFunctionalProperty.domainIncludes(Class clazz) {
+    boolean ASTNode.domainIncludes(OClass clazz) {
+	return false;
+    }
+
+    boolean OwlFunctionalProperty.domainIncludes(OClass clazz) {
 	for (int i=0; i<getNumElement(); i++) {
 	    if (getElement(i) instanceof RdfsDomain) {
-// 		((RdfsDomain) getElement(i)).
+ 		return ((RdfsDomain) getElement(i)).domainIncludes(clazz);
 	    }
 	}
 	return false;
     }
+
+    boolean RdfsDomain.domainIncludes(OClass clazz) {
+	for (int i=0; i<getNumElement(); i++) {
+	    if (getElement(i).domainIncludes(clazz)) {
+		return true;
+	    }
+	}
+	return false;
+    }
+
+    boolean OClass.domainIncludes(OClass clazz) {
+	return getId().equals(clazz.getId());
+    }
 }
\ No newline at end of file
diff --git a/owl.ast b/owl.ast
index 0c1696b..bda8c2e 100644
--- a/owl.ast
+++ b/owl.ast
@@ -52,8 +52,8 @@ Value ::= <STRING_LITERAL>;
 
 
 // Types generated by rewrite rules
-abstract Class : ComplexElement;
-OwlClassDecl : Class ::= <Id:String> ;
-OwlClassUse : Class ::= <Id:String> ;
+abstract OClass : ComplexElement;
+OwlClassDecl : OClass ::= <Id:String> ;
+OwlClassUse : OClass ::= <Id:String> ;
 
-Properties ::= Element*;
\ No newline at end of file
+Properties ::= Property:Element*;
-- 
GitLab