Author: rwesten
Date: Wed Mar 26 08:08:33 2014
New Revision: 1581735
URL: http://svn.apache.org/r1581735
Log:
fix for STANBOL-1301 for 0.12.1. This also adds a new UnitTest for the example
used in the Issue
Modified:
stanbol/branches/release-0.12/entityhub/model/sesame/src/main/java/org/apache/stanbol/entityhub/model/sesame/RdfRepresentation.java
stanbol/branches/release-0.12/entityhub/model/sesame/src/main/java/org/apache/stanbol/entityhub/model/sesame/ValueTypeFilter.java
stanbol/branches/release-0.12/entityhub/model/sesame/src/test/java/org/apache/stanbol/entityhub/model/sesame/RdfRepresentationTest.java
Modified:
stanbol/branches/release-0.12/entityhub/model/sesame/src/main/java/org/apache/stanbol/entityhub/model/sesame/RdfRepresentation.java
URL:
http://svn.apache.org/viewvc/stanbol/branches/release-0.12/entityhub/model/sesame/src/main/java/org/apache/stanbol/entityhub/model/sesame/RdfRepresentation.java?rev=1581735&r1=1581734&r2=1581735&view=diff
==============================================================================
---
stanbol/branches/release-0.12/entityhub/model/sesame/src/main/java/org/apache/stanbol/entityhub/model/sesame/RdfRepresentation.java
(original)
+++
stanbol/branches/release-0.12/entityhub/model/sesame/src/main/java/org/apache/stanbol/entityhub/model/sesame/RdfRepresentation.java
Wed Mar 26 08:08:33 2014
@@ -16,6 +16,9 @@
*/
package org.apache.stanbol.entityhub.model.sesame;
+import static
org.apache.commons.collections.PredicateUtils.instanceofPredicate;
+import static org.apache.commons.collections.PredicateUtils.notPredicate;
+
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.ArrayList;
@@ -27,6 +30,8 @@ import javax.xml.datatype.Duration;
import javax.xml.datatype.XMLGregorianCalendar;
import org.apache.commons.collections.IteratorUtils;
+import org.apache.commons.collections.Predicate;
+import org.apache.commons.collections.PredicateUtils;
import org.apache.commons.collections.Transformer;
import org.apache.stanbol.entityhub.servicesapi.defaults.DataTypeEnum;
import org.apache.stanbol.entityhub.servicesapi.model.Reference;
@@ -34,6 +39,7 @@ 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;
@@ -225,9 +231,11 @@ public class RdfRepresentation implement
}
URI property = sesameFactory.createURI(field);
return IteratorUtils.transformedIterator(
- IteratorUtils.transformedIterator(
- model.filter(subject, property, null).iterator(),
- objectTransFormer), // get the object from the statement
+ IteratorUtils.filteredIterator(
+ IteratorUtils.transformedIterator(
+ model.filter(subject, property, null).iterator(),
+ objectTransFormer), // get the object from the statement
+ notPredicate(instanceofPredicate(BNode.class))),
org.apache.stanbol.entityhub.model.sesame.ModelUtils.VALUE_TRANSFORMER); //
transform the values
}
Modified:
stanbol/branches/release-0.12/entityhub/model/sesame/src/main/java/org/apache/stanbol/entityhub/model/sesame/ValueTypeFilter.java
URL:
http://svn.apache.org/viewvc/stanbol/branches/release-0.12/entityhub/model/sesame/src/main/java/org/apache/stanbol/entityhub/model/sesame/ValueTypeFilter.java?rev=1581735&r1=1581734&r2=1581735&view=diff
==============================================================================
---
stanbol/branches/release-0.12/entityhub/model/sesame/src/main/java/org/apache/stanbol/entityhub/model/sesame/ValueTypeFilter.java
(original)
+++
stanbol/branches/release-0.12/entityhub/model/sesame/src/main/java/org/apache/stanbol/entityhub/model/sesame/ValueTypeFilter.java
Wed Mar 26 08:08:33 2014
@@ -80,9 +80,11 @@ class ValueTypeFilter<T> implements Pred
@Override
public boolean evaluate(Object object) {
- if(sesameType != null){
+ if(object == null){
+ return false;
+ } else if(sesameType != null){
return sesameType.isAssignableFrom(object.getClass());
- } else if(referenceState && object instanceof URI || object instanceof
BNode){
+ } else if(referenceState && object instanceof URI){
return true;
} else if(object instanceof Literal){
Literal literal = (Literal)object;
Modified:
stanbol/branches/release-0.12/entityhub/model/sesame/src/test/java/org/apache/stanbol/entityhub/model/sesame/RdfRepresentationTest.java
URL:
http://svn.apache.org/viewvc/stanbol/branches/release-0.12/entityhub/model/sesame/src/test/java/org/apache/stanbol/entityhub/model/sesame/RdfRepresentationTest.java?rev=1581735&r1=1581734&r2=1581735&view=diff
==============================================================================
---
stanbol/branches/release-0.12/entityhub/model/sesame/src/test/java/org/apache/stanbol/entityhub/model/sesame/RdfRepresentationTest.java
(original)
+++
stanbol/branches/release-0.12/entityhub/model/sesame/src/test/java/org/apache/stanbol/entityhub/model/sesame/RdfRepresentationTest.java
Wed Mar 26 08:08:33 2014
@@ -28,13 +28,24 @@ import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
+import org.apache.stanbol.entityhub.servicesapi.model.Reference;
import org.apache.stanbol.entityhub.servicesapi.model.Representation;
import org.apache.stanbol.entityhub.servicesapi.model.Text;
import org.apache.stanbol.entityhub.servicesapi.model.ValueFactory;
import org.apache.stanbol.entityhub.test.model.RepresentationTest;
import org.junit.Before;
import org.junit.Test;
+import org.openrdf.model.BNode;
import org.openrdf.model.Literal;
+import org.openrdf.model.Model;
+import org.openrdf.model.URI;
+import org.openrdf.model.impl.BNodeImpl;
+import org.openrdf.model.impl.LiteralImpl;
+import org.openrdf.model.impl.URIImpl;
+import org.openrdf.model.vocabulary.DCTERMS;
+import org.openrdf.model.vocabulary.RDF;
+import org.openrdf.model.vocabulary.RDFS;
+import org.openrdf.model.vocabulary.SKOS;
import org.openrdf.model.vocabulary.XMLSchema;
@@ -192,6 +203,42 @@ public class RdfRepresentationTest exten
assertEquals(dateValue, dateValues.next());
assertFalse(dateValues.hasNext());
}
+ /**
+ * Test for STANBOL-1301
+ */
+ @Test
+ public void testBNodeFiltering(){
+ URI concept = new URIImpl("http://example.org/mySkos#Concept123");
+ Representation r = createRepresentation(concept.stringValue());
+ assertTrue(r instanceof RdfRepresentation);
+ RdfRepresentation rep = (RdfRepresentation)r;
+ //add the example as listed in STANBOL-1301 to directly to the
+ //Sesame Model backing the created Representation
+ Model m = rep.getModel();
+ m.add(concept,RDF.TYPE,SKOS.CONCEPT);
+ m.add(concept,DCTERMS.IDENTIFIER, new LiteralImpl("123"));
+ m.add(concept, SKOS.PREF_LABEL, new LiteralImpl("Concept123","en"));
+
+ BNode note1 = new
BNodeImpl("5d8580be71044a88bcfe9852d1e9cfb6node17c4j452vx19576");
+ m.add(concept, SKOS.SCOPE_NOTE, note1);
+ m.add(note1, DCTERMS.CREATOR, new LiteralImpl("User1"));
+ m.add(note1, DCTERMS.CREATED, new
LiteralImpl("2013-03-03T02:02:02Z",XMLSchema.DATETIME));
+ m.add(note1, RDFS.COMMENT, new LiteralImpl("The scope of this example
global","en"));
+
+ BNode note2 = new
BNodeImpl("5d8580be71044a88bcfe9852d1e9cfb6node17c4j452vx19634");
+ m.add(concept, SKOS.SCOPE_NOTE, note2);
+ m.add(note2, DCTERMS.CREATOR, new LiteralImpl("User2"));
+ m.add(note2, DCTERMS.CREATED, new
LiteralImpl("2013-03-03T04:04:04Z",XMLSchema.DATETIME));
+ m.add(note2, RDFS.COMMENT, new LiteralImpl("Der Geltungsbereich ist
Global","de"));
+
+ //now assert that BNodes are not reported via the Representation API
+ Iterator<Object> scopeNotes = rep.get(SKOS.SCOPE_NOTE.stringValue());
+ assertFalse(scopeNotes.hasNext());
+
+ Iterator<Reference> scopeNoteRefs =
rep.getReferences(SKOS.SCOPE_NOTE.stringValue());
+ assertFalse(scopeNoteRefs.hasNext());
+ }
+
//TODO add tests for adding Integers, Doubles, ... and getting
TypedLiterals
public static void main(String[] args) {
RdfRepresentationTest test = new RdfRepresentationTest();