Skip to content
Snippets Groups Projects
Select Git revision
  • e83e90c0591756f1dbfafb4e2faaac883f9bafb9
  • master default
  • multipleinheritance
3 results

Rewrites.jrag

Blame
  • user avatar
    Anders Nilsson authored
    7a254438
    History
    Rewrites.jrag 5.81 KiB
    /* -*-Java-*- */
    
    /* 
     * Copyright (C) 2006  Anders Nilsson <anders.nilsson@cs.lth.se>
     *
     * This file is part of OntologyCompiler.
     */
    
    aspect MiscUtilities {
        boolean Element.isTopLevel() {
    		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();
        }
    
        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();
        }
    
        boolean ComplexElement.hasRdfId() {
    		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;
        }
    
        boolean ComplexElement.hasRdfResource() {
    		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");
        }
    
        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();
    				}
    			}
    		}
    		// 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_";		
    	}
    
        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();
    				}
    			}
    		}
    		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;
        }
    
        eq OwlOneOf.type() {
    		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;
        }
    
        ComplexElement ComplexElement.getTopElement() {
    		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());
    		}
        }
    
        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));
    		}
        }
    
        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));
    		}
        }
    
    	rewrite OwlClassDecl {
    		when (getId().contains("-"))
    			to OwlClassDecl {
    			setId(getId().replaceAll("-","_"));
    			return this;
    		}
    	}
    }