You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2015/06/17 22:55:22 UTC

[08/15] jena git commit: fix head conflict + adding tests

fix head conflict + adding tests


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/8e9babe7
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/8e9babe7
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/8e9babe7

Branch: refs/heads/master
Commit: 8e9babe75ccfa9024035bb19f8257ad0dbd5018e
Parents: c7d099d
Author: Alexis Miara <al...@hotmail.com>
Authored: Mon Jun 1 09:51:27 2015 -0400
Committer: Alexis Miara <al...@hotmail.com>
Committed: Mon Jun 1 09:51:27 2015 -0400

----------------------------------------------------------------------
 .../jena/query/text/EntityDefinition.java       |   9 ++
 .../jena/query/text/TextDocProducerTriples.java |  24 +++-
 .../org/apache/jena/query/text/TextIndex.java   |   1 +
 .../apache/jena/query/text/TextIndexLucene.java |  28 +++-
 .../apache/jena/query/text/TextIndexSolr.java   |   8 +-
 .../assembler/EntityDefinitionAssembler.java    |   5 +
 .../jena/query/text/assembler/TextVocab.java    |   1 +
 .../AbstractTestDatasetWithTextIndexBase.java   |  43 ++++++-
 .../org/apache/jena/query/text/TS_Text.java     |   1 +
 ...tDatasetWithLuceneMultilingualTextIndex.java |   2 +-
 ...DatasetWithLuceneTextIndexWithLangField.java |   2 +-
 ...tDatasetWithLuceneTextIndexWithUidField.java | 129 +++++++++++++++++++
 12 files changed, 241 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/8e9babe7/jena-text/src/main/java/org/apache/jena/query/text/EntityDefinition.java
----------------------------------------------------------------------
diff --git a/jena-text/src/main/java/org/apache/jena/query/text/EntityDefinition.java b/jena-text/src/main/java/org/apache/jena/query/text/EntityDefinition.java
index 2a68247..69cca8c 100644
--- a/jena-text/src/main/java/org/apache/jena/query/text/EntityDefinition.java
+++ b/jena-text/src/main/java/org/apache/jena/query/text/EntityDefinition.java
@@ -43,6 +43,7 @@ public class EntityDefinition {
     private final String                     primaryField ;
     private String                           graphField = null ;
     private String                           langField ;
+    private String                           uidField ;
 
     /**
      * @param entityField
@@ -171,6 +172,14 @@ public class EntityDefinition {
         this.langField = langField;
     }
 
+    public String getUidField() {
+        return uidField;
+    }
+
+    public void setUidField(String uidField) {
+        this.uidField = uidField;
+    }
+
     public Collection<String> fields() {
         return fields ;
     }

http://git-wip-us.apache.org/repos/asf/jena/blob/8e9babe7/jena-text/src/main/java/org/apache/jena/query/text/TextDocProducerTriples.java
----------------------------------------------------------------------
diff --git a/jena-text/src/main/java/org/apache/jena/query/text/TextDocProducerTriples.java b/jena-text/src/main/java/org/apache/jena/query/text/TextDocProducerTriples.java
index c0bcabd..51f5480 100644
--- a/jena-text/src/main/java/org/apache/jena/query/text/TextDocProducerTriples.java
+++ b/jena-text/src/main/java/org/apache/jena/query/text/TextDocProducerTriples.java
@@ -56,17 +56,29 @@ public class TextDocProducerTriples implements TextDocProducer {
     public void change(QuadAction qaction, Node g, Node s, Node p, Node o) {
         // One document per triple/quad
 
-        if ( qaction != QuadAction.ADD )
+        if ( qaction != QuadAction.ADD &&
+             qaction != QuadAction.DELETE )
             return ;
 
+
         Entity entity = TextQueryFuncs.entityFromQuad(defn, g, s, p, o) ;
         // Null means does not match defn
         if ( entity != null ) {
-            indexer.addEntity(entity) ;
-            
-            // Auto commit the entity if we aren't in a transaction
-            if (!inTransaction.get()) {
-                indexer.commit() ;
+            if (qaction == QuadAction.ADD) {
+                indexer.addEntity(entity);
+
+                // Auto commit the entity if we aren't in a transaction
+                if (!inTransaction.get()) {
+                    indexer.commit();
+                }
+            }
+            else if (qaction == QuadAction.DELETE) {
+                indexer.deleteEntity(entity);
+
+                // Auto commit the entity if we aren't in a transaction
+                if (!inTransaction.get()) {
+                    indexer.commit();
+                }
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/jena/blob/8e9babe7/jena-text/src/main/java/org/apache/jena/query/text/TextIndex.java
----------------------------------------------------------------------
diff --git a/jena-text/src/main/java/org/apache/jena/query/text/TextIndex.java b/jena-text/src/main/java/org/apache/jena/query/text/TextIndex.java
index fe19b7b..bb67cfd 100644
--- a/jena-text/src/main/java/org/apache/jena/query/text/TextIndex.java
+++ b/jena-text/src/main/java/org/apache/jena/query/text/TextIndex.java
@@ -36,6 +36,7 @@ public interface TextIndex extends Closeable //, Transactional
     // Update operations
     void addEntity(Entity entity) ;
     void updateEntity(Entity entity) ;
+    void deleteEntity(Entity entity) ;
     
     
     // read operations

http://git-wip-us.apache.org/repos/asf/jena/blob/8e9babe7/jena-text/src/main/java/org/apache/jena/query/text/TextIndexLucene.java
----------------------------------------------------------------------
diff --git a/jena-text/src/main/java/org/apache/jena/query/text/TextIndexLucene.java b/jena-text/src/main/java/org/apache/jena/query/text/TextIndexLucene.java
index 9c14c27..36d9e86 100644
--- a/jena-text/src/main/java/org/apache/jena/query/text/TextIndexLucene.java
+++ b/jena-text/src/main/java/org/apache/jena/query/text/TextIndexLucene.java
@@ -22,6 +22,7 @@ import java.io.IOException ;
 import java.util.* ;
 import java.util.Map.Entry ;
 
+import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.graph.NodeFactory ;
 import org.apache.jena.sparql.util.NodeFactoryExtra ;
@@ -211,6 +212,26 @@ public class TextIndexLucene implements TextIndex {
         indexWriter.addDocument(doc) ;
     }
 
+    @Override
+    public void deleteEntity(Entity entity) {
+        if (docDef.getUidField() == null)
+            return;
+
+        if ( log.isDebugEnabled() )
+            log.debug("Delete entity: "+entity) ;
+        try {
+            Map<String, Object> map = entity.getMap();
+            String property = map.keySet().iterator().next();
+            String value = (String)map.get(property);
+            String key = entity.getGraph() + "-" + entity.getId() + "-" + property + "-" + value + "-" + entity.getLanguage();
+            Term uid = new Term(docDef.getUidField(), DigestUtils.sha256Hex(key));
+            indexWriter.deleteDocuments(uid);
+
+        } catch (Exception e) {
+            throw new TextIndexException(e) ;
+        }
+    }
+
     protected Document doc(Entity entity) {
         Document doc = new Document() ;
         Field entField = new Field(docDef.getEntityField(), entity.getId(), ftIRI) ;
@@ -223,13 +244,18 @@ public class TextIndexLucene implements TextIndex {
         }
 
         String langField = docDef.getLangField() ;
+        String uidField = docDef.getUidField() ;
 
         for ( Entry<String, Object> e : entity.getMap().entrySet() ) {
             doc.add( new Field(e.getKey(), (String) e.getValue(), ftText) );
             if (langField != null) {
                 String lang = entity.getLanguage();
                 if (lang != null && !"".equals(lang))
-                    doc.add(new Field(docDef.getLangField(), lang, StringField.TYPE_STORED));
+                    doc.add(new Field(langField, lang, StringField.TYPE_STORED));
+            }
+            if (uidField != null) {
+                String key = entity.getGraph() + "-" + entity.getId() + "-" + e.getKey() + "-" + e.getValue() + "-" + entity.getLanguage();
+                doc.add(new Field(uidField, DigestUtils.sha256Hex(key), StringField.TYPE_STORED));
             }
         }
         return doc ;

http://git-wip-us.apache.org/repos/asf/jena/blob/8e9babe7/jena-text/src/main/java/org/apache/jena/query/text/TextIndexSolr.java
----------------------------------------------------------------------
diff --git a/jena-text/src/main/java/org/apache/jena/query/text/TextIndexSolr.java b/jena-text/src/main/java/org/apache/jena/query/text/TextIndexSolr.java
index 718d4c7..de011bf 100644
--- a/jena-text/src/main/java/org/apache/jena/query/text/TextIndexSolr.java
+++ b/jena-text/src/main/java/org/apache/jena/query/text/TextIndexSolr.java
@@ -104,7 +104,13 @@ public class TextIndexSolr implements TextIndex
         }
     }
 
-    private SolrInputDocument solrDoc(Entity entity) {
+    @Override
+    public void deleteEntity(Entity entity) {
+         //to be implemented
+    }
+
+    private SolrInputDocument solrDoc(Entity entity)
+    {
         SolrInputDocument doc = new SolrInputDocument() ;
         doc.addField(docDef.getEntityField(), entity.getId()) ;
 

http://git-wip-us.apache.org/repos/asf/jena/blob/8e9babe7/jena-text/src/main/java/org/apache/jena/query/text/assembler/EntityDefinitionAssembler.java
----------------------------------------------------------------------
diff --git a/jena-text/src/main/java/org/apache/jena/query/text/assembler/EntityDefinitionAssembler.java b/jena-text/src/main/java/org/apache/jena/query/text/assembler/EntityDefinitionAssembler.java
index 5d9f97c..48bd94d 100644
--- a/jena-text/src/main/java/org/apache/jena/query/text/assembler/EntityDefinitionAssembler.java
+++ b/jena-text/src/main/java/org/apache/jena/query/text/assembler/EntityDefinitionAssembler.java
@@ -69,6 +69,9 @@ public class EntityDefinitionAssembler extends AssemblerBase implements Assemble
                                         "  OPTIONAL {" ,
                                         "    ?eMap :langField ?langField" ,
                                         "  }",
+                                        "  OPTIONAL {" ,
+                                        "    ?eMap :uidField ?uidField" ,
+                                        "  }",
             "}") ;
         ParameterizedSparqlString pss = new ParameterizedSparqlString(qs1) ;
         pss.setIri("eMap", root.getURI()) ;
@@ -92,6 +95,7 @@ public class EntityDefinitionAssembler extends AssemblerBase implements Assemble
         String graphField = qsol1.contains("graphField") ? qsol1.getLiteral("graphField").getLexicalForm() : null;
         String langField = qsol1.contains("langField") ? qsol1.getLiteral("langField").getLexicalForm() : null;
         String defaultField = qsol1.contains("dftField") ? qsol1.getLiteral("dftField").getLexicalForm() : null ;
+        String uniqueIdField = qsol1.contains("uidField") ? qsol1.getLiteral("uidField").getLexicalForm() : null;
 
         Multimap<String, Node> mapDefs = HashMultimap.create() ; 
         Map<String, Analyzer> analyzerDefs = new HashMap<>();
@@ -162,6 +166,7 @@ public class EntityDefinitionAssembler extends AssemblerBase implements Assemble
         EntityDefinition docDef = new EntityDefinition(entityField, defaultField);
         docDef.setGraphField(graphField);
         docDef.setLangField(langField);
+        docDef.setUidField(uniqueIdField);
         for ( String f : mapDefs.keys() ) {
             for ( Node p : mapDefs.get(f)) 
                 docDef.set(f, p) ;

http://git-wip-us.apache.org/repos/asf/jena/blob/8e9babe7/jena-text/src/main/java/org/apache/jena/query/text/assembler/TextVocab.java
----------------------------------------------------------------------
diff --git a/jena-text/src/main/java/org/apache/jena/query/text/assembler/TextVocab.java b/jena-text/src/main/java/org/apache/jena/query/text/assembler/TextVocab.java
index 802990d..743d773 100644
--- a/jena-text/src/main/java/org/apache/jena/query/text/assembler/TextVocab.java
+++ b/jena-text/src/main/java/org/apache/jena/query/text/assembler/TextVocab.java
@@ -49,6 +49,7 @@ public class TextVocab
     public static final Property pDefaultField      = Vocab.property(NS, "defaultField") ;
     public static final Property pGraphField        = Vocab.property(NS, "graphField") ;
     public static final Property pLangField         = Vocab.property(NS, "langField") ;
+    public static final Property pUidField          = Vocab.property(NS, "uidField") ;
     public static final Property pMap               = Vocab.property(NS, "map") ;
     public static final Property pField             = Vocab.property(NS, "field") ;
     public static final Property pPredicate         = Vocab.property(NS, "predicate") ;

http://git-wip-us.apache.org/repos/asf/jena/blob/8e9babe7/jena-text/src/test/java/org/apache/jena/query/text/AbstractTestDatasetWithTextIndexBase.java
----------------------------------------------------------------------
diff --git a/jena-text/src/test/java/org/apache/jena/query/text/AbstractTestDatasetWithTextIndexBase.java b/jena-text/src/test/java/org/apache/jena/query/text/AbstractTestDatasetWithTextIndexBase.java
index b51651f..94f947c 100644
--- a/jena-text/src/test/java/org/apache/jena/query/text/AbstractTestDatasetWithTextIndexBase.java
+++ b/jena-text/src/test/java/org/apache/jena/query/text/AbstractTestDatasetWithTextIndexBase.java
@@ -19,6 +19,7 @@
 package org.apache.jena.query.text;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
 import java.io.Reader;
@@ -28,6 +29,10 @@ import java.util.Set;
 import org.apache.jena.atlas.lib.StrUtils;
 import org.apache.jena.query.* ;
 import org.apache.jena.rdf.model.Model ;
+import org.apache.jena.update.UpdateExecutionFactory;
+import org.apache.jena.update.UpdateFactory;
+import org.apache.jena.update.UpdateProcessor;
+import org.apache.jena.update.UpdateRequest;
 
 /*
  * This abstract class defines a collection of test methods for testing
@@ -60,12 +65,25 @@ public abstract class AbstractTestDatasetWithTextIndexBase {
     }
     
     protected void doTestSearch(String label, String turtle, String queryString, Set<String> expectedEntityURIs, int expectedNumResults) {
+        loadData(turtle);
+        doTestQuery(dataset, label, queryString, expectedEntityURIs, expectedNumResults);
+    }
+
+    protected void doTestSearchNoResult(String turtle, String queryString) {
+        doTestSearchNoResult("", turtle, queryString);
+    }
+
+    protected void doTestSearchNoResult(String label, String turtle, String queryString) {
+        loadData(turtle);
+        doTestNoResult(dataset, label, queryString);
+    }
+
+    protected void loadData(String turtle) {
         Model model = dataset.getDefaultModel();
         Reader reader = new StringReader(turtle);
         dataset.begin(ReadWrite.WRITE);
         model.read(reader, "", "TURTLE");
         dataset.commit();
-        doTestQuery(dataset, label, queryString, expectedEntityURIs, expectedNumResults);
     }
     
     public static void doTestQuery(Dataset dataset, String label, String queryString, Set<String> expectedEntityURIs, int expectedNumResults) {
@@ -73,7 +91,7 @@ public abstract class AbstractTestDatasetWithTextIndexBase {
         dataset.begin(ReadWrite.READ);
         try(QueryExecution qexec = QueryExecutionFactory.create(query, dataset)) {
             ResultSet results = qexec.execSelect() ;
-            
+
             assertEquals(label, expectedNumResults > 0, results.hasNext());
             int count;
             for (count=0; results.hasNext(); count++) {
@@ -86,4 +104,25 @@ public abstract class AbstractTestDatasetWithTextIndexBase {
             dataset.end() ;
         }        
     }
+
+    public static void doTestNoResult(Dataset dataset, String label, String queryString) {
+        Query query = QueryFactory.create(queryString) ;
+        dataset.begin(ReadWrite.READ);
+        try(QueryExecution qexec = QueryExecutionFactory.create(query, dataset)) {
+            ResultSet results = qexec.execSelect() ;
+            assertFalse(label, results.hasNext());
+        }
+        finally {
+            dataset.end() ;
+        }
+    }
+
+    protected void doUpdate(String updateString) {
+        dataset.begin(ReadWrite.WRITE);
+        UpdateRequest request = UpdateFactory.create(updateString);
+        UpdateProcessor proc = UpdateExecutionFactory.create(request, dataset);
+        proc.execute();
+        dataset.commit();
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/8e9babe7/jena-text/src/test/java/org/apache/jena/query/text/TS_Text.java
----------------------------------------------------------------------
diff --git a/jena-text/src/test/java/org/apache/jena/query/text/TS_Text.java b/jena-text/src/test/java/org/apache/jena/query/text/TS_Text.java
index 6d1cb25..471b129 100644
--- a/jena-text/src/test/java/org/apache/jena/query/text/TS_Text.java
+++ b/jena-text/src/test/java/org/apache/jena/query/text/TS_Text.java
@@ -32,6 +32,7 @@ import org.junit.runners.Suite.SuiteClasses ;
     , TestDatasetWithLuceneTextIndex.class
     , TestDatasetWithLuceneMultilingualTextIndex.class
     , TestDatasetWithLuceneTextIndexWithLangField.class
+    , TestDatasetWithLuceneTextIndexWithUidField.class
     , TestDatasetWithLuceneGraphTextIndex.class
     
     // Embedded solr not supported 

http://git-wip-us.apache.org/repos/asf/jena/blob/8e9babe7/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithLuceneMultilingualTextIndex.java
----------------------------------------------------------------------
diff --git a/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithLuceneMultilingualTextIndex.java b/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithLuceneMultilingualTextIndex.java
index 53e2426..18acda8 100644
--- a/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithLuceneMultilingualTextIndex.java
+++ b/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithLuceneMultilingualTextIndex.java
@@ -37,7 +37,7 @@ import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Set;
 
-public class TestDatasetWithLuceneMultilingualTextIndex extends AbstractTestDatasetWithTextIndex {
+public class TestDatasetWithLuceneMultilingualTextIndex extends AbstractTestDatasetWithTextIndexBase {
     
     private static final String SPEC_BASE = "http://example.org/spec#";
     private static final String SPEC_ROOT_LOCAL = "lucene_text_dataset";

http://git-wip-us.apache.org/repos/asf/jena/blob/8e9babe7/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithLuceneTextIndexWithLangField.java
----------------------------------------------------------------------
diff --git a/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithLuceneTextIndexWithLangField.java b/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithLuceneTextIndexWithLangField.java
index 9d99a29..f1e7e08 100644
--- a/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithLuceneTextIndexWithLangField.java
+++ b/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithLuceneTextIndexWithLangField.java
@@ -35,7 +35,7 @@ import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Set;
 
-public class TestDatasetWithLuceneTextIndexWithLangField extends AbstractTestDatasetWithTextIndex {
+public class TestDatasetWithLuceneTextIndexWithLangField extends AbstractTestDatasetWithTextIndexBase {
     
     private static final String SPEC_BASE = "http://example.org/spec#";
     private static final String SPEC_ROOT_LOCAL = "lucene_text_dataset";

http://git-wip-us.apache.org/repos/asf/jena/blob/8e9babe7/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithLuceneTextIndexWithUidField.java
----------------------------------------------------------------------
diff --git a/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithLuceneTextIndexWithUidField.java b/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithLuceneTextIndexWithUidField.java
new file mode 100644
index 0000000..9431449
--- /dev/null
+++ b/jena-text/src/test/java/org/apache/jena/query/text/TestDatasetWithLuceneTextIndexWithUidField.java
@@ -0,0 +1,129 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.query.text;
+
+import org.apache.jena.assembler.Assembler;
+import org.apache.jena.atlas.lib.StrUtils;
+import org.apache.jena.query.Dataset;
+import org.apache.jena.query.text.assembler.TextAssembler;
+import org.apache.jena.rdf.model.Model;
+import org.apache.jena.rdf.model.ModelFactory;
+import org.apache.jena.rdf.model.Resource;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.io.Reader;
+import java.io.StringReader;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+public class TestDatasetWithLuceneTextIndexWithUidField extends AbstractTestDatasetWithTextIndexBase {
+    
+    private static final String SPEC_BASE = "http://example.org/spec#";
+    private static final String SPEC_ROOT_LOCAL = "lucene_text_dataset";
+    private static final String SPEC_ROOT_URI = SPEC_BASE + SPEC_ROOT_LOCAL;
+    private static final String SPEC;
+    static {
+        SPEC = StrUtils.strjoinNL(
+                    "prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> ",
+                    "prefix ja:   <http://jena.hpl.hp.com/2005/11/Assembler#> ",
+                    "prefix tdb:  <http://jena.hpl.hp.com/2008/tdb#>",
+                    "prefix text: <http://jena.apache.org/text#>",
+                    "prefix :     <" + SPEC_BASE + ">",
+                    "",
+                    "[] ja:loadClass    \"org.apache.jena.query.text.TextQuery\" .",
+                    "text:TextDataset      rdfs:subClassOf   ja:RDFDataset .",
+                    "text:TextIndexLucene  rdfs:subClassOf   text:TextIndex .",
+                    
+                    ":" + SPEC_ROOT_LOCAL,
+                    "    a              text:TextDataset ;",
+                    "    text:dataset   :dataset ;",
+                    "    text:index     :indexLucene ;",
+                    "    .",
+                    "",
+                    ":dataset",
+                    "    a               ja:RDFDataset ;",
+                    "    ja:defaultGraph :graph ;",
+                    ".",
+                    ":graph",
+                    "    a               ja:MemoryModel ;",
+                    ".",
+                    "",
+                    ":indexLucene",
+                    "    a text:TextIndexLucene ;",
+                    "    text:directory \"mem\" ;",
+                    "    text:entityMap :entMap ;",
+                    "    .",
+                    "",
+                    ":entMap",
+                    "    a text:EntityMap ;",
+                    "    text:entityField      \"uri\" ;",
+                    "    text:defaultField     \"label\" ;",
+                    "    text:uidField         \"uuid\" ;",
+                    "    text:map (",
+                    "         [ text:field \"label\" ; text:predicate rdfs:label ]",
+                    "         [ text:field \"comment\" ; text:predicate rdfs:comment ]",
+                    "         ) ."
+                    );
+    }
+    
+    @Before
+    public void before() {
+        Reader reader = new StringReader(SPEC);
+        Model specModel = ModelFactory.createDefaultModel();
+        specModel.read(reader, "", "TURTLE");
+        TextAssembler.init();           
+        Resource root = specModel.getResource(SPEC_ROOT_URI);
+        dataset = (Dataset) Assembler.general.open(root);
+    }
+    
+    @After
+    public void after() {
+        dataset.close();
+    }
+    
+    @Test
+    public void testDeleteTriple(){
+        final String turtle = StrUtils.strjoinNL(
+                TURTLE_PROLOG,
+                "<" + RESOURCE_BASE + "myResource>",
+                "  rdfs:label 'My first resource'",
+                "."
+        );
+        loadData(turtle);
+        String updateString = StrUtils.strjoinNL(
+                QUERY_PROLOG,
+                "DELETE DATA { ",
+                "    <" + RESOURCE_BASE + "myResource> rdfs:label 'My first resource'",
+                "}"
+        );
+        doUpdate(updateString);
+
+        String queryString = StrUtils.strjoinNL(
+                QUERY_PROLOG,
+                "SELECT ?s",
+                "WHERE {",
+                "    ?s text:query ( rdfs:label 'first' ) .",
+                "}"
+        );
+        doTestNoResult(dataset, "", queryString);
+    }
+}