From 42ca7579c48fff47b1520fdea0721159fd91db11 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Euzenat?= <Jerome.Euzenat@inria.fr>
Date: Mon, 12 Jul 2010 13:33:42 +0000
Subject: [PATCH] - Fully implemented as HeavyLoadedOntology

---
 .../exmo/ontowrap/skosapi/SKOSThesaurus.java  | 59 +++++++++++--------
 1 file changed, 33 insertions(+), 26 deletions(-)

diff --git a/src/fr/inrialpes/exmo/ontowrap/skosapi/SKOSThesaurus.java b/src/fr/inrialpes/exmo/ontowrap/skosapi/SKOSThesaurus.java
index 58340ae9..3859adae 100644
--- a/src/fr/inrialpes/exmo/ontowrap/skosapi/SKOSThesaurus.java
+++ b/src/fr/inrialpes/exmo/ontowrap/skosapi/SKOSThesaurus.java
@@ -34,6 +34,9 @@ import org.semanticweb.skos.SKOSConcept;
 import org.semanticweb.skos.SKOSLiteral;
 import org.semanticweb.skos.SKOSUntypedLiteral;
 import org.semanticweb.skos.SKOSDataProperty;
+import org.semanticweb.skos.SKOSObjectRelationAssertion;
+import org.semanticweb.skos.properties .SKOSNarrowerProperty;
+import org.semanticweb.skos.properties .SKOSBroaderProperty;
 
 import fr.inrialpes.exmo.ontowrap.BasicOntology;
 import fr.inrialpes.exmo.ontowrap.HeavyLoadedOntology;
@@ -58,6 +61,13 @@ public class SKOSThesaurus extends BasicOntology<SKOSDataset> implements HeavyLo
      * can be interpreted in many ways. Hence a SKOS terminology is an OWL Full
      * ontology (the S is for Simple).
      *
+     * Translation from SKOS to OWL (by Antoine Isaac):
+     * skos:Concept --> owl:Class
+     * skos:broader --> rdfs:subClassOf
+     * skos:prefLabel, skos:altLabel, skos:hiddenLabel --> rdfs:label
+     * skos:notes, skos:definition, skos:scopeNote --> rdfs:comments
+     * skos:related --> rdfs:seeAlso [ignored]
+     *
      * OK So what is in the SKOS Data model, since this is the only one that we
      * will take into account...
      * [SPEC: ]: 12/07/2009
@@ -66,6 +76,8 @@ public class SKOSThesaurus extends BasicOntology<SKOSDataset> implements HeavyLo
      * Annotation properties: skos:hiddenLabel, skos:prefLabel, skos:altLabel
      * skos:note, skos:changeNote, skos:definition, skos:editorialNote, skos:example, skos:historyNote and skos:scopeNote
      * Other object relations: skos:mappingRelation, skos:closeMatch, skos:exactMatch, skos:broadMatch, skos:narrowMatch and skos:relatedMatch
+     *
+     *
     **/
 
     /**
@@ -101,7 +113,6 @@ lang = untypedLiteral.getLang();
 		  
     /**
        We should document:
-
        name < names 
        annotations
        comments(lang) < comments
@@ -122,6 +133,7 @@ lang = untypedLiteral.getLang();
 	else return getFragmentAsLabel( getEntityURI( o ) );
     }
 
+    // NEARLY DONE
     /**
      * returns one of the prefLabel property values for a given SKOS concept in a given language.
      * @param o the entity
@@ -137,9 +149,8 @@ lang = untypedLiteral.getLang();
 	else return getEntityName( o );
     }
 
-    // DONE
     /**
-     * Returns the values of the prefLabel and altLabel properties in a given language.
+     * Returns the values of the prefLabel, hiddenLabel and altLabel properties in a given language.
      * @param o the entity
      * @param lang the code of the language ("en", "fr", "es", etc.) 
      * @return the set of labels
@@ -154,12 +165,11 @@ lang = untypedLiteral.getLang();
     }
 
     /**
-     * Returns the values of the prefLabel and altLabel properties.
+     * Returns the values of the prefLabel, hiddenLabel and altLabel properties.
      * @param o the concept
      * @return the set of labels
      * @throws OntowrapException
      */
-    // DONE
     public Set<String> getEntityNames(Object o) throws OntowrapException {
 	Set<String> result = new HashSet<String>();
 	getDataValues( (SKOSConcept)o, factory.getSKOSPrefLabelProperty(), result );
@@ -201,7 +211,6 @@ lang = untypedLiteral.getLang();
 	return getEntityComments(o,null);
     }
 
-    // DONE
     /**
      * Returns all the values of the "owl:AnnotationProperty" property for a given entity. 
      * These annotations are those predefined in owl (owl:versionInfo, rdfs:label, rdfs:comment, rdfs:seeAlso and rdfs:isDefinedBy)
@@ -227,7 +236,6 @@ lang = untypedLiteral.getLang();
 	return annots;
     }
 
-    // DONE
     /**
      * There is no languages on annotations in SKOS API
      * Hence we return all of them
@@ -236,7 +244,6 @@ lang = untypedLiteral.getLang();
 	return getEntityAnnotations( o );
     }
 
-    // DONE
     public Object getEntity( URI u ) throws OntowrapException {
 	return factory.getSKOSConcept( u );
     }
@@ -249,35 +256,26 @@ lang = untypedLiteral.getLang();
 	}
     }
 
-    /* all done here */
-
-    //@SuppressWarnings("unchecked")
     public Set<?> getClasses() {
 	return onto.getSKOSConcepts();
     }
 
-    //@SuppressWarnings("unchecked")
     public Set<?> getDataProperties() {
 	return NullSet;
-	//	return null; // null or new HashSet()
     }
 
-    //@SuppressWarnings("unchecked")
     public Set<?> getEntities() {
 	return getClasses();
     }
 
-    //@SuppressWarnings("unchecked")
     public Set<?> getIndividuals() {
 	return NullSet;
     }
 
-    //@SuppressWarnings("unchecked")
     public Set<?> getObjectProperties() {
 	return NullSet;
     }
 
-    //@SuppressWarnings("unchecked")
     public Set<?> getProperties() {
 	return NullSet;
     }
@@ -334,10 +332,6 @@ lang = untypedLiteral.getLang();
     }
 
     /** THESE ARE HEAVY LOADED PRIMITIVES
-	o.getSKOSBroaderConcepts( onto )
-	o.getSKOSBroaderTransitiveConcepts( onto )
-	o.getSKOSNarrowerConcepts( onto )
-	o.getSKOSNarrowerTransitiveConcepts( onto )
      **/
     /* Capability methods */
     //    TODO
@@ -346,13 +340,27 @@ lang = untypedLiteral.getLang();
     }
 
     /* Class methods */
+    // TOIMPROVE: This is really terrible (JE)
     public Set<Object> getSubClasses( Object c, int local, int asserted, int named ) {
-    //    TODO
-	return NullSet;
+	//c.getSKOSNarrowerTransitiveConcepts( onto )
+	//return ((SKOSConcept)c).getSKOSNarrowerConcepts( onto );
+	Set<Object> result = new HashSet<Object>();
+	for ( SKOSObjectRelationAssertion trp : ((SKOSConcept)c).getObjectRelationAssertions( onto ) ) {
+	    if ( trp.getSKOSProperty() instanceof SKOSNarrowerProperty 
+		 && trp.getSKOSObject() instanceof SKOSConcept ) result.add( trp.getSKOSObject() );
+	}
+	return result;
     }
+    // TOIMPROVE
     public Set<Object> getSuperClasses( Object c, int local, int asserted, int named ){
-    //    TODO
-	return NullSet;
+	//o.getSKOSBroaderTransitiveConcepts( onto )
+	//return ((SKOSConcept)c).getSKOSBroaderConcepts( onto );
+	Set<Object> result = new HashSet<Object>();
+	for ( SKOSObjectRelationAssertion trp : ((SKOSConcept)c).getObjectRelationAssertions( onto ) ) {
+	    if ( trp.getSKOSProperty() instanceof SKOSBroaderProperty 
+		 && trp.getSKOSObject() instanceof SKOSConcept ) result.add( trp.getSKOSObject() );
+	}
+	return result;
     }
     public Set<Object> getProperties( Object c, int local, int asserted, int named ){
 	return NullSet;
@@ -384,7 +392,6 @@ lang = untypedLiteral.getLang();
     /* Individual methods */
     public Set<Object> getClasses( Object i, int local, int asserted, int named ){
 	return NullSet;
-	//return onto.getSKOSConcepts();
     }
 
 
-- 
GitLab