コード例 #1
0
        public void TestSelectRegexFilter()
        {
            // Arrange
            graph = new RDFGraph();
            RDFSelectQuery query;

            BuildGraph(graph);

            // Act
            query = new RDFSelectQuery();
            var x            = new RDFVariable("x");
            var y            = new RDFVariable("y");
            var z            = new RDFVariable("z");
            var patternGroup = new RDFPatternGroup("PatternGroup1").AddPattern(new RDFPattern(x, y, z));

            var filter = new RDFRegexFilter(x, new Regex(@".1$", RegexOptions.IgnoreCase)); // Filter subjects ending with 1

            patternGroup.AddFilter(filter);

            query.AddPatternGroup(patternGroup)
            .AddProjectionVariable(x)
            .AddProjectionVariable(y)
            .AddProjectionVariable(z);

            var result = query.ApplyToGraph(graph);

            // Assert
            Assert.AreEqual(3, result.SelectResultsCount);
        }
コード例 #2
0
        public void TestSelectNumericAggregators()
        {
            // Arrange
            graph = new RDFGraph();
            RDFSelectQuery query;

            BuildGraphWithValues(graph);

            // Act
            query = new RDFSelectQuery();
            var x             = new RDFVariable("x");
            var type          = new RDFVariable("type");
            var value         = new RDFVariable("value");
            var patternGroup1 = new RDFPatternGroup("PatternGroup1").AddPattern(new RDFPattern(x, RDF.TYPE, type));
            var patternGroup2 = new RDFPatternGroup("PatternGroup2").AddPattern(new RDFPattern(x, RDF.VALUE, value));

            query.AddPatternGroup(patternGroup1)
            .AddPatternGroup(patternGroup2)
            .AddProjectionVariable(type);

            var gm = new RDFGroupByModifier(new List <RDFVariable>()
            {
                type
            });

            gm.AddAggregator(new RDFAvgAggregator(value, new RDFVariable("avg")));
            gm.AddAggregator(new RDFSumAggregator(value, new RDFVariable("sum")));
            gm.AddAggregator(new RDFCountAggregator(value, new RDFVariable("count")));
            gm.AddAggregator(new RDFMinAggregator(value, new RDFVariable("min"), RDFQueryEnums.RDFMinMaxAggregatorFlavors.Numeric));
            gm.AddAggregator(new RDFMaxAggregator(value, new RDFVariable("max"), RDFQueryEnums.RDFMinMaxAggregatorFlavors.Numeric));

            query.AddModifier(gm);

            var result = query.ApplyToGraph(graph);

            // Assert
            var row = result.SelectResults.AsEnumerable().ElementAt(0);

            // average
            string resultStr = (string)row.ItemArray.ElementAt(1);
            int    resultNum = int.Parse(resultStr.Split('^')[0]);

            Assert.AreEqual(30, resultNum);
            // sum
            resultStr = (string)row.ItemArray.ElementAt(2);
            resultNum = int.Parse(resultStr.Split('^')[0]);
            Assert.AreEqual(150, resultNum);
            // count
            resultStr = (string)row.ItemArray.ElementAt(3);
            resultNum = int.Parse(resultStr.Split('^')[0]);
            Assert.AreEqual(5, resultNum);
            // min
            resultStr = (string)row.ItemArray.ElementAt(4);
            resultNum = int.Parse(resultStr.Split('^')[0]);
            Assert.AreEqual(10, resultNum);
            // max
            resultStr = (string)row.ItemArray.ElementAt(5);
            resultNum = int.Parse(resultStr.Split('^')[0]);
            Assert.AreEqual(50, resultNum);
        }
コード例 #3
0
        public void CreateVariableTest()
        {
            //Arrange
            var x = new RDFVariable("x");

            //Assert
            Assert.Equal("?X", x.VariableName);
        }
コード例 #4
0
        /// <summary>
        /// Compacts the reified quadruples by removing their 4 standard statements
        /// </summary>
        public override RDFStore UnreifyQuadruples()
        {
            //Create SPARQL SELECT query for detecting reified quadruples
            var T = new RDFVariable("T", true);
            var C = new RDFVariable("C", true);
            var S = new RDFVariable("S", true);
            var P = new RDFVariable("P", true);
            var O = new RDFVariable("O", true);
            var Q = new RDFSelectQuery()
                    .AddPatternGroup(new RDFPatternGroup("UnreifyQuadruples")
                                     .AddPattern(new RDFPattern(C, T, RDFVocabulary.RDF.TYPE, RDFVocabulary.RDF.STATEMENT))
                                     .AddPattern(new RDFPattern(C, T, RDFVocabulary.RDF.SUBJECT, S))
                                     .AddPattern(new RDFPattern(C, T, RDFVocabulary.RDF.PREDICATE, P))
                                     .AddPattern(new RDFPattern(C, T, RDFVocabulary.RDF.OBJECT, O))
                                     .AddFilter(new RDFIsUriFilter(C))
                                     .AddFilter(new RDFIsUriFilter(T))
                                     .AddFilter(new RDFIsUriFilter(S))
                                     .AddFilter(new RDFIsUriFilter(P))
                                     );

            //Apply it to the store
            var R = Q.ApplyToStore(this);

            //Iterate results
            var reifiedQuadruples = R.SelectResults.Rows.GetEnumerator();

            while (reifiedQuadruples.MoveNext())
            {
                //Get reification data (T, C, S, P, O)
                var tRepresent = RDFQueryUtilities.ParseRDFPatternMember(((DataRow)reifiedQuadruples.Current)["?T"].ToString());
                var tContext   = RDFQueryUtilities.ParseRDFPatternMember(((DataRow)reifiedQuadruples.Current)["?C"].ToString());
                var tSubject   = RDFQueryUtilities.ParseRDFPatternMember(((DataRow)reifiedQuadruples.Current)["?S"].ToString());
                var tPredicate = RDFQueryUtilities.ParseRDFPatternMember(((DataRow)reifiedQuadruples.Current)["?P"].ToString());
                var tObject    = RDFQueryUtilities.ParseRDFPatternMember(((DataRow)reifiedQuadruples.Current)["?O"].ToString());

                //Cleanup store from detected reifications
                if (tObject is RDFResource)
                {
                    this.AddQuadruple(new RDFQuadruple(new RDFContext(((RDFResource)tContext).URI), (RDFResource)tSubject, (RDFResource)tPredicate, (RDFResource)tObject));
                    this.RemoveQuadruple(new RDFQuadruple(new RDFContext(((RDFResource)tContext).URI), (RDFResource)tRepresent, RDFVocabulary.RDF.TYPE, RDFVocabulary.RDF.STATEMENT));
                    this.RemoveQuadruple(new RDFQuadruple(new RDFContext(((RDFResource)tContext).URI), (RDFResource)tRepresent, RDFVocabulary.RDF.SUBJECT, (RDFResource)tSubject));
                    this.RemoveQuadruple(new RDFQuadruple(new RDFContext(((RDFResource)tContext).URI), (RDFResource)tRepresent, RDFVocabulary.RDF.PREDICATE, (RDFResource)tPredicate));
                    this.RemoveQuadruple(new RDFQuadruple(new RDFContext(((RDFResource)tContext).URI), (RDFResource)tRepresent, RDFVocabulary.RDF.OBJECT, (RDFResource)tObject));
                }
                else
                {
                    this.AddQuadruple(new RDFQuadruple(new RDFContext(((RDFResource)tContext).URI), (RDFResource)tSubject, (RDFResource)tPredicate, (RDFLiteral)tObject));
                    this.RemoveQuadruple(new RDFQuadruple(new RDFContext(((RDFResource)tContext).URI), (RDFResource)tRepresent, RDFVocabulary.RDF.TYPE, RDFVocabulary.RDF.STATEMENT));
                    this.RemoveQuadruple(new RDFQuadruple(new RDFContext(((RDFResource)tContext).URI), (RDFResource)tRepresent, RDFVocabulary.RDF.SUBJECT, (RDFResource)tSubject));
                    this.RemoveQuadruple(new RDFQuadruple(new RDFContext(((RDFResource)tContext).URI), (RDFResource)tRepresent, RDFVocabulary.RDF.PREDICATE, (RDFResource)tPredicate));
                    this.RemoveQuadruple(new RDFQuadruple(new RDFContext(((RDFResource)tContext).URI), (RDFResource)tRepresent, RDFVocabulary.RDF.OBJECT, (RDFLiteral)tObject));
                }
            }

            return(this);
        }
コード例 #5
0
        public void CreateLangMatchesFilter()
        {
            //Arrange
            var n      = new RDFVariable("n");
            var filter = new RDFLangMatchesFilter(n, "it-IT");
            var pg1    = new RDFPatternGroup("PG1");

            //Act
            pg1.AddFilter(filter);

            //Assert
            Assert.Contains(filter.ToString(), pg1.ToString());
        }
コード例 #6
0
        public void CreateIsNumericFilter()
        {
            //Arrange
            var x      = new RDFVariable("x");
            var filter = new RDFIsUriFilter(x);
            var pg1    = new RDFPatternGroup("PG1");

            //Act
            pg1.AddFilter(filter);

            //Assert
            Assert.Contains(filter.ToString(), pg1.ToString());
        }
コード例 #7
0
        public void CreateSameTermFilter()
        {
            //Arrange
            var x      = new RDFVariable("x");
            var filter = new RDFSameTermFilter(x, donaldduck);
            var pg1    = new RDFPatternGroup("PG1");

            //Act
            pg1.AddFilter(filter);

            //Assert
            Assert.Contains(filter.ToString(), pg1.ToString());
        }
コード例 #8
0
        public void AddOrderByModifierAscToQueryTest()
        {
            //Arrange
            var n        = new RDFVariable("n");
            var query    = new RDFSelectQuery();
            var modifier = new RDFOrderByModifier(n, RDFQueryEnums.RDFOrderByFlavors.ASC);

            //Act
            query.AddModifier(modifier);

            //Assert
            Assert.Contains($"order by {modifier}".ToUpper(), query.ToString().ToUpper());
        }
コード例 #9
0
        public void CreateTriplePatternTest()
        {
            //Arrange
            var x     = new RDFVariable("x");
            var y     = new RDFVariable("y");
            var dogOf = new RDFResource(RDFVocabulary.DC.BASE_URI + "dogOf");

            //Act
            var y_dogOf_x = new RDFPattern(y, dogOf, x);

            //Assert
            Assert.Equal(x, y_dogOf_x.Object);
        }
コード例 #10
0
        public void CreateComparisonFilter()
        {
            //Arrange
            var y      = new RDFVariable("y");
            var filter = new RDFComparisonFilter(RDFQueryEnums.RDFComparisonFlavors.LessThan, y, new RDFPlainLiteral("25"));
            var pg1    = new RDFPatternGroup("PG1");

            //Act
            pg1.AddFilter(filter);

            //Assert
            Assert.Contains(filter.ToString(), pg1.ToString());
        }
コード例 #11
0
        public void CreateRegexFilter()
        {
            //Arrange
            var n      = new RDFVariable("n");
            var filter = new RDFRegexFilter(n, new Regex(@"Mouse", RegexOptions.IgnoreCase));
            var pg1    = new RDFPatternGroup("PG1");

            //Act
            pg1.AddFilter(filter);

            //Assert
            Assert.Contains(filter.ToString(), pg1.ToString());
        }
コード例 #12
0
        /// <summary>
        /// Compacts the reified triples by removing their 4 standard statements
        /// </summary>
        public void UnreifyTriples()
        {
            //Create SPARQL SELECT query for detecting reified triples
            var T = new RDFVariable("T");
            var S = new RDFVariable("S");
            var P = new RDFVariable("P");
            var O = new RDFVariable("O");
            var Q = new RDFSelectQuery()
                    .AddPatternGroup(new RDFPatternGroup("UnreifyTriples")
                                     .AddPattern(new RDFPattern(T, RDFVocabulary.RDF.TYPE, RDFVocabulary.RDF.STATEMENT))
                                     .AddPattern(new RDFPattern(T, RDFVocabulary.RDF.SUBJECT, S))
                                     .AddPattern(new RDFPattern(T, RDFVocabulary.RDF.PREDICATE, P))
                                     .AddPattern(new RDFPattern(T, RDFVocabulary.RDF.OBJECT, O))
                                     .AddFilter(new RDFIsUriFilter(T))
                                     .AddFilter(new RDFIsUriFilter(S))
                                     .AddFilter(new RDFIsUriFilter(P))
                                     );

            //Apply it to the graph
            var R = Q.ApplyToGraph(this);

            //Iterate results
            var reifiedTriples = R.SelectResults.Rows.GetEnumerator();

            while (reifiedTriples.MoveNext())
            {
                //Get reification data (T, S, P, O)
                var tRepresent = RDFQueryUtilities.ParseRDFPatternMember(((DataRow)reifiedTriples.Current)["?T"].ToString());
                var tSubject   = RDFQueryUtilities.ParseRDFPatternMember(((DataRow)reifiedTriples.Current)["?S"].ToString());
                var tPredicate = RDFQueryUtilities.ParseRDFPatternMember(((DataRow)reifiedTriples.Current)["?P"].ToString());
                var tObject    = RDFQueryUtilities.ParseRDFPatternMember(((DataRow)reifiedTriples.Current)["?O"].ToString());

                //Cleanup graph from detected reifications
                if (tObject is RDFResource)
                {
                    this.AddTriple(new RDFTriple((RDFResource)tSubject, (RDFResource)tPredicate, (RDFResource)tObject));
                    this.RemoveTriple(new RDFTriple((RDFResource)tRepresent, RDFVocabulary.RDF.TYPE, RDFVocabulary.RDF.STATEMENT));
                    this.RemoveTriple(new RDFTriple((RDFResource)tRepresent, RDFVocabulary.RDF.SUBJECT, (RDFResource)tSubject));
                    this.RemoveTriple(new RDFTriple((RDFResource)tRepresent, RDFVocabulary.RDF.PREDICATE, (RDFResource)tPredicate));
                    this.RemoveTriple(new RDFTriple((RDFResource)tRepresent, RDFVocabulary.RDF.OBJECT, (RDFResource)tObject));
                }
                else
                {
                    this.AddTriple(new RDFTriple((RDFResource)tSubject, (RDFResource)tPredicate, (RDFLiteral)tObject));
                    this.RemoveTriple(new RDFTriple((RDFResource)tRepresent, RDFVocabulary.RDF.TYPE, RDFVocabulary.RDF.STATEMENT));
                    this.RemoveTriple(new RDFTriple((RDFResource)tRepresent, RDFVocabulary.RDF.SUBJECT, (RDFResource)tSubject));
                    this.RemoveTriple(new RDFTriple((RDFResource)tRepresent, RDFVocabulary.RDF.PREDICATE, (RDFResource)tPredicate));
                    this.RemoveTriple(new RDFTriple((RDFResource)tRepresent, RDFVocabulary.RDF.OBJECT, (RDFLiteral)tObject));
                }
            }
        }
コード例 #13
0
        public List <String> GetCategoriesOfRooms()
        {
            List <String>  categoreies = new List <string>();
            RDFVariable    typesRooms  = new RDFVariable("TYPESROOM");
            RDFSelectQuery query       = new RDFSelectQuery()
                                         .AddPatternGroup(new RDFPatternGroup("PG1")
                                                          .AddPattern(new RDFPattern(typesRooms, RDFVocabulary.RDFS.SUB_CLASS_OF, GetClassResource("Room"))))
                                         .AddProjectionVariable(typesRooms);

            RDFSelectQueryResult resultDetectedObject = query.ApplyToGraph(ontology.ToRDFGraph(RDFSemanticsEnums.RDFOntologyInferenceExportBehavior.ModelAndData));

            categoreies = (from r in resultDetectedObject.SelectResults.AsEnumerable() select GetNameWithoutURI(r["?TYPESROOM"].ToString())).Distinct().ToList();
            return(categoreies);
        }
コード例 #14
0
        //public List<SemanticObject> GetSemanticObjectsInTheRoom(string room) {

        //    RDFVariable id = new RDFVariable("ID");
        //    RDFVariable type = new RDFVariable("TYPE");
        //    RDFVariable score = new RDFVariable("SCORE");
        //    RDFVariable detections = new RDFVariable("DETECTIONS");
        //    RDFVariable position = new RDFVariable("POSITION");
        //    RDFVariable rotation = new RDFVariable("ROTATION");
        //    RDFVariable scale = new RDFVariable("SCALE");
        //    RDFVariable father = new RDFVariable("FATHER");

        //    RDFSelectQuery query = new RDFSelectQuery()
        //        .AddPatternGroup(new RDFPatternGroup("PG1")
        //            .AddPattern(new RDFPattern(id, RDFVocabulary.RDF.TYPE, type))
        //            .AddPattern(new RDFPattern(id, GetResource("position"), position))
        //            .AddPattern(new RDFPattern(id, GetResource("rotation"), rotation))
        //            .AddPattern(new RDFPattern(id, GetResource("score"), score))
        //            .AddPattern(new RDFPattern(id, GetResource("detections"), detections))
        //            .AddPattern(new RDFPattern(id, GetResource("size"), scale))
        //            .AddPattern(new RDFPattern(id, GetResource("isIn"), GetClassResource(room)))
        //            .AddPattern(new RDFPattern(type, RDFVocabulary.RDFS.SUB_CLASS_OF, GetClassResource("Furniture")).UnionWithNext())
        //            .AddPattern(new RDFPattern(type, RDFVocabulary.RDFS.SUB_CLASS_OF, GetClassResource("Appliance")))
        //            .AddPattern(new RDFPattern(id, GetResource("isPartOf"), father).Optional()))
        //        .AddProjectionVariable(id)
        //        .AddProjectionVariable(type)
        //        .AddProjectionVariable(score)
        //        .AddProjectionVariable(detections)
        //        .AddProjectionVariable(position)
        //        .AddProjectionVariable(rotation)
        //        .AddProjectionVariable(scale)
        //        .AddProjectionVariable(father);

        //    query.AddModifier(new RDFDistinctModifier());

        //    RDFSelectQueryResult resultDetectedObject = query.ApplyToGraph(_ontology.ToRDFGraph(RDFSemanticsEnums.RDFOntologyInferenceExportBehavior.ModelAndData));

        //    List<SemanticObject> result = new List<SemanticObject>();
        //    foreach (DataRow row in resultDetectedObject.SelectResults.AsEnumerable()) {
        //        //if (row.Field<string>("?FATHER") == null)
        //        //{
        //        //    result.Add(new SemanticObject(row.Field<string>("?ID"),
        //        //                                    row.Field<string>("?TYPE"),
        //        //                                    float.Parse(row.Field<string>("?SCORE")),
        //        //                                    int.Parse(row.Field<string>("?DETECTIONS")),
        //        //                                    StringToVector3(row.Field<string>("?POSITION")),
        //        //                                    StringToVector3(row.Field<string>("?SCALE")),
        //        //                                    StringToQuaternion(row.Field<string>("?ROTATION")),
        //        //                                    _semanticRoomManager._semantic_rooms.Find(r => r._id.Equals(room))
        //        //                                    ));
        //        //}
        //    }

        //    return result;
        //}
        #endregion

        #region Private Functions
        private void UpdateListOfObjectsClassInOntology()
        {
            RDFVariable    c     = new RDFVariable("CLASS");
            RDFVariable    tc    = new RDFVariable("TCLASS");
            RDFSelectQuery query = new RDFSelectQuery()
                                   .AddPatternGroup(new RDFPatternGroup("PG1")
                                                    .AddPattern(new RDFPattern(c, RDFVocabulary.RDFS.SUB_CLASS_OF, tc))
                                                    .AddPattern(new RDFPattern(tc, RDFVocabulary.RDFS.SUB_CLASS_OF, GetClassResource("Object"))))
                                   .AddProjectionVariable(c);

            RDFSelectQueryResult resultDetectedObject = query.ApplyToGraph(ontology.ToRDFGraph(RDFSemanticsEnums.RDFOntologyInferenceExportBehavior.ModelAndData));

            objectClassInOntology = (from r in resultDetectedObject.SelectResults.AsEnumerable() select GetNameWithoutURI(r["?CLASS"].ToString())).Distinct().ToList();
        }
コード例 #15
0
        public void CreateQuadruplePatternTest()
        {
            //Arrange
            var x     = new RDFVariable("x");
            var y     = new RDFVariable("y");
            var n     = new RDFVariable("n");
            var dogOf = new RDFResource(RDFVocabulary.DC.BASE_URI + "dogOf");

            //Act
            var n_y_dogOf_x = new RDFPattern(n, y, dogOf, x);

            //Assert
            Assert.Equal(y, n_y_dogOf_x.Subject);
        }
コード例 #16
0
        public void AskQueryResultFalseTest()
        {
            //Arrange
            var y            = new RDFVariable("y");
            var askQuery     = new RDFAskQuery();
            var patternGroup = new RDFPatternGroup("PatternGroup");

            patternGroup.AddPattern(new RDFPattern(donaldduck, y, new RDFTypedLiteral("90", RDFModelEnums.RDFDatatypes.XSD_INTEGER)));
            askQuery.AddPatternGroup(patternGroup);

            //Act
            var result = askQuery.ApplyToGraph(graph);

            //Assert
            Assert.False(result.AskResult);
        }
コード例 #17
0
        public void SelectQueryResultTest()
        {
            //Arrange
            var x            = new RDFVariable("x");
            var q            = new RDFSelectQuery();
            var patternGroup = new RDFPatternGroup("PatternGroup");

            patternGroup.AddPattern(new RDFPattern(x, RDFVocabulary.FOAF.AGE, new RDFTypedLiteral("85", RDFModelEnums.RDFDatatypes.XSD_INTEGER)));
            q.AddPatternGroup(patternGroup);

            //Act
            var selectResult = q.ApplyToGraph(graph);

            //Assert
            Assert.Equal(2, selectResult.SelectResultsCount);
        }
コード例 #18
0
        private void GetProbabilityRoomByClass()
        {
            RDFVariable objectClass  = new RDFVariable("OBJECTCLASS");
            RDFVariable categoryRoom = new RDFVariable("CATEGORYROOM");
            RDFVariable Bnode        = new RDFVariable("bnode");

            RDFSelectQuery query = new RDFSelectQuery()
                                   .AddPatternGroup(new RDFPatternGroup("PG1")
                                                    .AddPattern(new RDFPattern(objectClass, RDFVocabulary.RDFS.SUB_CLASS_OF, Bnode))
                                                    .AddPattern(new RDFPattern(objectClass, RDFVocabulary.RDFS.SUB_CLASS_OF, GetClassResource("Furniture")).UnionWithNext())
                                                    .AddPattern(new RDFPattern(objectClass, RDFVocabulary.RDFS.SUB_CLASS_OF, GetClassResource("Appliance")))
                                                    .AddPattern(new RDFPattern(Bnode, RDFVocabulary.OWL.ON_PROPERTY, GetResource("isIn")))
                                                    .AddPattern(new RDFPattern(Bnode, RDFVocabulary.OWL.SOME_VALUES_FROM, categoryRoom)))
                                   .AddProjectionVariable(objectClass)
                                   .AddProjectionVariable(categoryRoom);

            RDFSelectQueryResult resultDetectedObject = query.ApplyToGraph(ontology.ToRDFGraph(RDFSemanticsEnums.RDFOntologyInferenceExportBehavior.ModelAndData));

            objectClassInRooms = (from r in resultDetectedObject.SelectResults.AsEnumerable() select r["?OBJECTCLASS"].ToString()).Distinct().ToList();

            probabilityRoomByClass = new Dictionary <string, Dictionary <string, float> >();

            var _roomCategoriesInOntology = GetCategoriesOfRooms();

            foreach (string category in _roomCategoriesInOntology)
            {
                Dictionary <string, float> probabilityRoom = new Dictionary <string, float>();
                foreach (string objClass in objectClassInRooms)
                {
                    List <string> posibilities = (from r in resultDetectedObject.SelectResults.AsEnumerable().Where(r => r.Field <string>("?OBJECTCLASS") == objClass) select GetNameWithoutURI(r["?CATEGORYROOM"].ToString())).ToList();

                    if (posibilities.Contains(category))
                    {
                        probabilityRoom.Add(objClass, (float)0.9 / posibilities.Count);
                    }
                    else
                    {
                        probabilityRoom.Add(objClass, (float)0.1 / (_roomCategoriesInOntology.Count - posibilities.Count));
                    }
                }
                probabilityRoomByClass.Add(category, probabilityRoom);
            }
        }
コード例 #19
0
        private RDFSelectQuery BuildSelectAllQuery(RDFFilter filter = null)
        {
            var query        = new RDFSelectQuery();
            var x            = new RDFVariable("x");
            var y            = new RDFVariable("y");
            var z            = new RDFVariable("z");
            var patternGroup = new RDFPatternGroup("PatternGroup1").AddPattern(new RDFPattern(x, y, z));

            if (filter != null)
            {
                patternGroup.AddFilter(filter);
            }

            query.AddPatternGroup(patternGroup)
            .AddProjectionVariable(x)
            .AddProjectionVariable(y)
            .AddProjectionVariable(z);

            return(query);
        }
コード例 #20
0
 public void CreateRDFVariable()
 {
     RDFVariable actor = new RDFVariable("actor");
 }
コード例 #21
0
        /// <summary>
        /// WORKING WITH SPARQL QUERIES
        /// </summary>
        private void WorkingWithQueries(RDFGraph graph, RDFResource donaldduck)
        {
            RDFSelectQuery selectQuery = new RDFSelectQuery();

            // CREATE VARIABLE
            var x = new RDFVariable("x"); // ?X
            var y = new RDFVariable("y"); // ?Y
            var n = new RDFVariable("n"); // ?N
            var c = new RDFVariable("c"); // ?C

            // CREATE PATTERNS
            var dogOf       = new RDFResource(RDFVocabulary.DC.BASE_URI + "dogOf");
            var y_dogOf_x   = new RDFPattern(y, dogOf, x);    // TRIPLE PATTERN
            var c_y_dogOf_x = new RDFPattern(c, y, dogOf, x); // QUADRUPLE PATTERN


            // CREATE EMPTY PATTERN GROUP
            var pg1 = new RDFPatternGroup("PG1");

            // CREATE PATTERN GROUP FROM A LIST OF PATTERNS
            var patterns = new List <RDFPattern>()
            {
                y_dogOf_x
            };
            var pg2 = new RDFPatternGroup("PG2", patterns);

            // ADD PATTERNS TO PATTERN GROUP
            pg1.AddPattern(y_dogOf_x);
            pg1.AddPattern(c_y_dogOf_x);


            // ADD PATTERN GROUPS TO QUERY
            selectQuery.AddPatternGroup(pg1);
            selectQuery.AddPatternGroup(pg2);

            // ADD FILTERS TO PATTERN GROUP
            pg1.AddFilter(new RDFSameTermFilter(new RDFVariable("character"), donaldduck));
            pg1.AddFilter(new RDFLangMatchesFilter(n, "it-IT"));


            // ADD MODIFIERS TO QUERY
            selectQuery.AddModifier(new RDFOrderByModifier(n, RDFQueryEnums.RDFOrderByFlavors.ASC));
            selectQuery.AddModifier(new RDFDistinctModifier());
            selectQuery.AddModifier(new RDFGroupByModifier(new List <RDFVariable> {
                x
            }));
            selectQuery.AddModifier(new RDFLimitModifier(100));
            selectQuery.AddModifier(new RDFOffsetModifier(25));


            // INITIALIZE PROPERTY PATH (VARIABLE TERMS)
            var variablePropPath = new RDFPropertyPath(new RDFVariable("START"), new RDFVariable("END"));
            // INITIALIZE PROPERTY PATH (MIXED TERMS)
            var mixedPropPath = new RDFPropertyPath(new RDFResource("http://res.org/"), new RDFVariable("END"));


            //ADD SEQUENCE STEPS TO PROPERTY PATH
            variablePropPath.AddSequenceStep(new
                                             RDFPropertyPathStep(new RDFResource("rdf:P1")));
            variablePropPath.AddSequenceStep(new
                                             RDFPropertyPathStep(new RDFResource("rdf:P2")));

            //ADD ALTERNATIVE STEPS TO PROPERTY PATH
            var altSteps = new List <RDFPropertyPathStep>();

            altSteps.Add(new RDFPropertyPathStep(new
                                                 RDFResource("rdf:P3")));
            altSteps.Add(new RDFPropertyPathStep(new
                                                 RDFResource("rdf:P7")));
            variablePropPath.AddAlternativeSteps(altSteps);


            // ADD INVERSE SEQUENCE STEP TO PROPERTY PATH: ?START ^rdf:INVP ?END
            variablePropPath.AddSequenceStep(new RDFPropertyPathStep(new RDFResource("rdf:INVP")).Inverse());

            //ADD ALTERNATIVE STEPS (ONE INVERSE) TO PROPERTY PATH: ?START (rdf:P3|^rdf:INVP3) ?END
            var altSteps2 = new List <RDFPropertyPathStep>();

            altSteps2.Add(new RDFPropertyPathStep(new RDFResource("rdf:P3")));
            altSteps2.Add(new RDFPropertyPathStep(new RDFResource("rdf:INVP3")).Inverse());
            variablePropPath.AddAlternativeSteps(altSteps2);

            // ADD SUBQUERY TO QUERY
            RDFSelectQuery mySubQuery = new RDFSelectQuery();

            selectQuery.AddSubQuery(mySubQuery);


            // ADD AGGREGATORS TO GROUPBY MODIFIER
            RDFGroupByModifier gm = new RDFGroupByModifier(new List <RDFVariable> {
                x
            });

            gm.AddAggregator(new RDFAvgAggregator(new RDFVariable("age"), new RDFVariable("avg_age")));
            gm.AddAggregator(new RDFCountAggregator(new RDFVariable("dept"), new RDFVariable("count_dept")));
            gm.AddAggregator(new RDFGroupConcatAggregator(new RDFVariable("name"), new RDFVariable("gc_name"), "-"));
            gm.AddAggregator(new RDFSampleAggregator(new RDFVariable("name"), new RDFVariable("sample_name")));
            gm.AddAggregator(new RDFSumAggregator(new RDFVariable("salary"), new RDFVariable("sum_salary")));
            gm.AddAggregator(new RDFMinAggregator(new RDFVariable("age"), new RDFVariable("min_age"),
                                                  RDFQueryEnums.RDFMinMaxAggregatorFlavors.Numeric)); //?age is expected to have numeric typedliterals
            gm.AddAggregator(new RDFMinAggregator(new RDFVariable("city"), new RDFVariable("min_city"),
                                                  RDFQueryEnums.RDFMinMaxAggregatorFlavors.String));
            gm.AddAggregator(new RDFMaxAggregator(new RDFVariable("salary"), new RDFVariable("max_salary"),
                                                  RDFQueryEnums.RDFMinMaxAggregatorFlavors.Numeric)); //?salary is expected to have numeric typedliterals
            gm.AddAggregator(new RDFMaxAggregator(new RDFVariable("city"), new RDFVariable("min_city"),
                                                  RDFQueryEnums.RDFMinMaxAggregatorFlavors.String));


            // It is possible to filter a group - by partitioned set of SPARQL results by applying the SetHavingClause operator on desired aggregators:

            // ADD AGGREGATORS TO GROUPBY MODIFIER
            RDFModelEnums.RDFDatatypes xsdDbl = RDFModelEnums.RDFDatatypes.XSD_DOUBLE;
            RDFModelEnums.RDFDatatypes xsdInt = RDFModelEnums.RDFDatatypes.XSD_INT;
            gm.AddAggregator(new RDFAvgAggregator(new RDFVariable("age"), new RDFVariable("avg_age"))
                             .SetHavingClause(RDFQueryEnums.RDFComparisonFlavors.GreaterThan, new RDFTypedLiteral("25.5", xsdDbl))
                             );
            gm.AddAggregator(new RDFCountAggregator(new RDFVariable("dept"), new RDFVariable("count_dept"))
                             .SetHavingClause(RDFQueryEnums.RDFComparisonFlavors.EqualTo, new RDFTypedLiteral("4", xsdInt))
                             );


            //Declare the following SPARQL values:

            /*
             * VALUES (?a ?b ?c) {
             * ("1" "2" "3")
             * ("2" "4" "6")
             * ("3" "6" UNDEF)
             * }
             */
            RDFValues myValues = new RDFValues()
                                 .AddColumn(new RDFVariable("a"),
                                            new List <RDFPatternMember>()
            {
                new RDFPlainLiteral("1"),
                new RDFPlainLiteral("2"),
                new RDFPlainLiteral("3")
            })
                                 .AddColumn(new RDFVariable("b"),
                                            new List <RDFPatternMember>()
            {
                new RDFPlainLiteral("2"),
                new RDFPlainLiteral("4"),
                new RDFPlainLiteral("6")
            })
                                 .AddColumn(new RDFVariable("c"),
                                            new List <RDFPatternMember>()
            {
                new RDFPlainLiteral("3"),
                new RDFPlainLiteral("6"),
                null     //UNDEF
            });

            // ADD PROPERTY PATH TO PATTERN GROUP
            pg1.AddValues(myValues);

            // CREATING AND EXECUTING SELECT QUERIES



            // APPLY SELECT QUERY TO GRAPH
            RDFSelectQueryResult selectQueryResult = selectQuery.ApplyToGraph(graph);

            // APPLY SELECT QUERY TO STORE
            //RDFSelectQueryResult selectQueryResult = selectQuery.ApplyToStore(store);
            // APPLY SELECT QUERY TO FEDERATION
            //RDFSelectQueryResult selectQueryResult = selectQuery.ApplyToFederation(federation);

            // EXPORT SELECT QUERY RESULTS TO SPARQL XML FORMAT (FILE)
            selectQueryResult.ToSparqlXmlResult(@"C:\TMP\select_results.srq");
            // EXPORT SELECT QUERY RESULTS TO SPARQL XML FORMAT (STREAM)
            //selectQueryResult.ToSparqlXmlResult(myStream);
            // IMPORT SELECT QUERY RESULTS FROM SPARQL XML FORMAT (FILE)
            selectQueryResult = RDFSelectQueryResult.FromSparqlXmlResult(@"C:\TMP\select_results.srq");
            // IMPORT SELECT QUERY RESULTS FROM SPARQL XML FORMAT (STREAM)
            //selectQueryResult = RDFSelectQueryResult.FromSparqlXmlResult(myStream);
        }
コード例 #22
0
        public void SelectDogsOrCats_UnionWithNext_Test()
        {
            // CREATE SELECT QUERY
            RDFSelectQuery selectQuery = new RDFSelectQuery();

            selectQuery.AddPrefix(RDFNamespaceRegister.GetByPrefix("dc"));
            selectQuery.AddPrefix(RDFNamespaceRegister.GetByPrefix("foaf"));

            var x = new RDFVariable("x");
            var y = new RDFVariable("y");

            RDFPatternMember dogOfPredicate = GraphBuilder2.dogOf;
            RDFPatternMember catOfPredicate = GraphBuilder2.catOf;

            var x_dogOf_y = new RDFPattern(x, dogOfPredicate, y);
            var x_catOf_y = new RDFPattern(x, catOfPredicate, y);

            //var orFilter = new RDFBooleanOrFilter(x_dogOf_y, x_catOf_y);

            // CREATE PATTERN GROUP FROM A LIST OF PATTERNS
            var pg1 = new RDFPatternGroup("PG1");

            pg1.AddPattern(x_dogOf_y.UnionWithNext());
            pg1.AddPattern(x_catOf_y);

            selectQuery.AddPatternGroup(pg1);

            selectQuery.AddProjectionVariable(x);
            selectQuery.AddProjectionVariable(y);

            selectQuery.AddModifier(new RDFOrderByModifier(x, RDFQueryEnums.RDFOrderByFlavors.ASC));



            var sparqlCommand = selectQuery.ToString();

            /*
             * Generates this sparql command
             *
             * PREFIX dc: <http://purl.org/dc/elements/1.1/>
             * PREFIX foaf: <http://xmlns.com/foaf/0.1/>
             *
             * SELECT ?X ?Y
             * WHERE {
             * {
             * { ?X dc:dogOf ?Y }
             * UNION
             * { ?X dc:catOf ?Y }
             * }
             * }
             * ORDER BY ASC(?X)
             */

            // APPLY SELECT QUERY TO GRAPH
            RDFSelectQueryResult selectQueryResult = selectQuery.ApplyToGraph(graph);

            // EXPORT SELECT QUERY RESULTS TO SPARQL XML FORMAT (FILE)
            selectQueryResult.ToSparqlXmlResult(@"C:\TEMP\select_results.srq");

            Assert.Equal(2, selectQueryResult.SelectResultsCount);

            //DataRow row = selectQueryResult.SelectResults.Rows[0];
            //var dog = row[0].ToString();
            //var person = row[1].ToString();
            //Assert.Equal(pluto.URI.ToString(), dog);
            //Assert.Equal(mickeyMouse.URI.ToString(), person);


            /*
             * Generates this file content
             *
             * <?xml version="1.0" encoding="utf-8"?>
             * <sparql xmlns="http://www.w3.org/2005/sparql-results#">
             * <head>
             * <variable name="?X" />
             * <variable name="?Y" />
             * </head>
             * <results>
             * <result>
             * <binding name="?X">
             * <uri>https://en.wikipedia.org/wiki/Figaro_(Disney)</uri>
             * </binding>
             * <binding name="?Y">
             * <uri>https://en.wikipedia.org/wiki/Minnie_Mouse</uri>
             * </binding>
             * </result>
             * <result>
             * <binding name="?X">
             * <uri>https://en.wikipedia.org/wiki/Pluto_(Disney)</uri>
             * </binding>
             * <binding name="?Y">
             * <uri>https://en.wikipedia.org/wiki/Mickey_Mouse</uri>
             * </binding>
             * </result>
             * </results>
             * </sparql>
             */
        }
コード例 #23
0
        public void SelectDogs()
        {
            // CREATE SELECT QUERY
            RDFSelectQuery selectQuery = new RDFSelectQuery();

            selectQuery.AddPrefix(RDFNamespaceRegister.GetByPrefix("dc"));
            selectQuery.AddPrefix(RDFNamespaceRegister.GetByPrefix("foaf"));

            var x = new RDFVariable("x");
            var y = new RDFVariable("y");

            RDFPatternMember predicate = GraphBuilder2.dogOf;

            var x_dogOf_y = new RDFPattern(x, predicate, y);

            // CREATE PATTERN GROUP FROM A LIST OF PATTERNS
            var patterns = new List <RDFPattern>()
            {
                x_dogOf_y
            };
            var pg1 = new RDFPatternGroup("PG1", patterns);

            // ADD PATTERN GROUPS TO QUERY
            selectQuery.AddPatternGroup(pg1);

            selectQuery.AddProjectionVariable(x);
            selectQuery.AddProjectionVariable(y);

            // APPLY SELECT QUERY TO GRAPH

            var sparqlCommand = selectQuery.ToString();

            /*
             * Generates this sparql command
             *
             * PREFIX dc: <http://purl.org/dc/elements/1.1/>
             * PREFIX foaf: <http://xmlns.com/foaf/0.1/>
             *
             * SELECT ?X ?Y
             * WHERE {
             * {
             * ?X dc:dogOf ?Y .
             * }
             * }
             */

            RDFSelectQueryResult selectQueryResult = selectQuery.ApplyToGraph(graph);

            // EXPORT SELECT QUERY RESULTS TO SPARQL XML FORMAT (FILE)
            selectQueryResult.ToSparqlXmlResult(@"C:\TEMP\select_results.srq");

            Assert.Equal(1, selectQueryResult.SelectResultsCount);

            DataRow row    = selectQueryResult.SelectResults.Rows[0];
            var     dog    = row[0].ToString();
            var     person = row[1].ToString();

            Assert.Equal(pluto.URI.ToString(), dog);
            Assert.Equal(mickeyMouse.URI.ToString(), person);


            /*
             * Generates this file content
             *
             * <?xml version="1.0" encoding="utf-8"?>
             * <sparql xmlns="http://www.w3.org/2005/sparql-results#">
             * <head>
             * <variable name="?X" />
             * <variable name="?Y" />
             * </head>
             * <results>
             * <result>
             * <binding name="?X">
             * <uri>https://en.wikipedia.org/wiki/Pluto_(Disney)</uri>
             * </binding>
             * <binding name="?Y">
             * <uri>https://en.wikipedia.org/wiki/Mickey_Mouse</uri>
             * </binding>
             * </result>
             * </results>
             * </sparql>
             */
        }
コード例 #24
0
        public void Test2()
        {
            string   filePath = GetPath(@"Files\Test1.ttl");
            RDFGraph graph    = RDFGraph.FromFile(RDFModelEnums.RDFFormats.Turtle, filePath);

            RDFSelectQuery selectQuery = new RDFSelectQuery();

            selectQuery.AddPrefix(RDFNamespaceRegister.GetByPrefix("foaf"));

            var name   = new RDFVariable("name");
            var friend = new RDFVariable("friend");
            var count  = new RDFVariable("count");
            var person = new RDFVariable("person");

            // ?person foaf:name ?name .
            var person_foaf_name_name = new RDFPattern(person, RDFVocabulary.FOAF.NAME, name);
            // ?person foaf:knows ?friend .
            var person_foaf_knows_friend = new RDFPattern(person, RDFVocabulary.FOAF.KNOWS, friend);

            var pg1 = new RDFPatternGroup("PG1");

            pg1.AddPattern(person_foaf_name_name);
            pg1.AddPattern(person_foaf_knows_friend);

            selectQuery.AddPatternGroup(pg1);


            selectQuery.AddProjectionVariable(name);
            //selectQuery.AddProjectionVariable(count);

            // GROUP BY ?PERSON ?NAME
            // var gm = new RDFGroupByModifier(new List<RDFVariable>() { person, name });
            // GROUP BY ?NAME
            var gm = new RDFGroupByModifier(new List <RDFVariable>()
            {
                name
            });

            // (COUNT(?friend) AS ?count)
            gm.AddAggregator(new RDFCountAggregator(friend, count));

            selectQuery.AddModifier(gm);


            var sparqlCommand = selectQuery.ToString();

            #region Target query in the SPARQL 1.1 documentation

            /*
             * Target query in the document
             *
             * PREFIX foaf: <http://xmlns.com/foaf/0.1/>
             * SELECT ?name (COUNT(?friend) AS ?count)
             * WHERE {
             * ?person foaf:name ?name .
             * ?person foaf:knows ?friend .
             * } GROUP BY ?person ?name
             */
            #endregion

            #region Managed to build this command

            /*
             * PREFIX foaf: <http://xmlns.com/foaf/0.1/>
             *
             * SELECT ?NAME (COUNT(?FRIEND) AS ?COUNT)
             * WHERE {
             * {
             * ?PERSON foaf:name ?NAME .
             * ?PERSON foaf:knows ?FRIEND .
             * }
             * }
             * GROUP BY ?NAME
             */
            #endregion

            #region Managed to build this command

            /*
             * Managed to build this command
             *
             * PREFIX foaf: <http://xmlns.com/foaf/0.1/>
             *
             * SELECT ?PERSON ?NAME (COUNT(?FRIEND) AS ?COUNT)
             * WHERE {
             * {
             * ?PERSON foaf:name ?NAME .
             * ?PERSON foaf:knows ?FRIEND .
             * }
             * }
             * GROUP BY ?PERSON ?NAME
             */
            #endregion

            // APPLY SELECT QUERY TO GRAPH
            RDFSelectQueryResult selectQueryResult = selectQuery.ApplyToGraph(graph);

            // EXPORT SELECT QUERY RESULTS TO SPARQL XML FORMAT (FILE)
            //selectQueryResult.ToSparqlXmlResult(@"C:\TEMP\Test2.srq");

            #region Got result

            /*
             * Got result
             *
             * <?xml version="1.0" encoding="utf-8"?>
             * <sparql xmlns="http://www.w3.org/2005/sparql-results#">
             * <head>
             * <variable name="?NAME" />
             * <variable name="?COUNT" />
             * </head>
             * <results>
             * <result>
             * <binding name="?NAME">
             * <literal>Alice</literal>
             * </binding>
             * <binding name="?COUNT">
             * <literal datatype="http://www.w3.org/2001/XMLSchema#decimal">3</literal>
             * </binding>
             * </result>
             * <result>
             * <binding name="?NAME">
             * <literal>Bob</literal>
             * </binding>
             * <binding name="?COUNT">
             * <literal datatype="http://www.w3.org/2001/XMLSchema#decimal">1</literal>
             * </binding>
             * </result>
             * <result>
             * <binding name="?NAME">
             * <literal>Charlie</literal>
             * </binding>
             * <binding name="?COUNT">
             * <literal datatype="http://www.w3.org/2001/XMLSchema#decimal">1</literal>
             * </binding>
             * </result>
             * </results>
             * </sparql>
             *
             */
            #endregion

            #region Got result

            /*
             *
             *
             * <?xml version="1.0" encoding="utf-8"?>
             * <sparql xmlns="http://www.w3.org/2005/sparql-results#">
             * <head>
             * <variable name="?PERSON" />
             * <variable name="?NAME" />
             * <variable name="?COUNT" />
             * </head>
             * <results>
             * <result>
             * <binding name="?PERSON">
             * <uri>http://example.org/alice#me</uri>
             * </binding>
             * <binding name="?NAME">
             * <literal>Alice</literal>
             * </binding>
             * <binding name="?COUNT">
             * <literal datatype="http://www.w3.org/2001/XMLSchema#decimal">3</literal>
             * </binding>
             * </result>
             * <result>
             * <binding name="?PERSON">
             * <uri>http://example.org/bob#me</uri>
             * </binding>
             * <binding name="?NAME">
             * <literal>Bob</literal>
             * </binding>
             * <binding name="?COUNT">
             * <literal datatype="http://www.w3.org/2001/XMLSchema#decimal">1</literal>
             * </binding>
             * </result>
             * <result>
             * <binding name="?PERSON">
             * <uri>http://example.org/charlie#me</uri>
             * </binding>
             * <binding name="?NAME">
             * <literal>Charlie</literal>
             * </binding>
             * <binding name="?COUNT">
             * <literal datatype="http://www.w3.org/2001/XMLSchema#decimal">1</literal>
             * </binding>
             * </result>
             * </results>
             * </sparql>
             *
             */
            #endregion

            #region Target result from SPARQL 1.1 documentation

            /*
             * Target result
             * 3 Different query results formats supported by SPARQL 1.1 (XML, JSON, CSV, TSV)
             *
             * <?xml version="1.0"?>
             * <sparql xmlns="http://www.w3.org/2005/sparql-results#">
             * <head>
             * <variable name="name"/>
             * <variable name="count"/>
             * </head>
             * <results>
             * <result>
             * <binding name="name">
             * <literal>Alice</literal>
             * </binding>
             * <binding name="count">
             * <literal datatype="http://www.w3.org/2001/XMLSchema#integer">3</literal>
             * </binding>
             * </result>
             * <result>
             * <binding name="name">
             * <literal>Bob</literal>
             * </binding>
             * <binding name="count">
             * <literal datatype="http://www.w3.org/2001/XMLSchema#integer">1</literal>
             * </binding>
             * </result>
             * <result>
             * <binding name="name">
             * <literal>Charlie</literal>
             * </binding>
             * <binding name="count">
             * <literal datatype="http://www.w3.org/2001/XMLSchema#integer">1</literal>
             * </binding>
             * </result>
             * </results>
             * </sparql>
             */
            #endregion

            Assert.Equal(3, selectQueryResult.SelectResultsCount);
        }
コード例 #25
0
        public void Test1()
        {
            string   filePath = GetPath(@"Files\Test1.ttl");
            RDFGraph graph    = RDFGraph.FromFile(RDFModelEnums.RDFFormats.Turtle, filePath);

            RDFSelectQuery selectQuery = new RDFSelectQuery();

            // PREFIX foaf: <http://xmlns.com/foaf/0.1/>
            selectQuery.AddPrefix(RDFNamespaceRegister.GetByPrefix("foaf"));

            // ?NAME
            var name = new RDFVariable("name");
            // ?FRIEND
            var friend = new RDFVariable("friend");
            // ?PERSON
            var person = new RDFVariable("person");

            // ?PERSON foaf:name ?NAME .
            var person_foaf_name_name = new RDFPattern(person, RDFVocabulary.FOAF.NAME, name);
            // ?PERSON foaf:knows ?FRIEND .
            var person_foaf_knows_friend = new RDFPattern(person, RDFVocabulary.FOAF.KNOWS, friend);

// WHERE {
//  {
//    ?PERSON foaf:name? NAME .
//    ?PERSON foaf:knows? FRIEND .
//  }
// }
            var pg1 = new RDFPatternGroup("PG1");

            pg1.AddPattern(person_foaf_name_name);
            pg1.AddPattern(person_foaf_knows_friend);

            selectQuery.AddPatternGroup(pg1);

            // SELECT ?PERSON ?NAME ?FRIEND
            selectQuery.AddProjectionVariable(person);
            selectQuery.AddProjectionVariable(name);
            selectQuery.AddProjectionVariable(friend);

            var sparqlCommand = selectQuery.ToString();

            #region Generated SPARQL command

            /*
             * Generates this sparql command
             *
             * PREFIX foaf: <http://xmlns.com/foaf/0.1/>
             *
             * SELECT ?PERSON ?NAME ?FRIEND
             * WHERE {
             * {
             * ?PERSON foaf:name ?NAME .
             * ?PERSON foaf:knows ?FRIEND .
             * }
             * }
             *
             */
            #endregion

            // APPLY SELECT QUERY TO GRAPH
            RDFSelectQueryResult selectQueryResult = selectQuery.ApplyToGraph(graph);

            // EXPORT SELECT QUERY RESULTS TO SPARQL XML FORMAT (FILE)
            //selectQueryResult.ToSparqlXmlResult(@"C:\TEMP\Test1.srq");

            #region Generated result file

            /*
             * <?xml version="1.0" encoding="utf-8"?>
             * <sparql xmlns="http://www.w3.org/2005/sparql-results#">
             * <head>
             *  <variable name="?PERSON" />
             *  <variable name="?NAME" />
             *  <variable name="?FRIEND" />
             * </head>
             * <results>
             *  <result>
             *    <binding name="?PERSON">
             *      <uri>http://example.org/alice#me</uri>
             *    </binding>
             *    <binding name="?NAME">
             *      <literal>Alice</literal>
             *    </binding>
             *    <binding name="?FRIEND">
             *      <uri>http://example.org/bob#me</uri>
             *    </binding>
             *  </result>
             *  <result>
             *    <binding name="?PERSON">
             *      <uri>http://example.org/alice#me</uri>
             *    </binding>
             *    <binding name="?NAME">
             *      <literal>Alice</literal>
             *    </binding>
             *    <binding name="?FRIEND">
             *      <uri>http://example.org/charlie#me</uri>
             *    </binding>
             *  </result>
             *  <result>
             *    <binding name="?PERSON">
             *      <uri>http://example.org/alice#me</uri>
             *    </binding>
             *    <binding name="?NAME">
             *      <literal>Alice</literal>
             *    </binding>
             *    <binding name="?FRIEND">
             *      <uri>http://example.org/snoopy</uri>
             *    </binding>
             *  </result>
             *  <result>
             *    <binding name="?PERSON">
             *      <uri>http://example.org/bob#me</uri>
             *    </binding>
             *    <binding name="?NAME">
             *      <literal>Bob</literal>
             *    </binding>
             *    <binding name="?FRIEND">
             *      <uri>http://example.org/alice#me</uri>
             *    </binding>
             *  </result>
             *  <result>
             *    <binding name="?PERSON">
             *      <uri>http://example.org/charlie#me</uri>
             *    </binding>
             *    <binding name="?NAME">
             *      <literal>Charlie</literal>
             *    </binding>
             *    <binding name="?FRIEND">
             *      <uri>http://example.org/alice#me</uri>
             *    </binding>
             *  </result>
             * </results>
             * </sparql>
             */
            #endregion

            Assert.Equal(5, selectQueryResult.SelectResultsCount);
        }