buildQueries() 공개 메소드

Builds and returns a set of queries to find relations between two object1 and object2.
public buildQueries ( string object1, string object2, int maxDistance, int limit, List ignoredObjects = null, List ignoredProperties = null, int avoidCycles ) : List
object1 string object1
object2 string object2
maxDistance int MaxiumDistance between the two objects
limit int Limit of results
ignoredObjects List List of strings of names of objects be ignored in the Queries for example : http://dbpedia.org/resource/thing
ignoredProperties List List of strings of names of properties to be ignored in the Queries
avoidCycles int Integer value which indicates whether we want to suppress cycles , 0 = no cycle avoidance , 1 = no intermediate object can be object1 or object2 , 2 = like 1 + an object can not occur more than once in a connection
리턴 List
예제 #1
0
        /// <summary>
        /// Builds and returns a set of queries to find relations between two object1 and object2.
        /// </summary>
        /// <param name="object1">object1</param>
        /// <param name="object2">object2</param>
        /// <param name="maxDistance">MaxiumDistance between the two objects</param>
        /// <param name="limit">Limit of results</param>
        /// <param name="ignoredObjects">List of strings of names of objects be ignored in the Queries</param>
        /// <param name="ignoredProperties">List of strings of names of properties to be ignored in the Queries</param>
        /// <param name="avoidCycles">Integer value which indicates whether we want to suppress cycles , 0 = no cycle avoidance ,  1 = no intermediate object can be object1 or object2 ,   2 = like 1 + an object can not occur more than once in a connection</param>
        /// <returns>false means an error happened, true means it's ok</returns>
        public bool generateQueries(string object1, string object2, int maxDistance = 3, int limit = 50, List <string> ignoredObjects = null, List <string> ignoredProperties = null, int avoidCycles = 1)
        {
            //here we reset everything because this method is only used upon new comparison
            //resetting the bool
            isEndOfResults = false;
            //resetting the list of queries
            generatedQueriesList = new List <SPARQLQueryBuilder.InnerQuery>();
            //resetting the resultlist
            curResultSet2 = new List <string>();
            //resetting the uniqueList of JsonObjects
            uniqueJsonObjects = new List <string>();

            //to make other methods see the two objects
            obj1 = object1;
            obj2 = object2;


            SPARQLQueryBuilder builder = new SPARQLQueryBuilder();

            //hardcoded objects to ignore (For testing purposes)
            ignoredObjects = new List <string>();
            ignoredObjects.Add("http://dbpedia.org/ontology/wikiPageWikiLink");
            ignoredObjects.Add("http://dbpedia.org/ontology/wikiPageRedirects");
            ignoredObjects.Add("http://www.w3.org/2002/07/owl#Thing");
            ignoredObjects.Add("http://www.opengis.net/gml/_Feature");


            generatedQueriesList = builder.buildQueries(object1, object2, maxDistance, limit, ignoredObjects, ignoredObjects, avoidCycles);
            //generatedQueriesList=builder.buildQueries(object1, object2, maxDistance, limit, ignoredObjects, ignoredProperties, avoidCycles);

            //if an error happened
            if (generatedQueriesList.Count < 1)
            {
                return(false);
            }

            return(true);
        }
예제 #2
0
        /// <summary>
        /// gets the relations between a list of uris the relations is in form of predicates and objects
        /// </summary>
        /// <param name="uri"> is the list of URI to fnd relation between</param>
        /// <param name="Distance">find the relations that lies at this distance ie : if distance = 3 there are 3 predicates between two URIs</param>
        /// <param name="Limit">the limit of relations to find between each two URIs</param>
        /// <returns>list of containing lists , each lists contains strings in order to discribe the relation
        ///  Egypt >> type >> populated place << type<< syria
        /// </returns>
        public static List <List <string> > getRelations(List <string> uri, int Distance, int Limit = 50)
        {
            List <string> ignoredPredicates = Regex.Split(File.ReadAllText("ignoredPredicates.txt"), "\r\n|\n").ToList();
            List <string> ignoredObjects    = Regex.Split(File.ReadAllText("ignoredObjects.txt"), "\r\n|\n").ToList();

            //Making combinations of URIs to get relations between
            List <KeyValuePair <string, string> > URIPairs = getCombinations(uri);

            SPARQLQueryBuilder QueryBuilder = new SPARQLQueryBuilder();
            List <SPARQLQueryBuilder.InnerQuery> Queries = new List <SPARQLQueryBuilder.InnerQuery>();

            //Building Queries
            foreach (KeyValuePair <string, string> pair in URIPairs)
            {
                List <SPARQLQueryBuilder.InnerQuery> tmpinnerQueries = QueryBuilder.buildQueries(pair.Key, pair.Value, Distance, Limit, ignoredObjects, ignoredPredicates, 1);
                Queries.AddRange(tmpinnerQueries);
            }


            //executing Queries
            List <List <string> > URIS = new List <List <string> >();

            foreach (SPARQLQueryBuilder.InnerQuery Q in Queries)
            {
                //SparqlResultSet resultSet = QueryHandler.ExecuteQueryWithString(Q.queryText);
                SparqlResultSet resultSet = Request.RequestWithHTTP(Q.queryText);

                if (Q.connectState == SPARQLQueryBuilder.connectionType.connectedDirectly || Q.connectState == SPARQLQueryBuilder.connectionType.connectedDirectlyInverted)
                {
                    foreach (SparqlResult result in resultSet)
                    {
                        List <string> toAdd = new List <string>();
                        toAdd.Add(Q.object1);
                        /// foreach (KeyValuePair<string, INode> row in result.ToList());
                        for (int i = 1; i <= Distance; i++)
                        {
                            if (result.HasValue("pf" + i))
                            {
                                toAdd.Add(result.Value("pf" + i).ToString());
                            }

                            if (result.HasValue("of" + i))
                            {
                                toAdd.Add(result.Value("of" + i).ToString());
                            }
                        }
                        toAdd.Add(Q.object2);
                        URIS.Add(toAdd);
                    }
                }
                else if (Q.connectState == SPARQLQueryBuilder.connectionType.connectedViaMiddle || Q.connectState == SPARQLQueryBuilder.connectionType.connectedViaMiddleInverted)
                {
                    foreach (SparqlResult result in resultSet)
                    {
                        List <string> toAdd = new List <string>();
                        toAdd.Add(Q.object1);

                        bool lastAdded = false; // false for literal . true for predicate
                        for (int i = 1; i < Distance; i++)
                        {
                            if (result.HasValue("pf" + i) || result.HasValue("of" + i))
                            {
                                if (!lastAdded)
                                {
                                    if (result.HasValue("pf" + i))
                                    {
                                        toAdd.Add(result.Value("pf" + i).ToString());
                                        lastAdded = true;
                                    }
                                    if (result.HasValue("of" + i))
                                    {
                                        toAdd.Add(result.Value("of" + i).ToString());
                                        lastAdded = false;
                                    }
                                }
                                else
                                {
                                    if (result.HasValue("of" + i))
                                    {
                                        toAdd.Add(result.Value("of" + i).ToString());
                                        lastAdded = false;
                                    }
                                    if (result.HasValue("pf" + i))
                                    {
                                        toAdd.Add(result.Value("pf" + i).ToString());
                                        lastAdded = true;
                                    }
                                }
                            }
                        }

                        toAdd.Add(result.Value("middle").ToString());
                        lastAdded = false;   // false for literal . true for predicate
                        for (int i = Distance; i >= 1; i--)
                        {
                            if (result.HasValue("ps" + i) || result.HasValue("os" + i))
                            {
                                if (!lastAdded)
                                {
                                    if (result.HasValue("ps" + i))
                                    {
                                        toAdd.Add(result.Value("ps" + i).ToString());
                                        lastAdded = true;
                                    }
                                    if (result.HasValue("os" + i))
                                    {
                                        toAdd.Add(result.Value("os" + i).ToString());
                                        lastAdded = false;
                                    }
                                }
                                else
                                {
                                    if (result.HasValue("os" + i))
                                    {
                                        toAdd.Add(result.Value("os" + i).ToString());
                                        lastAdded = false;
                                    }
                                    if (result.HasValue("ps" + i))
                                    {
                                        toAdd.Add(result.Value("ps" + i).ToString());
                                        lastAdded = true;
                                    }
                                }
                            }
                        }
                        toAdd.Add(Q.object2);
                        URIS.Add(toAdd);
                    }
                }
            }

            //relationsComparer c = new relationsComparer();
            return(URIS);//.Distinct(c).ToList();
        }
        /// <summary>
        /// Builds and returns a set of queries to find relations between two object1 and object2.
        /// </summary>
        /// <param name="object1">object1</param>
        /// <param name="object2">object2</param>
        /// <param name="maxDistance">MaxiumDistance between the two objects</param>
        /// <param name="limit">Limit of results</param>
        /// <param name="ignoredObjects">List of strings of names of objects be ignored in the Queries</param>
        /// <param name="ignoredProperties">List of strings of names of properties to be ignored in the Queries</param>
        /// <param name="avoidCycles">Integer value which indicates whether we want to suppress cycles , 0 = no cycle avoidance ,  1 = no intermediate object can be object1 or object2 ,   2 = like 1 + an object can not occur more than once in a connection</param>
        /// <returns>false means an error happened, true means it's ok</returns>
        public bool generateQueries(string object1, string object2, int maxDistance=3, int limit=50, List<string> ignoredObjects = null, List<string> ignoredProperties = null, int avoidCycles = 1)
        {
            //here we reset everything because this method is only used upon new comparison
            //resetting the bool
            isEndOfResults = false;
            //resetting the list of queries
            generatedQueriesList = new List<SPARQLQueryBuilder.InnerQuery>();
            //resetting the resultlist
            curResultSet2 = new List<string>();
            //resetting the uniqueList of JsonObjects
            uniqueJsonObjects = new List<string>();

            //to make other methods see the two objects
            obj1 = object1;
            obj2 = object2;

            SPARQLQueryBuilder builder = new SPARQLQueryBuilder();

            //hardcoded objects to ignore (For testing purposes)
            ignoredObjects = new List<string>();
            ignoredObjects.Add("http://dbpedia.org/ontology/wikiPageWikiLink");
            ignoredObjects.Add("http://dbpedia.org/ontology/wikiPageRedirects");
            ignoredObjects.Add("http://www.w3.org/2002/07/owl#Thing");
            ignoredObjects.Add("http://www.opengis.net/gml/_Feature");

            generatedQueriesList = builder.buildQueries(object1, object2, maxDistance, limit, ignoredObjects, ignoredObjects, avoidCycles);
            //generatedQueriesList=builder.buildQueries(object1, object2, maxDistance, limit, ignoredObjects, ignoredProperties, avoidCycles);

            //if an error happened
            if (generatedQueriesList.Count < 1)
                return false;

            return true;
        }