/** Copyright (C) SYSTAP, LLC 2006-2015. All rights reserved. Contact: SYSTAP, LLC 2501 Calvert ST NW #106 Washington, DC 20008 licenses@systap.com This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package com.bigdata.rdf.sail; import java.io.ByteArrayInputStream; import java.io.IOException; import java.util.Properties; import java.util.UUID; import org.openrdf.model.vocabulary.XMLSchema; import org.openrdf.query.QueryLanguage; import org.openrdf.repository.RepositoryException; import org.openrdf.rio.RDFFormat; import org.openrdf.rio.RDFParseException; import com.bigdata.journal.IJournal; import com.bigdata.rdf.internal.XSD; import com.bigdata.rdf.lexicon.ITextIndexer.FullTextQuery; import com.bigdata.rdf.lexicon.IValueCentricTextIndexer; import com.bigdata.rdf.model.BigdataValue; import com.bigdata.rdf.model.BigdataValueFactory; import com.bigdata.rdf.store.AbstractTripleStore.Options; import com.bigdata.rdf.store.LocalTripleStore; /** * * * * @see <a href="http://jira.blazegraph.com/browse/BLZG-1893" >. * */ public class TestTicket1893 extends ProxyBigdataSailTestCase { private final static String DATA = "<http://s> <http://p> 1 .\n" + "<http://s> <http://p> \"2\"^^xsd:int .\n" + "<http://s> <http://p> 3.0 .\n" + "<http://s> <http://p> \"4.0\"^^xsd:double .\n" + "<http://s> <http://p> true .\n" + "<http://s> <http://p> \"false\"^^xsd:boolean .\n" + "<http://s> <http://p> \"plain string\" .\n" + "<http://s> <http://p> \"very long literal which length exceeds MAX_INLINE_TEXT_LENGTH\" .\n" + "<http://s> <http://p> \"datatyped string\"^^xsd:string .\n" + "<http://s> <http://p> \"english string\"@en .\n" + "_:s1 <http://refers> _:s2 .\n"; private final static RDFFormat DATA_FORMAT = RDFFormat.TURTLE; private final static String INSERT_SPARQL = "INSERT DATA {" // + DATA // + "}"; public TestTicket1893() { } public TestTicket1893(final String name) { super(name); } /** * case 1: * {@link Options#INLINE_TEXT_LITERALS} is true * {@link Options#INLINE_XSD_DATATYPE_LITERALS} is true * {@link Options#TEXT_INDEX_DATATYPE_LITERALS} is true * data loaded from file */ public void test_1() throws Exception { final String namespace = "test" + UUID.randomUUID(); final BigdataSailRepositoryConnection cxn = prepareTest(namespace, true /*inlineTextLiterals*/ , true /*inlineXSDDatatypeLiterals*/ , true /*textIndexDatatypeLiterals*/); loadData(cxn); IValueCentricTextIndexer<?> searchEngine = cxn.getTripleStore().getLexiconRelation().getSearchEngine(); assertEquals(0, searchEngine.count(query("1"))); assertEquals(0, searchEngine.count(query("2"))); assertEquals(0, searchEngine.count(query("3"))); assertEquals(0, searchEngine.count(query("4"))); assertEquals(0, searchEngine.count(query("true"))); assertEquals(0, searchEngine.count(query("false"))); assertEquals(1, searchEngine.count(query("plain"))); assertEquals(1, searchEngine.count(query("datatyped"))); assertEquals(1, searchEngine.count(query("english"))); endTest(cxn); } /** * case 2: * INLINE_TEXT_LITERALS is true * INLINE_XSD_DATATYPE_LITERALS is true * TEXT_INDEX_DATATYPE_LITERALS is true * data entered via SPARQL UPDATE */ public void test_2() throws Exception { final String namespace = "test" + UUID.randomUUID(); final BigdataSailRepositoryConnection cxn = prepareTest(namespace, true /*inlineTextLiterals*/ , true /*inlineXSDDatatypeLiterals*/ , true /*textIndexDatatypeLiterals*/); insertSparql(cxn); IValueCentricTextIndexer<?> searchEngine = cxn.getTripleStore().getLexiconRelation().getSearchEngine(); assertEquals(0, searchEngine.count(query("1"))); assertEquals(0, searchEngine.count(query("2"))); assertEquals(0, searchEngine.count(query("3"))); assertEquals(0, searchEngine.count(query("4"))); assertEquals(0, searchEngine.count(query("true"))); assertEquals(0, searchEngine.count(query("false"))); assertEquals(1, searchEngine.count(query("plain"))); assertEquals(1, searchEngine.count(query("datatyped"))); assertEquals(1, searchEngine.count(query("english"))); endTest(cxn); } /** * case 3: * {@link Options#INLINE_TEXT_LITERALS} is false * {@link Options#INLINE_XSD_DATATYPE_LITERALS} is false * {@link Options#TEXT_INDEX_DATATYPE_LITERALS} is true * data loaded from file */ public void test_3() throws Exception { final String namespace = "test" + UUID.randomUUID(); final BigdataSailRepositoryConnection cxn = prepareTest(namespace, false /*inlineTextLiterals*/ , false /*inlineXSDDatatypeLiterals*/ , true /*textIndexDatatypeLiterals*/); loadData(cxn); IValueCentricTextIndexer<?> searchEngine = cxn.getTripleStore().getLexiconRelation().getSearchEngine(); assertEquals(1, searchEngine.count(query("1"))); assertEquals(1, searchEngine.count(query("2"))); assertEquals(1, searchEngine.count(query("3.0"))); assertEquals(1, searchEngine.count(query("4.0"))); assertEquals(1, searchEngine.count(query("true"))); assertEquals(1, searchEngine.count(query("false"))); assertEquals(1, searchEngine.count(query("plain"))); assertEquals(1, searchEngine.count(query("datatyped"))); assertEquals(1, searchEngine.count(query("english"))); endTest(cxn); } /** * case 4: * INLINE_TEXT_LITERALS is false * INLINE_XSD_DATATYPE_LITERALS is false * TEXT_INDEX_DATATYPE_LITERALS is true * data entered via SPARQL UPDATE */ public void test_4() throws Exception { final String namespace = "test" + UUID.randomUUID(); final BigdataSailRepositoryConnection cxn = prepareTest(namespace, false /*inlineTextLiterals*/ , false /*inlineXSDDatatypeLiterals*/ , true /*textIndexDatatypeLiterals*/); insertSparql(cxn); IValueCentricTextIndexer<?> searchEngine = cxn.getTripleStore().getLexiconRelation().getSearchEngine(); assertEquals(1, searchEngine.count(query("1"))); assertEquals(1, searchEngine.count(query("2"))); assertEquals(1, searchEngine.count(query("3.0"))); assertEquals(1, searchEngine.count(query("4.0"))); assertEquals(1, searchEngine.count(query("true"))); assertEquals(1, searchEngine.count(query("false"))); assertEquals(1, searchEngine.count(query("plain"))); assertEquals(1, searchEngine.count(query("datatyped"))); assertEquals(1, searchEngine.count(query("english"))); endTest(cxn); } /** * case 5: * {@link Options#INLINE_TEXT_LITERALS} is true * {@link Options#INLINE_XSD_DATATYPE_LITERALS} is false * {@link Options#TEXT_INDEX_DATATYPE_LITERALS} is true * data loaded from file */ public void test_5() throws Exception { final String namespace = "test" + UUID.randomUUID(); final BigdataSailRepositoryConnection cxn = prepareTest(namespace, true /*inlineTextLiterals*/ , false /*inlineXSDDatatypeLiterals*/ , true /*textIndexDatatypeLiterals*/); loadData(cxn); IValueCentricTextIndexer<?> searchEngine = cxn.getTripleStore().getLexiconRelation().getSearchEngine(); assertEquals(0, searchEngine.count(query("1"))); assertEquals(0, searchEngine.count(query("2"))); assertEquals(0, searchEngine.count(query("3.0"))); assertEquals(0, searchEngine.count(query("4.0"))); assertEquals(0, searchEngine.count(query("true"))); assertEquals(0, searchEngine.count(query("false"))); assertEquals(1, searchEngine.count(query("plain"))); assertEquals(1, searchEngine.count(query("datatyped"))); assertEquals(1, searchEngine.count(query("english"))); endTest(cxn); } /** * case 6: * INLINE_TEXT_LITERALS is true * INLINE_XSD_DATATYPE_LITERALS is false * TEXT_INDEX_DATATYPE_LITERALS is true * data entered via SPARQL UPDATE */ public void test_6() throws Exception { final String namespace = "test" + UUID.randomUUID(); final BigdataSailRepositoryConnection cxn = prepareTest(namespace, true /*inlineTextLiterals*/ , false /*inlineXSDDatatypeLiterals*/ , true /*textIndexDatatypeLiterals*/); insertSparql(cxn); IValueCentricTextIndexer<?> searchEngine = cxn.getTripleStore().getLexiconRelation().getSearchEngine(); assertEquals(0, searchEngine.count(query("1"))); assertEquals(0, searchEngine.count(query("2"))); assertEquals(0, searchEngine.count(query("3.0"))); assertEquals(0, searchEngine.count(query("4.0"))); assertEquals(0, searchEngine.count(query("true"))); assertEquals(0, searchEngine.count(query("false"))); assertEquals(1, searchEngine.count(query("plain"))); assertEquals(1, searchEngine.count(query("datatyped"))); assertEquals(1, searchEngine.count(query("english"))); endTest(cxn); } /** * case 7: * {@link Options#INLINE_TEXT_LITERALS} is false * {@link Options#INLINE_XSD_DATATYPE_LITERALS} is true * {@link Options#TEXT_INDEX_DATATYPE_LITERALS} is true * data loaded from file */ public void test_7() throws Exception { final String namespace = "test" + UUID.randomUUID(); final BigdataSailRepositoryConnection cxn = prepareTest(namespace, false /*inlineTextLiterals*/ , true /*inlineXSDDatatypeLiterals*/ , true /*textIndexDatatypeLiterals*/); loadData(cxn); IValueCentricTextIndexer<?> searchEngine = cxn.getTripleStore().getLexiconRelation().getSearchEngine(); assertEquals(0, searchEngine.count(query("1"))); assertEquals(0, searchEngine.count(query("2"))); assertEquals(0, searchEngine.count(query("3"))); assertEquals(0, searchEngine.count(query("4"))); assertEquals(0, searchEngine.count(query("true"))); assertEquals(0, searchEngine.count(query("false"))); assertEquals(1, searchEngine.count(query("plain"))); assertEquals(1, searchEngine.count(query("datatyped"))); assertEquals(1, searchEngine.count(query("english"))); endTest(cxn); } /** * case 8: * INLINE_TEXT_LITERALS is false * INLINE_XSD_DATATYPE_LITERALS is true * TEXT_INDEX_DATATYPE_LITERALS is true * data entered via SPARQL UPDATE */ public void test_8() throws Exception { final String namespace = "test" + UUID.randomUUID(); final BigdataSailRepositoryConnection cxn = prepareTest(namespace, false /*inlineTextLiterals*/ , true /*inlineXSDDatatypeLiterals*/ , true /*textIndexDatatypeLiterals*/); insertSparql(cxn); IValueCentricTextIndexer<?> searchEngine = cxn.getTripleStore().getLexiconRelation().getSearchEngine(); assertEquals(0, searchEngine.count(query("1"))); assertEquals(0, searchEngine.count(query("2"))); assertEquals(0, searchEngine.count(query("3"))); assertEquals(0, searchEngine.count(query("4"))); assertEquals(0, searchEngine.count(query("true"))); assertEquals(0, searchEngine.count(query("false"))); assertEquals(1, searchEngine.count(query("plain"))); assertEquals(1, searchEngine.count(query("datatyped"))); assertEquals(1, searchEngine.count(query("english"))); endTest(cxn); } /** * case 9: * {@link Options#INLINE_TEXT_LITERALS} is true * {@link Options#INLINE_XSD_DATATYPE_LITERALS} is true * {@link Options#TEXT_INDEX_DATATYPE_LITERALS} is false * data loaded from file */ public void test_9() throws Exception { final String namespace = "test" + UUID.randomUUID(); final BigdataSailRepositoryConnection cxn = prepareTest(namespace, true /*inlineTextLiterals*/ , true /*inlineXSDDatatypeLiterals*/ , false /*textIndexDatatypeLiterals*/); loadData(cxn); IValueCentricTextIndexer<?> searchEngine = cxn.getTripleStore().getLexiconRelation().getSearchEngine(); assertEquals(0, searchEngine.count(query("1"))); assertEquals(0, searchEngine.count(query("2"))); assertEquals(0, searchEngine.count(query("3"))); assertEquals(0, searchEngine.count(query("4"))); assertEquals(0, searchEngine.count(query("true"))); assertEquals(0, searchEngine.count(query("false"))); assertEquals(1, searchEngine.count(query("plain"))); assertEquals(0, searchEngine.count(query("datatyped"))); assertEquals(1, searchEngine.count(query("english"))); endTest(cxn); } /** * case 10: * INLINE_TEXT_LITERALS is true * INLINE_XSD_DATATYPE_LITERALS is true * TEXT_INDEX_DATATYPE_LITERALS is false * data entered via SPARQL UPDATE */ public void test_10() throws Exception { final String namespace = "test" + UUID.randomUUID(); final BigdataSailRepositoryConnection cxn = prepareTest(namespace, true /*inlineTextLiterals*/ , true /*inlineXSDDatatypeLiterals*/ , false /*textIndexDatatypeLiterals*/); insertSparql(cxn); IValueCentricTextIndexer<?> searchEngine = cxn.getTripleStore().getLexiconRelation().getSearchEngine(); assertEquals(0, searchEngine.count(query("1"))); assertEquals(0, searchEngine.count(query("2"))); assertEquals(0, searchEngine.count(query("3"))); assertEquals(0, searchEngine.count(query("4"))); assertEquals(0, searchEngine.count(query("true"))); assertEquals(0, searchEngine.count(query("false"))); assertEquals(1, searchEngine.count(query("plain"))); assertEquals(0, searchEngine.count(query("datatyped"))); assertEquals(1, searchEngine.count(query("english"))); endTest(cxn); } /** * case 11: * {@link Options#INLINE_TEXT_LITERALS} is false * {@link Options#INLINE_XSD_DATATYPE_LITERALS} is false * {@link Options#TEXT_INDEX_DATATYPE_LITERALS} is false * data loaded from file */ public void test_11() throws Exception { final String namespace = "test" + UUID.randomUUID(); final BigdataSailRepositoryConnection cxn = prepareTest(namespace, false /*inlineTextLiterals*/ , false /*inlineXSDDatatypeLiterals*/ , false /*textIndexDatatypeLiterals*/); { loadData(cxn); IValueCentricTextIndexer<?> searchEngine = cxn.getTripleStore().getLexiconRelation().getSearchEngine(); assertEquals(0, searchEngine.count(query("1"))); assertEquals(0, searchEngine.count(query("2"))); assertEquals(0, searchEngine.count(query("3"))); assertEquals(0, searchEngine.count(query("4"))); assertEquals(0, searchEngine.count(query("true"))); assertEquals(0, searchEngine.count(query("false"))); assertEquals(1, searchEngine.count(query("plain"))); assertEquals(0, searchEngine.count(query("datatyped"))); assertEquals(1, searchEngine.count(query("english"))); endTest(cxn); } } /** * case 12: * INLINE_TEXT_LITERALS is false * INLINE_XSD_DATATYPE_LITERALS is false * TEXT_INDEX_DATATYPE_LITERALS is false * data entered via SPARQL UPDATE */ public void test_12() throws Exception { final String namespace = "test" + UUID.randomUUID(); final BigdataSailRepositoryConnection cxn = prepareTest(namespace, false /*inlineTextLiterals*/ , false /*inlineXSDDatatypeLiterals*/ , false /*textIndexDatatypeLiterals*/); insertSparql(cxn); IValueCentricTextIndexer<?> searchEngine = cxn.getTripleStore().getLexiconRelation().getSearchEngine(); assertEquals(0, searchEngine.count(query("1"))); assertEquals(0, searchEngine.count(query("2"))); assertEquals(0, searchEngine.count(query("3"))); assertEquals(0, searchEngine.count(query("4"))); assertEquals(0, searchEngine.count(query("true"))); assertEquals(0, searchEngine.count(query("false"))); assertEquals(1, searchEngine.count(query("plain"))); assertEquals(0, searchEngine.count(query("datatyped"))); assertEquals(1, searchEngine.count(query("english"))); endTest(cxn); } /** * case 13: * {@link Options#INLINE_TEXT_LITERALS} is true * {@link Options#INLINE_XSD_DATATYPE_LITERALS} is false * {@link Options#TEXT_INDEX_DATATYPE_LITERALS} is false * data loaded from file */ public void test_13() throws Exception { final String namespace = "test" + UUID.randomUUID(); final BigdataSailRepositoryConnection cxn = prepareTest(namespace, true /*inlineTextLiterals*/ , false /*inlineXSDDatatypeLiterals*/ , false /*textIndexDatatypeLiterals*/); loadData(cxn); IValueCentricTextIndexer<?> searchEngine = cxn.getTripleStore().getLexiconRelation().getSearchEngine(); assertEquals(0, searchEngine.count(query("1"))); assertEquals(0, searchEngine.count(query("2"))); assertEquals(0, searchEngine.count(query("3"))); assertEquals(0, searchEngine.count(query("4"))); assertEquals(0, searchEngine.count(query("true"))); assertEquals(0, searchEngine.count(query("false"))); assertEquals(1, searchEngine.count(query("plain"))); assertEquals(0, searchEngine.count(query("datatyped"))); assertEquals(1, searchEngine.count(query("english"))); endTest(cxn); } /** * case 14: * INLINE_TEXT_LITERALS is true * INLINE_XSD_DATATYPE_LITERALS is false * TEXT_INDEX_DATATYPE_LITERALS is false * data entered via SPARQL UPDATE */ public void test_14() throws Exception { final String namespace = "test" + UUID.randomUUID(); final BigdataSailRepositoryConnection cxn = prepareTest(namespace, true /*inlineTextLiterals*/ , false /*inlineXSDDatatypeLiterals*/ , false /*textIndexDatatypeLiterals*/); insertSparql(cxn); IValueCentricTextIndexer<?> searchEngine = cxn.getTripleStore().getLexiconRelation().getSearchEngine(); assertEquals(0, searchEngine.count(query("1"))); assertEquals(0, searchEngine.count(query("2"))); assertEquals(0, searchEngine.count(query("3"))); assertEquals(0, searchEngine.count(query("4"))); assertEquals(0, searchEngine.count(query("true"))); assertEquals(0, searchEngine.count(query("false"))); assertEquals(1, searchEngine.count(query("plain"))); assertEquals(0, searchEngine.count(query("datatyped"))); assertEquals(1, searchEngine.count(query("english"))); endTest(cxn); } /** * case 15: * {@link Options#INLINE_TEXT_LITERALS} is false * {@link Options#INLINE_XSD_DATATYPE_LITERALS} is true * {@link Options#TEXT_INDEX_DATATYPE_LITERALS} is false * data loaded from file */ public void test_15() throws Exception { final String namespace = "test" + UUID.randomUUID(); final BigdataSailRepositoryConnection cxn = prepareTest(namespace, false /*inlineTextLiterals*/ , true /*inlineXSDDatatypeLiterals*/ , false /*textIndexDatatypeLiterals*/); loadData(cxn); IValueCentricTextIndexer<?> searchEngine = cxn.getTripleStore().getLexiconRelation().getSearchEngine(); assertEquals(0, searchEngine.count(query("1"))); assertEquals(0, searchEngine.count(query("2"))); assertEquals(0, searchEngine.count(query("3"))); assertEquals(0, searchEngine.count(query("4"))); assertEquals(0, searchEngine.count(query("true"))); assertEquals(0, searchEngine.count(query("false"))); assertEquals(1, searchEngine.count(query("plain"))); assertEquals(0, searchEngine.count(query("datatyped"))); assertEquals(1, searchEngine.count(query("english"))); endTest(cxn); } /** * case 16: * INLINE_TEXT_LITERALS is false * INLINE_XSD_DATATYPE_LITERALS is true * TEXT_INDEX_DATATYPE_LITERALS is false * data entered via SPARQL UPDATE */ public void test_16() throws Exception { final String namespace = "test" + UUID.randomUUID(); final BigdataSailRepositoryConnection cxn = prepareTest(namespace, false /*inlineTextLiterals*/ , true /*inlineXSDDatatypeLiterals*/ , false /*textIndexDatatypeLiterals*/); insertSparql(cxn); IValueCentricTextIndexer<?> searchEngine = cxn.getTripleStore().getLexiconRelation().getSearchEngine(); assertEquals(0, searchEngine.count(query("1"))); assertEquals(0, searchEngine.count(query("2"))); assertEquals(0, searchEngine.count(query("3"))); assertEquals(0, searchEngine.count(query("4"))); assertEquals(0, searchEngine.count(query("true"))); assertEquals(0, searchEngine.count(query("false"))); assertEquals(1, searchEngine.count(query("plain"))); assertEquals(0, searchEngine.count(query("datatyped"))); assertEquals(1, searchEngine.count(query("english"))); endTest(cxn); } ////////////////////// /** * case 17: * {@link Options#INLINE_TEXT_LITERALS} is true * {@link Options#INLINE_XSD_DATATYPE_LITERALS} is true * data loaded from file */ public void test_17() throws Exception { final String namespace = "test" + UUID.randomUUID(); final BigdataSailRepositoryConnection cxn = prepareTest(namespace, true /*inlineTextLiterals*/ , true /*inlineXSDDatatypeLiterals*/); loadData(cxn); final BigdataValueFactory vf = cxn.getValueFactory(); final BigdataValue[] values = new BigdataValue[]{ vf.createURI("http://s"), vf.createLiteral("1", XMLSchema.INTEGER), vf.createLiteral(2), vf.createLiteral("3.0", XMLSchema.DECIMAL), vf.createLiteral(4.0), vf.createLiteral(true), vf.createLiteral(false), vf.createLiteral("plain string"), vf.createLiteral("datatyped string", XMLSchema.STRING), vf.createLiteral("english string", "en"), }; cxn.getTripleStore().getLexiconRelation().addTerms(values, values.length, true /* readOnly */); assertTrue(values[0].getIV().isInline()); // http://s assertTrue(values[1].getIV().isInline()); // 1 assertTrue(values[2].getIV().isInline()); // "2"^^xsd:int assertTrue(values[3].getIV().isInline()); // 3.0 assertTrue(values[4].getIV().isInline()); // "4.0"^^xsd:double assertTrue(values[5].getIV().isInline()); // true assertTrue(values[6].getIV().isInline()); // "false"^^xsd:boolean assertTrue(values[7].getIV().isInline()); // "plain string" assertTrue(values[8].getIV().isInline()); // "datatyped string"^^xsd:string assertTrue(values[9].getIV().isInline()); // "english string"@en endTest(cxn); } /** * case 18: * INLINE_TEXT_LITERALS is true * INLINE_XSD_DATATYPE_LITERALS is true * data entered via SPARQL UPDATE */ public void test_18() throws Exception { final String namespace = "test" + UUID.randomUUID(); final BigdataSailRepositoryConnection cxn = prepareTest(namespace, true /*inlineTextLiterals*/ , true /*inlineXSDDatatypeLiterals*/); insertSparql(cxn); BigdataValueFactory vf = cxn.getValueFactory(); BigdataValue[] values = new BigdataValue[]{ vf.createURI("http://s"), vf.createLiteral("1", XMLSchema.INTEGER), vf.createLiteral(2), vf.createLiteral("3.0", XMLSchema.DECIMAL), vf.createLiteral(4.0), vf.createLiteral(true), vf.createLiteral(false), vf.createLiteral("plain string"), vf.createLiteral("datatyped string", XMLSchema.STRING), vf.createLiteral("english string", "en"), }; cxn.getTripleStore().getLexiconRelation().addTerms(values, values.length, true /* readOnly */); assertTrue(values[0].getIV().isInline()); // http://s assertTrue(values[1].getIV().isInline()); // 1 assertTrue(values[2].getIV().isInline()); // "2"^^xsd:int assertTrue(values[3].getIV().isInline()); // 3.0 assertTrue(values[4].getIV().isInline()); // "4.0"^^xsd:double assertTrue(values[5].getIV().isInline()); // true assertTrue(values[6].getIV().isInline()); // "false"^^xsd:boolean assertTrue(values[7].getIV().isInline()); // "plain string" assertTrue(values[8].getIV().isInline()); // "datatyped string"^^xsd:string assertTrue(values[9].getIV().isInline()); // "english string"@en endTest(cxn); } /** * case 19: * {@link Options#INLINE_TEXT_LITERALS} is false * {@link Options#INLINE_XSD_DATATYPE_LITERALS} is false * data loaded from file */ public void test_19() throws Exception { final String namespace = "test" + UUID.randomUUID(); final BigdataSailRepositoryConnection cxn = prepareTest(namespace, false /*inlineTextLiterals*/ , false /*inlineXSDDatatypeLiterals*/); loadData(cxn); BigdataValueFactory vf = cxn.getValueFactory(); BigdataValue[] values = new BigdataValue[]{ vf.createURI("http://s"), vf.createLiteral("1", XMLSchema.INTEGER), vf.createLiteral(2), vf.createLiteral("3.0", XMLSchema.DECIMAL), vf.createLiteral(4.0), vf.createLiteral(true), vf.createLiteral(false), vf.createLiteral("plain string"), vf.createLiteral("datatyped string", XMLSchema.STRING), vf.createLiteral("english string", "en"), }; cxn.getTripleStore().getLexiconRelation().addTerms(values, values.length, true /* readOnly */); assertFalse(values[0].getIV().isInline()); // http://s assertFalse(values[1].getIV().isInline()); // 1 assertFalse(values[2].getIV().isInline()); // "2"^^xsd:int assertFalse(values[3].getIV().isInline()); // 3.0 assertFalse(values[4].getIV().isInline()); // "4.0"^^xsd:double assertFalse(values[5].getIV().isInline()); // true assertFalse(values[6].getIV().isInline()); // "false"^^xsd:boolean assertFalse(values[7].getIV().isInline()); // "plain string" assertFalse(values[8].getIV().isInline()); // "datatyped string"^^xsd:string assertFalse(values[9].getIV().isInline()); // "english string"@en endTest(cxn); } /** * case 20: * INLINE_TEXT_LITERALS is false * INLINE_XSD_DATATYPE_LITERALS is false * data entered via SPARQL UPDATE */ public void test_20() throws Exception { final String namespace = "test" + UUID.randomUUID(); final BigdataSailRepositoryConnection cxn = prepareTest(namespace, false /*inlineTextLiterals*/ , false /*inlineXSDDatatypeLiterals*/); insertSparql(cxn); BigdataValueFactory vf = cxn.getValueFactory(); BigdataValue[] values = new BigdataValue[]{ vf.createURI("http://s"), vf.createLiteral("1", XMLSchema.INTEGER), vf.createLiteral(2), vf.createLiteral("3.0", XMLSchema.DECIMAL), vf.createLiteral(4.0), vf.createLiteral(true), vf.createLiteral(false), vf.createLiteral("plain string"), vf.createLiteral("datatyped string", XMLSchema.STRING), vf.createLiteral("english string", "en"), vf.createBNode("_:s1"), vf.createBNode("_:s2"), }; cxn.getTripleStore().getLexiconRelation().addTerms(values, values.length, true /* readOnly */); assertFalse(values[0].getIV().isInline()); // http://s assertFalse(values[1].getIV().isInline()); // 1 assertFalse(values[2].getIV().isInline()); // "2"^^xsd:int assertFalse(values[3].getIV().isInline()); // 3.0 assertFalse(values[4].getIV().isInline()); // "4.0"^^xsd:double assertFalse(values[5].getIV().isInline()); // true assertFalse(values[6].getIV().isInline()); // "false"^^xsd:boolean assertFalse(values[7].getIV().isInline()); // "plain string" assertFalse(values[8].getIV().isInline()); // "datatyped string"^^xsd:string assertFalse(values[9].getIV().isInline()); // "english string"@en endTest(cxn); } /** * case 21: * {@link Options#INLINE_TEXT_LITERALS} is true * {@link Options#INLINE_XSD_DATATYPE_LITERALS} is false * data loaded from file */ public void test_21() throws Exception { final String namespace = "test" + UUID.randomUUID(); final BigdataSailRepositoryConnection cxn = prepareTest(namespace, true /*inlineTextLiterals*/ , false /*inlineXSDDatatypeLiterals*/); loadData(cxn); BigdataValueFactory vf = cxn.getValueFactory(); BigdataValue[] values = new BigdataValue[]{ vf.createURI("http://s"), vf.createLiteral("1", XMLSchema.INTEGER), vf.createLiteral(2), vf.createLiteral("3.0", XMLSchema.DECIMAL), vf.createLiteral(4.0), vf.createLiteral(true), vf.createLiteral(false), vf.createLiteral("plain string"), vf.createLiteral("datatyped string", XMLSchema.STRING), vf.createLiteral("english string", "en"), vf.createLiteral("very long literal which length exceeds MAX_INLINE_TEXT_LENGTH"), }; cxn.getTripleStore().getLexiconRelation().addTerms(values, values.length, true /* readOnly */); // Note, that all literals got inlined according to code of: // com.bigdata.rdf.internal.LexiconConfiguration.createInlineLiteralIV(Literal) // as INLINE_TEXT_LITERALS is true and MAX_INLINE_TEXT_LENGTH != 0 assertTrue(values[0].getIV().isInline()); // http://s assertTrue(values[1].getIV().isInline()); // 1 assertTrue(values[2].getIV().isInline()); // "2"^^xsd:int assertTrue(values[3].getIV().isInline()); // 3.0 assertTrue(values[4].getIV().isInline()); // "4.0"^^xsd:double assertTrue(values[5].getIV().isInline()); // true assertTrue(values[6].getIV().isInline()); // "false"^^xsd:boolean assertTrue(values[7].getIV().isInline()); // "plain string" assertTrue(values[8].getIV().isInline()); // "datatyped string"^^xsd:string assertTrue(values[9].getIV().isInline()); // "english string"@en assertFalse(values[10].getIV().isInline()); // "very long literal which length exceeds max inline text length" endTest(cxn); } /** * case 22: * INLINE_TEXT_LITERALS is true * INLINE_XSD_DATATYPE_LITERALS is false * data entered via SPARQL UPDATE */ public void test_22() throws Exception { final String namespace = "test" + UUID.randomUUID(); final BigdataSailRepositoryConnection cxn = prepareTest(namespace, true /*inlineTextLiterals*/ , false /*inlineXSDDatatypeLiterals*/); insertSparql(cxn); BigdataValueFactory vf = cxn.getValueFactory(); BigdataValue[] values = new BigdataValue[]{ vf.createURI("http://s"), vf.createLiteral("1", XMLSchema.INTEGER), vf.createLiteral(2), vf.createLiteral("3.0", XMLSchema.DECIMAL), vf.createLiteral(4.0), vf.createLiteral(true), vf.createLiteral(false), vf.createLiteral("plain string"), vf.createLiteral("datatyped string", XMLSchema.STRING), vf.createLiteral("english string", "en"), vf.createLiteral("very long literal which length exceeds MAX_INLINE_TEXT_LENGTH"), }; cxn.getTripleStore().getLexiconRelation().addTerms(values, values.length, true /* readOnly */); // Note, that all literals got inlined according to code of: // com.bigdata.rdf.internal.LexiconConfiguration.createInlineLiteralIV(Literal) // as INLINE_TEXT_LITERALS is true and MAX_INLINE_TEXT_LENGTH != 0 assertTrue(values[0].getIV().isInline()); // http://s assertTrue(values[1].getIV().isInline()); // 1 assertTrue(values[2].getIV().isInline()); // "2"^^xsd:int assertTrue(values[3].getIV().isInline()); // 3.0 assertTrue(values[4].getIV().isInline()); // "4.0"^^xsd:double assertTrue(values[5].getIV().isInline()); // true assertTrue(values[6].getIV().isInline()); // "false"^^xsd:boolean assertTrue(values[7].getIV().isInline()); // "plain string" assertTrue(values[8].getIV().isInline()); // "datatyped string"^^xsd:string assertTrue(values[9].getIV().isInline()); // "english string"@en assertFalse(values[10].getIV().isInline()); // "very long literal which length exceeds max inline text length" endTest(cxn); } /** * case 23: * {@link Options#INLINE_TEXT_LITERALS} is false * {@link Options#INLINE_XSD_DATATYPE_LITERALS} is true * data loaded from file */ public void test_23() throws Exception { final String namespace = "test" + UUID.randomUUID(); final BigdataSailRepositoryConnection cxn = prepareTest(namespace, false /*inlineTextLiterals*/ , true /*inlineXSDDatatypeLiterals*/ ); loadData(cxn); BigdataValueFactory vf = cxn.getValueFactory(); BigdataValue[] values = new BigdataValue[]{ vf.createURI("http://s"), vf.createLiteral("1", XMLSchema.INTEGER), vf.createLiteral(2), vf.createLiteral("3.0", XMLSchema.DECIMAL), vf.createLiteral(4.0), vf.createLiteral(true), vf.createLiteral(false), vf.createLiteral("plain string"), vf.createLiteral("datatyped string", XMLSchema.STRING), vf.createLiteral("english string", "en"), }; cxn.getTripleStore().getLexiconRelation().addTerms(values, values.length, true /* readOnly */); assertFalse(values[0].getIV().isInline()); // http://s assertTrue(values[1].getIV().isInline()); // 1 assertTrue(values[2].getIV().isInline()); // "2"^^xsd:int assertTrue(values[3].getIV().isInline()); // 3.0 assertTrue(values[4].getIV().isInline()); // "4.0"^^xsd:double assertTrue(values[5].getIV().isInline()); // true assertTrue(values[6].getIV().isInline()); // "false"^^xsd:boolean assertFalse(values[7].getIV().isInline()); // "plain string" assertFalse(values[8].getIV().isInline()); // "datatyped string"^^xsd:string assertFalse(values[9].getIV().isInline()); // "english string"@en endTest(cxn); } /** * case 24: * INLINE_TEXT_LITERALS is false * INLINE_XSD_DATATYPE_LITERALS is true * data entered via SPARQL UPDATE */ public void test_24() throws Exception { final String namespace = "test" + UUID.randomUUID(); final BigdataSailRepositoryConnection cxn = prepareTest(namespace, false /*inlineTextLiterals*/ , true /*inlineXSDDatatypeLiterals*/ ); insertSparql(cxn); BigdataValueFactory vf = cxn.getValueFactory(); BigdataValue[] values = new BigdataValue[]{ vf.createURI("http://s"), vf.createLiteral("1", XMLSchema.INTEGER), vf.createLiteral(2), vf.createLiteral("3.0", XMLSchema.DECIMAL), vf.createLiteral(4.0), vf.createLiteral(true), vf.createLiteral(false), vf.createLiteral("plain string"), vf.createLiteral("datatyped string", XMLSchema.STRING), vf.createLiteral("english string", "en"), }; cxn.getTripleStore().getLexiconRelation().addTerms(values, values.length, true /* readOnly */); assertFalse(values[0].getIV().isInline()); // http://s assertTrue(values[1].getIV().isInline()); // 1 assertTrue(values[2].getIV().isInline()); // "2"^^xsd:int assertTrue(values[3].getIV().isInline()); // 3.0 assertTrue(values[4].getIV().isInline()); // "4.0"^^xsd:double assertTrue(values[5].getIV().isInline()); // true assertTrue(values[6].getIV().isInline()); // "false"^^xsd:boolean assertFalse(values[7].getIV().isInline()); // "plain string" assertFalse(values[8].getIV().isInline()); // "datatyped string"^^xsd:string assertFalse(values[9].getIV().isInline()); // "english string"@en endTest(cxn); } private BigdataSailRepositoryConnection prepareTest(final String namespace, final boolean inlineTextLiterals, final boolean inlineXSDDatatypeLiterals) throws Exception { return prepareTest(namespace, inlineTextLiterals, inlineXSDDatatypeLiterals, false /* textIndexDatatypeLiterals */); } private BigdataSailRepositoryConnection prepareTest(final String namespace, final boolean inlineTextLiterals, final boolean inlineXSDDatatypeLiterals, final boolean textIndexDatatypeLiterals) throws Exception { final Properties properties = getProperties(); { properties.setProperty(com.bigdata.rdf.sail.BigdataSail.Options.NAMESPACE, namespace); properties.setProperty("com.bigdata.namespace."+namespace+".lex."+Options.INLINE_TEXT_LITERALS, Boolean.toString(inlineTextLiterals)); if (inlineTextLiterals) { properties.setProperty("com.bigdata.namespace."+namespace+".lex."+Options.MAX_INLINE_TEXT_LENGTH, Integer.toString(45)); } properties.setProperty("com.bigdata.namespace."+namespace+".lex."+Options.INLINE_XSD_DATATYPE_LITERALS, Boolean.toString(inlineXSDDatatypeLiterals)); properties.setProperty("com.bigdata.namespace."+namespace+".lex."+Options.TEXT_INDEX_DATATYPE_LITERALS, Boolean.toString(textIndexDatatypeLiterals)); properties.setProperty("com.bigdata.namespace."+namespace+".lex."+Options.STORE_BLANK_NODES, Boolean.toString(true)); } final BigdataSail sail = getSail(properties); sail.initialize(); final BigdataSailRepository repo = new BigdataSailRepository(sail); return (BigdataSailRepositoryConnection) repo.getConnection(); } private void endTest(BigdataSailRepositoryConnection cxn) throws Exception { cxn.close(); cxn.getTripleStore().close(); IJournal store = ((LocalTripleStore)cxn.getTripleStore()).getIndexManager(); store.shutdownNow(); store.destroy(); } private void loadData(final BigdataSailRepositoryConnection cxn) throws RepositoryException, RDFParseException, IOException { cxn.clear(); cxn.add(new ByteArrayInputStream(DATA.getBytes()), "", DATA_FORMAT); cxn.commit(); } private void insertSparql(final BigdataSailRepositoryConnection cxn) throws Exception { cxn.prepareUpdate(QueryLanguage.SPARQL, INSERT_SPARQL).execute(); } private FullTextQuery query(String query) { return new FullTextQuery(query, null /*languageCode*/, false /*prefixMatch*/); } }