Author: bblfish
Date: Wed May  4 09:27:34 2011
New Revision: 1099381

URL: http://svn.apache.org/viewvc?rev=1099381&view=rev
Log:
enable schemagen to produce names of instances. This is important for EARL 
instance ontologies for example, which contain relations to test case instances 
that are not declared as types. http://www.w3.org/TR/EARL10/

Modified:
    
incubator/clerezza/trunk/parent/rdf.schemagen/src/main/java/org/apache/clerezza/rdf/schemagen/SchemaGen.java

Modified: 
incubator/clerezza/trunk/parent/rdf.schemagen/src/main/java/org/apache/clerezza/rdf/schemagen/SchemaGen.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/rdf.schemagen/src/main/java/org/apache/clerezza/rdf/schemagen/SchemaGen.java?rev=1099381&r1=1099380&r2=1099381&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/parent/rdf.schemagen/src/main/java/org/apache/clerezza/rdf/schemagen/SchemaGen.java
 (original)
+++ 
incubator/clerezza/trunk/parent/rdf.schemagen/src/main/java/org/apache/clerezza/rdf/schemagen/SchemaGen.java
 Wed May  4 09:27:34 2011
@@ -138,25 +138,39 @@ public class SchemaGen {
                out.println(" {");
 
                SortedSet<OntologyResource> ontClasses = new 
TreeSet<OntologyResource>();
-               ontClasses.addAll(getResourcesOfType(out, RDFS.Class));
-               ontClasses.addAll(getResourcesOfType(out, RDFS.Datatype));
-               ontClasses.addAll(getResourcesOfType(out, OWL.Class));
+               ontClasses.addAll(getResourcesOfType(RDFS.Class));
+               ontClasses.addAll(getResourcesOfType(RDFS.Datatype));
+               ontClasses.addAll(getResourcesOfType(OWL.Class));
+
+
+
                if (ontClasses.size() > 0) {
                        out.println("\t// Classes");
                        printResources(ontClasses.iterator(), out);
                }
                SortedSet<OntologyResource> ontProperties = new 
TreeSet<OntologyResource>();
-               ontProperties.addAll(getResourcesOfType(out, RDF.Property));
-               ontProperties.addAll(getResourcesOfType(out, 
OWL.ObjectProperty));
-               ontProperties.addAll(getResourcesOfType(out, 
OWL.DatatypeProperty));
-               //this is for some ontologies defining things that are both 
classes
-               //and properties, like image in RSS 1.0
-               ontProperties.removeAll(ontClasses);
+               //some ontologies defining things that are both classes
+               //and properties, like image in RSS 1.0 - so we remove those
+               
ontProperties.addAll(getResourcesOfType(RDF.Property,ontClasses));
+               ontProperties.addAll(getResourcesOfType( 
OWL.ObjectProperty,ontClasses));
+               
ontProperties.addAll(getResourcesOfType(OWL.DatatypeProperty,ontClasses));
+
                if (ontProperties.size() > 0) {
                        out.println();
                        out.println("\t// Properties");
                        printResources(ontProperties.iterator(), out);
                }
+
+               //create a set of classes and properties. Everything else 
should be instances
+               ontClasses.addAll(ontProperties);
+               Collection<OntologyResource> instances = 
getResourcesOfType(null, ontClasses);
+
+               if (instances.size() > 0) {
+                       out.println();
+                       out.println("\t// Properties");
+                       printResources(instances.iterator(), out);
+               }
+
                out.println("}");
        }
 
@@ -181,8 +195,17 @@ public class SchemaGen {
 
        }
 
-       private Collection<OntologyResource> getResourcesOfType(
-                       PrintWriter out, UriRef type) {
+       private Collection<OntologyResource> getResourcesOfType(UriRef type) {
+                return getResourcesOfType(type, null);
+       }
+
+       /**
+        *
+        * @param type the type of the class, or null for all things that are 
declared to be of a type
+        * @param ignore a set things to ignore
+        * @return
+        */
+       private Collection<OntologyResource> getResourcesOfType(UriRef type, 
Collection<OntologyResource> ignore) {
                Set<OntologyResource> result = new HashSet<OntologyResource>();
                Iterator<Triple> classStatemente = schemaGraph.filter(null, 
RDF.type,
                                type);
@@ -190,7 +213,8 @@ public class SchemaGen {
                        Triple triple = classStatemente.next();
                        NonLiteral classResource = triple.getSubject();
                        if (classResource instanceof BNode) {
-                               System.err.println("Ignoring anonymous resource 
of type " + type.getUnicodeString());
+                               if (type !=null) System.err.println("Ignoring 
anonymous resource of type " + type.getUnicodeString());
+                               else System.err.println("Ignoring anonymous 
resource");
                                for (Triple contextTriple : 
getNodeContext(classResource, schemaGraph)) {
                                        System.err.println(contextTriple);
                                }
@@ -214,7 +238,8 @@ public class SchemaGen {
                                if (idxSlash <= offset && idxHash <= offset) {
                                        OntologyResource ontologyResource =
                                                        new 
OntologyResource(classUri, schemaGraph);
-                                       result.add(ontologyResource);
+                                       if (ignore ==null || 
!ignore.contains(ontologyResource))
+                                               result.add(ontologyResource);
                                }
                        }
                }
@@ -306,6 +331,7 @@ public class SchemaGen {
                        int slashPos = uriValue.lastIndexOf('/');
                        int delimiter = hashPos > slashPos ? hashPos : slashPos;
                        String val = uriValue.substring(delimiter + 1);
+                       if (val.length()==0) return "THIS_ONTOLOGY";
                        //replace bad characters...
                        val = val.replace('-', '_');
                        return reservedWords.contains(val) ? val + "_" : val;
@@ -317,11 +343,32 @@ public class SchemaGen {
 
                String getDescription() {
                        StringBuffer result = new StringBuffer();
+                       Iterator<Triple> titleStatements = graph.filter(
+                                       uri, DCTERMS.title, null);
+                       while (titleStatements.hasNext()) {
+                               Resource object = 
titleStatements.next().getObject();
+                               if (object instanceof Literal) {
+                                       result.append("title: ");
+                                       result.append (((Literal) 
object).getLexicalForm());
+                                       result.append("\n");
+                               }
+                       }
+                       Iterator<Triple> descriptionStatements = graph.filter(
+                                       uri, DCTERMS.description, null);
+                       while (descriptionStatements.hasNext()) {
+                               Resource object = 
descriptionStatements.next().getObject();
+                               if (object instanceof Literal) {
+                                       result.append("description: ");
+                                       result.append (((Literal) 
object).getLexicalForm());
+                                       result.append("\n");
+                               }
+                       }
                        Iterator<Triple> skosDefStatements = graph.filter(
                                        uri, SKOS.definition, null);
                        while (skosDefStatements.hasNext()) {
                                Resource object = 
skosDefStatements.next().getObject();
                                if (object instanceof Literal) {
+                                       result.append("definition: ");
                                        result.append (((Literal) 
object).getLexicalForm());
                                        result.append("\n");
                                }
@@ -331,6 +378,7 @@ public class SchemaGen {
                        while (rdfsCommentStatements.hasNext()) {
                                Resource object = 
rdfsCommentStatements.next().getObject();
                                if (object instanceof Literal) {
+                                       result.append("comment: ");
                                        result.append(((Literal) 
object).getLexicalForm());
                                        result.append("\n");
                                }
@@ -340,15 +388,17 @@ public class SchemaGen {
                        while (skosNoteStatements.hasNext()) {
                                Resource object = 
skosNoteStatements.next().getObject();
                                if (object instanceof Literal) {
+                                       result.append("note: ");
                                        result.append (((Literal) 
object).getLexicalForm());
                                        result.append("\n");
                                }
                        }
                        Iterator<Triple> skosExampleStatements = graph.filter(
                                        uri, SKOS.example, null);
-                       while (skosNoteStatements.hasNext()) {
-                               Resource object = 
skosNoteStatements.next().getObject();
+                       while (skosExampleStatements.hasNext()) {
+                               Resource object = 
skosExampleStatements.next().getObject();
                                if (object instanceof Literal) {
+                                       result.append("example: ");
                                        result.append (((Literal) 
object).getLexicalForm());
                                        result.append("\n");
                                } else if (object instanceof UriRef) {
@@ -383,6 +433,10 @@ public class SchemaGen {
                }
        }
 
+       /*
+        * Ontology vocabs are re-defined here and not imported to avoid a 
maven dependency loop
+        */
+
        /** OWL Ontology. */
        private static class OWL {
 
@@ -421,4 +475,10 @@ public class SchemaGen {
                static final UriRef note = new 
UriRef("http://www.w3.org/2004/02/skos/core#note";);
                static final UriRef example = new 
UriRef("http://www.w3.org/2004/02/skos/core#example";);
        }
+
+       private static class DCTERMS {
+               public static final UriRef title = new 
UriRef("http://purl.org/dc/terms/title";);
+               public static final UriRef description = new 
UriRef("http://purl.org/dc/terms/description";);
+
+       }
 }


Reply via email to