Author: rwesten
Date: Mon Oct 14 13:50:10 2013
New Revision: 1531898

URL: http://svn.apache.org/r1531898
Log:
STANBOL-1166: Entityhub Model implementation for Sesame

Added:
    
stanbol/trunk/entityhub/model/sesame/src/main/java/org/apache/stanbol/entityhub/model/sesame/ModelUtils.java
Modified:
    stanbol/trunk/entityhub/model/sesame/   (props changed)
    stanbol/trunk/entityhub/model/sesame/pom.xml
    
stanbol/trunk/entityhub/model/sesame/src/main/java/org/apache/stanbol/entityhub/model/sesame/RdfRepresentation.java
    
stanbol/trunk/entityhub/model/sesame/src/main/java/org/apache/stanbol/entityhub/model/sesame/RdfValueFactory.java

Propchange: stanbol/trunk/entityhub/model/sesame/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Mon Oct 14 13:50:10 2013
@@ -0,0 +1,7 @@
+target
+
+.settings
+
+.project
+
+.classpath

Modified: stanbol/trunk/entityhub/model/sesame/pom.xml
URL: 
http://svn.apache.org/viewvc/stanbol/trunk/entityhub/model/sesame/pom.xml?rev=1531898&r1=1531897&r2=1531898&view=diff
==============================================================================
--- stanbol/trunk/entityhub/model/sesame/pom.xml (original)
+++ stanbol/trunk/entityhub/model/sesame/pom.xml Mon Oct 14 13:50:10 2013
@@ -88,8 +88,7 @@
     </dependency>
     <dependency> <!-- the sesame repository API -->
       <groupId>org.openrdf.sesame</groupId>
-      <artifactId>sesame-repository-api</artifactId>
-      <version>2.7.7</version>
+      <artifactId>sesame-model</artifactId>
     </dependency>
     <dependency>
       <groupId>commons-collections</groupId>

Added: 
stanbol/trunk/entityhub/model/sesame/src/main/java/org/apache/stanbol/entityhub/model/sesame/ModelUtils.java
URL: 
http://svn.apache.org/viewvc/stanbol/trunk/entityhub/model/sesame/src/main/java/org/apache/stanbol/entityhub/model/sesame/ModelUtils.java?rev=1531898&view=auto
==============================================================================
--- 
stanbol/trunk/entityhub/model/sesame/src/main/java/org/apache/stanbol/entityhub/model/sesame/ModelUtils.java
 (added)
+++ 
stanbol/trunk/entityhub/model/sesame/src/main/java/org/apache/stanbol/entityhub/model/sesame/ModelUtils.java
 Mon Oct 14 13:50:10 2013
@@ -0,0 +1,134 @@
+package org.apache.stanbol.entityhub.model.sesame;
+
+import java.util.Iterator;
+
+import org.apache.commons.collections.IteratorUtils;
+import org.apache.commons.collections.Transformer;
+import org.apache.stanbol.entityhub.servicesapi.model.Representation;
+import org.apache.stanbol.entityhub.servicesapi.model.Text;
+import org.openrdf.model.BNode;
+import org.openrdf.model.Literal;
+import org.openrdf.model.URI;
+import org.openrdf.model.Value;
+import org.openrdf.model.datatypes.XMLDatatypeUtil;
+import org.openrdf.model.vocabulary.XMLSchema;
+
+/**
+ * Set of {@link Transformer}s used to convert Sesame {@link Value}s to
+ * Entityhub model instances.
+ * 
+ * @author Rupert Westenthaler
+ *
+ */
+public class ModelUtils {
+
+    /**
+     * Transforms typed literals with datatype {@link XMLSchema#STRING} to
+     * {@link Text} instances as required by some {@link Representation}
+     * methods. This transformer is usually used in front of the
+     * {@link ModelUtils#VALUE_TRANSFORMER}.<p>
+     * <b>NOTE</b> that input values other as String literals are NOT 
transformed!
+     */
+    protected static Transformer STRING_LITERAL_TO_TEXT_TRANSFORMER = new 
Transformer() {
+        
+        @Override
+        public Object transform(Object input) {
+            if(input instanceof Literal && 
XMLSchema.STRING.equals(((Literal)input).getDatatype())){
+                return new RdfText((Literal)input);
+            }
+            return input;
+        }
+    };
+    /**
+     * A {@link Value} to {@link Object} transformer intended to be used for
+     * {@link IteratorUtils#transformedIterator(Iterator, Transformer)} to
+     * convert 
+     */
+    public static Transformer VALUE_TRANSFORMER = new Transformer() {
+        
+        @Override
+        public Object transform(Object input) {
+            if(input instanceof Value){
+                Value sesameValue = (Value) input;
+                if(sesameValue instanceof URI){
+                    return new RdfReference((URI)sesameValue);
+                } else if(sesameValue instanceof Literal){
+                    Literal literal = (Literal)sesameValue;
+                    if(literal.getDatatype() == null){ //TODO: adapt to RDF1.1
+                        return new RdfText(literal);
+                    } else {
+                        return ModelUtils.transformTypedLiteral(literal);
+                    }
+                } else {
+                    return new RdfBNode((BNode)sesameValue);
+                }
+            } else { //do not transform objects of other types (incl. null)
+                return input;
+            }
+        }    
+    };
+    /**
+     * Transforms Sesmae {@link Value}s to {@link String}
+     * Emits {@link Value#stringValue()}
+     */
+    public static Transformer VALUR_TO_STRING_TRANSFORMER = new Transformer() {
+        
+        @Override
+        public String transform(Object input) {
+            return ((Value)input).stringValue();
+        }
+    };
+    /**
+     * Transforms a typed literal to the according java type.
+     * @param literal
+     * @return
+     */
+    private static Object transformTypedLiteral(Literal literal){
+        URI dataType = literal.getDatatype();
+        if(XMLSchema.INT.equals(dataType)){
+            return literal.intValue();
+        } else if(XMLSchema.LONG.equals(dataType)){
+            return literal.longValue();
+        } else if(XMLSchema.FLOAT.equals(dataType)){
+            return literal.floatValue();
+        } else if(XMLSchema.DOUBLE.equals(dataType)){
+            return literal.doubleValue();
+        } else if(XMLSchema.BOOLEAN.equals(dataType)){ 
+            return literal.booleanValue();
+        }else if(XMLSchema.INTEGER.equals(dataType)){
+            return literal.integerValue();
+        } else if(XMLSchema.DECIMAL.equals(dataType)){
+            return literal.decimalValue();
+        } else if(XMLSchema.STRING.equals(dataType)){ //explicit handle string
+            //to avoid going to a lot of equals checks
+            return literal.stringValue();
+        } else if(XMLDatatypeUtil.isCalendarDatatype(dataType)){
+            return literal.calendarValue().toGregorianCalendar().getTime();
+        } else if(XMLSchema.BYTE.equals(dataType)){
+            return literal.byteValue();
+        } else if(XMLSchema.SHORT.equals(dataType)){
+            return literal.shortValue();
+        //Start with the more exotic types at the end (for performance reasons)
+        } else if(XMLSchema.NON_NEGATIVE_INTEGER.equals(dataType) ||
+                XMLSchema.NON_POSITIVE_INTEGER.equals(dataType) ||
+                XMLSchema.NEGATIVE_INTEGER.equals(dataType) ||
+                XMLSchema.POSITIVE_INTEGER.equals(dataType)){
+            return literal.longValue();
+        } else if(XMLSchema.GDAY.equals(dataType) ||
+                XMLSchema.GMONTH.equals(dataType) ||
+                XMLSchema.GMONTHDAY.equals(dataType) ||
+                XMLSchema.GYEAR.equals(dataType) ||
+                XMLSchema.GYEARMONTH.equals(dataType)){
+            return literal.calendarValue().toGregorianCalendar().getTime();
+        } else if(XMLSchema.UNSIGNED_BYTE.equals(dataType)){
+            return literal.shortValue();
+        } else if(XMLSchema.UNSIGNED_SHORT.equals(dataType)){
+            return literal.intValue();
+        } else if(XMLSchema.UNSIGNED_INT.equals(dataType)){
+            return literal.longValue();
+        } else{
+            return literal.stringValue();
+        }
+    }
+
+}

Modified: 
stanbol/trunk/entityhub/model/sesame/src/main/java/org/apache/stanbol/entityhub/model/sesame/RdfRepresentation.java
URL: 
http://svn.apache.org/viewvc/stanbol/trunk/entityhub/model/sesame/src/main/java/org/apache/stanbol/entityhub/model/sesame/RdfRepresentation.java?rev=1531898&r1=1531897&r2=1531898&view=diff
==============================================================================
--- 
stanbol/trunk/entityhub/model/sesame/src/main/java/org/apache/stanbol/entityhub/model/sesame/RdfRepresentation.java
 (original)
+++ 
stanbol/trunk/entityhub/model/sesame/src/main/java/org/apache/stanbol/entityhub/model/sesame/RdfRepresentation.java
 Mon Oct 14 13:50:10 2013
@@ -18,15 +18,12 @@ import org.apache.stanbol.entityhub.serv
 import org.apache.stanbol.entityhub.servicesapi.model.Text;
 import org.apache.stanbol.entityhub.servicesapi.model.UnsupportedTypeException;
 import org.apache.stanbol.entityhub.servicesapi.util.ModelUtils;
-import org.openrdf.model.BNode;
 import org.openrdf.model.Literal;
 import org.openrdf.model.Model;
 import org.openrdf.model.Statement;
 import org.openrdf.model.URI;
 import org.openrdf.model.Value;
-import org.openrdf.model.datatypes.XMLDatatypeUtil;
 import org.openrdf.model.vocabulary.XMLSchema;
-import org.openrdf.repository.RepositoryException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -55,61 +52,6 @@ public class RdfRepresentation implement
     };
     
     /**
-     * Emits {@link Value#stringValue()}
-     */
-    protected Transformer stringTransformer = new Transformer() {
-        
-        @Override
-        public String transform(Object input) {
-            return ((Value)input).stringValue();
-        }
-    };
-    
-    /**
-     * A {@link Value} to {@link Object} transformer intended to be used for
-     * {@link IteratorUtils#transformedIterator(Iterator, Transformer)} to
-     * convert 
-     */
-    protected Transformer sesameTransformer = new Transformer() {
-        
-        @Override
-        public Object transform(Object input) {
-            if(input instanceof Value){
-                Value sesameValue = (Value) input;
-                if(sesameValue instanceof URI){
-                    return new RdfReference((URI)sesameValue);
-                } else if(sesameValue instanceof Literal){
-                    Literal literal = (Literal)sesameValue;
-                    if(literal.getDatatype() == null){ //TODO: adapt to RDF1.1
-                        return new RdfText(literal);
-                    } else {
-                        return transformTypedLiteral(literal);
-                    }
-                } else {
-                    return new RdfBNode((BNode)sesameValue);
-                }
-            } else { //do not transform objects of other types (incl. null)
-                return input;
-            }
-        }    
-    };
-    /**
-     * Transforms typed literals with datatype {@link XMLSchema#STRING} to
-     * {@link Text} instances as required by some {@link Representation}
-     * methods. This transformer is usually used in front of the
-     * {@link #sesameTransformer}.
-     */
-    protected Transformer stringLiteral2TextTransformer = new Transformer() {
-        
-        @Override
-        public Object transform(Object input) {
-            if(input instanceof Literal && 
XMLSchema.STRING.equals(((Literal)input).getDatatype())){
-                return new RdfText((Literal)input);
-            }
-            return input;
-        }
-    };
-    /**
      * Creates a {@link Representation} for the parsed subject. Data will be
      * added to the model.
      * @param subject the subject
@@ -122,58 +64,7 @@ public class RdfRepresentation implement
         this.factory = factory;
         this.sesameFactory = factory.getSesameFactory();
     }
-    /**
-     * Transforms a typed literal to the according java type.
-     * @param literal
-     * @return
-     */
-    protected Object transformTypedLiteral(Literal literal){
-        URI dataType = literal.getDatatype();
-        if(XMLSchema.INT.equals(dataType)){
-            return literal.intValue();
-        } else if(XMLSchema.LONG.equals(dataType)){
-            return literal.longValue();
-        } else if(XMLSchema.FLOAT.equals(dataType)){
-            return literal.floatValue();
-        } else if(XMLSchema.DOUBLE.equals(dataType)){
-            return literal.doubleValue();
-        } else if(XMLSchema.BOOLEAN.equals(dataType)){ 
-            return literal.booleanValue();
-        }else if(XMLSchema.INTEGER.equals(dataType)){
-            return literal.integerValue();
-        } else if(XMLSchema.DECIMAL.equals(dataType)){
-            return literal.decimalValue();
-        } else if(XMLSchema.STRING.equals(dataType)){ //explicit handle string
-            //to avoid going to a lot of equals checks
-            return literal.stringValue();
-        } else if(XMLDatatypeUtil.isCalendarDatatype(dataType)){
-            return literal.calendarValue().toGregorianCalendar().getTime();
-        } else if(XMLSchema.BYTE.equals(dataType)){
-            return literal.byteValue();
-        } else if(XMLSchema.SHORT.equals(dataType)){
-            return literal.shortValue();
-        //Start with the more exotic types at the end (for performance reasons)
-        } else if(XMLSchema.NON_NEGATIVE_INTEGER.equals(dataType) ||
-                XMLSchema.NON_POSITIVE_INTEGER.equals(dataType) ||
-                XMLSchema.NEGATIVE_INTEGER.equals(dataType) ||
-                XMLSchema.POSITIVE_INTEGER.equals(dataType)){
-            return literal.longValue();
-        } else if(XMLSchema.GDAY.equals(dataType) ||
-                XMLSchema.GMONTH.equals(dataType) ||
-                XMLSchema.GMONTHDAY.equals(dataType) ||
-                XMLSchema.GYEAR.equals(dataType) ||
-                XMLSchema.GYEARMONTH.equals(dataType)){
-            return literal.calendarValue().toGregorianCalendar().getTime();
-        } else if(XMLSchema.UNSIGNED_BYTE.equals(dataType)){
-            return literal.shortValue();
-        } else if(XMLSchema.UNSIGNED_SHORT.equals(dataType)){
-            return literal.intValue();
-        } else if(XMLSchema.UNSIGNED_INT.equals(dataType)){
-            return literal.longValue();
-        } else{
-            return literal.stringValue();
-        }
-    }
+    
     @Override
     public void add(String field, Object value) throws 
IllegalArgumentException {
         if(field == null){
@@ -321,7 +212,7 @@ public class RdfRepresentation implement
             IteratorUtils.transformedIterator(
                 model.filter(subject, property, null).iterator(), 
                 objectTransFormer), // get the object from the statement
-            sesameTransformer); // transform the values
+            
org.apache.stanbol.entityhub.model.sesame.ModelUtils.VALUE_TRANSFORMER); // 
transform the values
     }
 
     @Override
@@ -344,7 +235,7 @@ public class RdfRepresentation implement
             //transform results
             iterator = IteratorUtils.transformedIterator(
                 iterator, // the already filtered values
-                sesameTransformer); // need to be transformed
+                
org.apache.stanbol.entityhub.model.sesame.ModelUtils.VALUE_TRANSFORMER); // 
need to be transformed
         }
         return (Iterator<T>)iterator; 
     }
@@ -365,15 +256,15 @@ public class RdfRepresentation implement
                         model.filter(subject, property, null).iterator(), 
                         objectTransFormer), // get the object from the 
statement
                     new ValueTypeFilter<Text>(languages)), //filter languages
-                stringLiteral2TextTransformer), //transform strings to Text
-            sesameTransformer); //transform to Text instances
+                
org.apache.stanbol.entityhub.model.sesame.ModelUtils.STRING_LITERAL_TO_TEXT_TRANSFORMER),
 //transform strings to Text
+            
org.apache.stanbol.entityhub.model.sesame.ModelUtils.VALUE_TRANSFORMER); 
//transform to Text instances
     }
 
     @Override
     @SuppressWarnings("unchecked")
     public Iterator<String> getFieldNames() {
         return (Iterator<String>)IteratorUtils.transformedIterator(
-            model.predicates().iterator(), stringTransformer);
+            model.predicates().iterator(), 
org.apache.stanbol.entityhub.model.sesame.ModelUtils.VALUR_TO_STRING_TRANSFORMER);
     }
 
     @Override
@@ -457,7 +348,7 @@ public class RdfRepresentation implement
                     model.filter(subject, property, null).iterator(), 
                     objectTransFormer), // get the object from the statement
                 new ValueTypeFilter<Reference>(Reference.class)), //filter 
references
-            sesameTransformer); //transform to Text instances
+            
org.apache.stanbol.entityhub.model.sesame.ModelUtils.VALUE_TRANSFORMER); 
//transform to Text instances
     }
 
     @Override
@@ -476,8 +367,8 @@ public class RdfRepresentation implement
                         model.filter(subject, property, null).iterator(), 
                         objectTransFormer), // get the object from the 
statement
                     new ValueTypeFilter<Text>(Text.class)), //filter plain 
literals
-                stringLiteral2TextTransformer),
-            sesameTransformer); //transform to Text instances
+                
org.apache.stanbol.entityhub.model.sesame.ModelUtils.STRING_LITERAL_TO_TEXT_TRANSFORMER),
+            
org.apache.stanbol.entityhub.model.sesame.ModelUtils.VALUE_TRANSFORMER); 
//transform to Text instances
     }
 
     @Override
@@ -613,6 +504,15 @@ public class RdfRepresentation implement
             addReference(field, reference);
         }
     }
+    /**
+     * Getter for the Model used by this Representation <p>
+     * Note that this model might also contain triples with other subjects as
+     * the one used by this representation.
+     * @return the model used by this representation.
+     */
+    public Model getModel() {
+        return model;
+    }
     
     public URI getURI() {
         return subject;

Modified: 
stanbol/trunk/entityhub/model/sesame/src/main/java/org/apache/stanbol/entityhub/model/sesame/RdfValueFactory.java
URL: 
http://svn.apache.org/viewvc/stanbol/trunk/entityhub/model/sesame/src/main/java/org/apache/stanbol/entityhub/model/sesame/RdfValueFactory.java?rev=1531898&r1=1531897&r2=1531898&view=diff
==============================================================================
--- 
stanbol/trunk/entityhub/model/sesame/src/main/java/org/apache/stanbol/entityhub/model/sesame/RdfValueFactory.java
 (original)
+++ 
stanbol/trunk/entityhub/model/sesame/src/main/java/org/apache/stanbol/entityhub/model/sesame/RdfValueFactory.java
 Mon Oct 14 13:50:10 2013
@@ -8,6 +8,7 @@ import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
 
@@ -133,11 +134,18 @@ public class RdfValueFactory implements 
              throw new IllegalArgumentException("The parsed id MUST NOT be 
empty!");
          } else {
              //use the set model if present
-             Model model = this.model == null ? new TreeModel() : this.model;
-             URI subject = sesameFactory.createURI(id);
-             return new RdfRepresentation(subject, model, this);
+             return createRdfRepresentation(sesameFactory.createURI(id));
         }
     }
+    /**
+     * Creates a {@link RdfRepresentation} for the parsed {@link URI}
+     * @param subject the URI
+     * @return the {@link RdfRepresentation}
+     */
+    public RdfRepresentation createRdfRepresentation(URI subject) {
+        Model model = this.model == null ? new TreeModel() : this.model;
+        return new RdfRepresentation(subject, model, this);
+    }
 
     @Override
     public Text createText(Object value) throws UnsupportedTypeException, 
IllegalArgumentException {
@@ -171,4 +179,29 @@ public class RdfValueFactory implements 
     public org.openrdf.model.ValueFactory getSesameFactory(){
         return sesameFactory;
     }
+    /**
+     * Converts any {@link Representation} implementation to a {@link 
RdfRepresentation}
+     * backed by a Sesame {@link Model}.
+     * @param representation the representation
+     * @return the {@link RdfRepresentation}
+     */
+    public RdfRepresentation toRdfRepresentation(Representation 
representation) {
+        if(representation instanceof RdfRepresentation){
+            return (RdfRepresentation) representation;
+        } else if(representation != null){
+            //create the Clerezza Represenation
+            RdfRepresentation rdfRep = createRdfRepresentation(
+                sesameFactory.createURI(representation.getId()));
+            //Copy all values field by field
+            for (Iterator<String> fields = representation.getFieldNames(); 
fields.hasNext();) {
+                String field = fields.next();
+                for (Iterator<Object> fieldValues = representation.get(field); 
fieldValues.hasNext();) {
+                    rdfRep.add(field, fieldValues.next());
+                }
+            }
+            return rdfRep;
+        } else {
+            return null;
+        }
+    }
 }


Reply via email to