예제 #1
0
        public void SparqlOptimiserQueryWeightedSimple2()
        {
            try
            {
                const string query = @"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT * WHERE
{
  ?s rdfs:label ?label .
  ?s rdfs:comment ?comment .
}";

                Graph weightings = new Graph();
#if PORTABLE
                weightings.LoadFromEmbeddedResource("VDS.RDF.Query.SampleWeightings.n3, dotNetRDF.Portable.Test");
#else
                weightings.LoadFromEmbeddedResource("VDS.RDF.Query.SampleWeightings.n3, dotNetRDF.Test");
#endif
                SparqlOptimiser.QueryOptimiser = new WeightedOptimiser(weightings);

                SparqlQuery q = this._parser.ParseFromString(query);

                Console.WriteLine(this._formatter.Format(q));

                Assert.IsTrue(q.RootGraphPattern.TriplePatterns[0].Variables.Contains("comment"), "First Triple Pattern should contain ?comment");
                Assert.IsTrue(q.RootGraphPattern.TriplePatterns[1].Variables.Contains("label"), "Second Triple Pattern should contain ?label");
            }
            finally
            {
                SparqlOptimiser.ResetOptimisers();
            }
        }
예제 #2
0
 private void DisableFullTextIndex()
 {
     if (this._dataset is WebDemandDataset)
     {
         WebDemandDataset ds = (WebDemandDataset)this._dataset;
         if (ds.UnderlyingDataset is FullTextIndexedDataset)
         {
             this._dataset = ds.UnderlyingDataset;
             this.DisableFullTextIndex();
             this._dataset = new WebDemandDataset(this._dataset);
         }
     }
     else if (this._dataset is FullTextIndexedDataset)
     {
         SparqlOptimiser.RemoveOptimiser(this._ftOptimiser);
         this._ftOptimiser = null;
         this._ftSearcher.Dispose();
         this._ftSearcher = null;
         this._dataset    = ((FullTextIndexedDataset)this._dataset).UnderlyingDataset;
         this._ftIndexer.Dispose();
         this._ftIndexer = null;
         this._ftIndex.Dispose();
         this._ftIndex = null;
     }
     this._processor = new LeviathanQueryProcessor(this._dataset);
 }
예제 #3
0
        public void SparqlOptimiserQueryWeightedUnknowns2()
        {
            try
            {
                String query = @"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT * WHERE
{
  ?s <http://weightings/PredicatesLast> ?o .
  <http://weightings/SubjectsFirst> ?p ?o .
  ?s ?p 'Objects In Middle' .
}";

                Graph weightings = new Graph();
#if PORTABLE
                weightings.LoadFromEmbeddedResource("VDS.RDF.Query.SampleWeightings.n3, dotNetRDF.Portable.Test");
#else
                weightings.LoadFromEmbeddedResource("VDS.RDF.Query.SampleWeightings.n3, dotNetRDF.Test");
#endif
                SparqlOptimiser.QueryOptimiser = new WeightedOptimiser(weightings);

                SparqlQuery q = this._parser.ParseFromString(query);

                Console.WriteLine(this._formatter.Format(q));

                Assert.IsTrue(q.RootGraphPattern.TriplePatterns[0].Variables.Intersect(new String[] { "p", "o" }).Count() == 2, "First Triple Pattern should contain ?p and ?o");
                Assert.IsTrue(q.RootGraphPattern.TriplePatterns[1].Variables.Intersect(new String[] { "s", "p" }).Count() == 2, "Second Triple Pattern should contain ?s and ?p");
                Assert.IsTrue(q.RootGraphPattern.TriplePatterns[2].Variables.Intersect(new String[] { "s", "o" }).Count() == 2, "Second Triple Pattern should contain ?s and ?o");
            }
            finally
            {
                SparqlOptimiser.ResetOptimisers();
            }
        }
예제 #4
0
        public void SparqlOptimiserQueryWeightedSimple4()
        {
            try
            {
                const string query = @"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT * WHERE
{
  ?s a rdfs:Class .
  ?s rdfs:label 'example' .
}";

                Graph weightings = new Graph();
#if PORTABLE
                weightings.LoadFromEmbeddedResource("VDS.RDF.Query.SampleWeightings.n3, dotNetRDF.Portable.Test");
#else
                weightings.LoadFromEmbeddedResource("VDS.RDF.Query.SampleWeightings.n3, dotNetRDF.Test");
#endif
                SparqlOptimiser.QueryOptimiser = new WeightedOptimiser(weightings);

                SparqlQuery q = this._parser.ParseFromString(query);

                Console.WriteLine(this._formatter.Format(q));

                Assert.IsTrue(((NodeMatchPattern)((IMatchTriplePattern)q.RootGraphPattern.TriplePatterns[0]).Object).Node.NodeType == NodeType.Literal, "First Triple Pattern should have object 'example'");
                Assert.IsTrue(((NodeMatchPattern)((IMatchTriplePattern)q.RootGraphPattern.TriplePatterns[1]).Object).Node.NodeType == NodeType.Uri, "Second Triple Pattern should have object rdfs:Class");

            }
            finally
            {
                SparqlOptimiser.ResetOptimisers();
            }
        }
        public void SparqlOptimiserQueryWeightedSimple()
        {
            try
            {
                String query = @"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT * WHERE
{
  ?s ?p ?o .
  ?s rdfs:label ?label .
}";

                Graph weightings = new Graph();
                weightings.LoadFromEmbeddedResource("VDS.RDF.Query.SampleWeightings.n3, dotNetRDF.Test");
                SparqlOptimiser.QueryOptimiser = new WeightedOptimiser(weightings);

                SparqlQuery q = this._parser.ParseFromString(query);

                Console.WriteLine(this._formatter.Format(q));

                Assert.IsFalse(q.RootGraphPattern.TriplePatterns[0].IsAcceptAll, "First Triple Pattern should not be the ?s ?p ?o Pattern");
                Assert.IsTrue(q.RootGraphPattern.TriplePatterns[1].IsAcceptAll, "Second Triple Pattern should be the ?s ?p ?o pattern");
            }
            finally
            {
                SparqlOptimiser.ResetOptimisers();
            }
        }
        public void SparqlOptimiserQueryWeightedUnknowns()
        {
            try
            {
                String query = @"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT * WHERE
{
  ?s rdfs:comment 'Predicates are weighted less than subjects' .
  rdfs:comment rdfs:comment 'Subjects are weighted higher than predicates' .
}";

                Graph weightings = new Graph();
                weightings.LoadFromEmbeddedResource("VDS.RDF.Query.SampleWeightings.n3, dotNetRDF.Test");
                SparqlOptimiser.QueryOptimiser = new WeightedOptimiser(weightings);

                SparqlQuery q = this._parser.ParseFromString(query);

                Console.WriteLine(this._formatter.Format(q));

                Assert.IsFalse(q.RootGraphPattern.TriplePatterns[0].Variables.Contains("s"), "First Triple Pattern should not contain ?s");
                Assert.IsTrue(q.RootGraphPattern.TriplePatterns[1].Variables.Contains("s"), "Second Triple Pattern should contain ?s");
            }
            finally
            {
                SparqlOptimiser.ResetOptimisers();
            }
        }
예제 #7
0
        private void EnableFullTextIndex()
        {
            if (this._dataset is FullTextIndexedDataset)
            {
                //Nothing to do
            }
            else if (this._dataset is WebDemandDataset)
            {
                WebDemandDataset ds = (WebDemandDataset)this._dataset;
                this._dataset = ds.UnderlyingDataset;
                this.EnableFullTextIndex();
                this._dataset = new WebDemandDataset(this._dataset);
            }
            else
            {
                //Create and ensure index ready for use
                this._ftIndex = new RAMDirectory();

                var writer = new IndexWriter(this._ftIndex, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30), IndexWriter.MaxFieldLength.UNLIMITED);
                writer.Dispose();

                //Create Indexer and wrap dataset
                this._ftIndexer = new LuceneObjectsIndexer(this._ftIndex, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30), new DefaultIndexSchema());
                if (this._dataset is WebDemandDataset)
                {
                    //Web Demand needs to go around Full Text as we want to index on demand loaded content
                    this._dataset = new WebDemandDataset(new FullTextIndexedDataset(((WebDemandDataset)this._dataset).UnderlyingDataset, this._ftIndexer, true));
                }
                else
                {
                    this._dataset = new FullTextIndexedDataset(this._dataset, this._ftIndexer, true);
                }

                //Create and Register Optimizer
                this._ftSearcher  = new LuceneSearchProvider(Lucene.Net.Util.Version.LUCENE_29, this._ftIndex);
                this._ftOptimiser = new FullTextOptimiser(this._ftSearcher);
                SparqlOptimiser.AddOptimiser(this._ftOptimiser);
            }
            this._processor = new LeviathanQueryProcessor(this._dataset);
        }
 static BrightstarQueryProcessor()
 {
     SparqlOptimiser.AddOptimiser(new VariableEqualsOptimizer());
 }
예제 #9
0
 /// <summary>
 /// Perform any initialization tasks
 /// </summary>
 public void Initialize(IPipelines pipelines)
 {
     SparqlOptimiser.RemoveOptimiser(SparqlOptimiser.AlgebraOptimisers.FirstOrDefault(o => o.GetType() == typeof(LazyBgpOptimiser)));
 }