public IGraph GetSparlAsGraph(string query)
        {
            if (!query.Contains("CONSTRUCT"))
            {
                throw new ArgumentException("Only construct querries can be shown as graphs");
            }
            var res = theConnector.Query(query);

            return(res as IGraph);
        }
Example #2
0
        /// <summary>
        /// Executes a <c>SparqlQuery</c> on the store.
        /// </summary>
        /// <param name="query">SPARQL query string to be executed.</param>
        /// <param name="transaction">An optional transaction.</param>
        /// <returns></returns>
        public StardogResultHandler ExecuteQuery(string query, ITransaction transaction = null)
        {
            Log?.Invoke(query);

            StardogResultHandler resultHandler = new StardogResultHandler();

            _connector.Query(_rdfHandler, resultHandler, query);

            return(resultHandler);
        }
Example #3
0
        public List <ProductType> PopulateProducts(StardogConnector context)
        {
            var factory         = new Factory();
            var productTypeList = new List <ProductType>();

            var resultsQuery =
                context.Query(
                    "PREFIX t: <http://www.semanticweb.org/bobo/ontologies/2015/0/Adriana#>SELECT ?s WHERE {?s rdfs:subClassOf <http://www.semanticweb.org/bobo/ontologies/2015/0/Adriana#Type> .}")
                as SparqlResultSet;

            if (resultsQuery != null)
            {
                resultsQuery.Results.ForEach(item =>
                {
                    var link          = item["s"];
                    var productResult = context.Query(
                        "PREFIX t: <http://www.semanticweb.org/bobo/ontologies/2015/0/Adriana#>SELECT ?s WHERE {?s rdfs:subClassOf <" +
                        link.ToString() + "> .}") as SparqlResultSet;
                    if (productResult != null && productResult.Results.Count > 2)
                    {
                        var product = factory.CreateProductTypes(productResult.Results, link);
                        if (product != null)
                        {
                            productTypeList.Add(product);
                        }
                    }
                });
            }

            foreach (var productType in productTypeList)
            {
                foreach (var subCategory in productType.SubCategories)
                {
                    var query = context.Query("SELECT * WHERE { ?subject rdfs:subClassOf <" + subCategory.URI + "> . ?instance a ?subject . }") as SparqlResultSet;
                    subCategory.Products = new List <ProductInstance>();
                    if (query != null)
                    {
                        foreach (var res in query.Results)
                        {
                            if (res["instance"].ToString().ToLower() != subCategory.URI.ToLower())
                            {
                                subCategory.Products.Add(new ProductInstance
                                {
                                    URI  = res["instance"].ToString(),
                                    Name = res["instance"].ToString().Substring("http://www.semanticweb.org/bobo/ontologies/2015/0/Adriana#".Length)
                                });
                            }
                        }
                    }
                }
            }
            return(productTypeList);
        }
Example #4
0
        public Dictionary <string, string> PopulateAllBrands()
        {
            var dict     = new Dictionary <string, string>();
            var queryUrl = myContext.Query("PREFIX t: <http://www.semanticweb.org/bobo/ontologies/2015/0/Adriana#> SELECT ?y WHERE { ?x rdfs:subClassOf* t:Brand .  ?y rdf:type ?x .  }") as SparqlResultSet;

            if (queryUrl == null)
            {
                return(dict);
            }
            foreach (var aux in queryUrl.Results.Select(res => res["y"].ToString().Substring("http://www.semanticweb.org/bobo/ontologies/2015/0/Adriana#".Length)))
            {
                dict.Add(aux, aux);
            }
            return(dict);
        }
Example #5
0
        public IEnumerable <Provenance> Get(string title)
        {
            using (StardogConnector dog = new StardogConnector(StarDogUrl, DbName, "admin", "admin"))
            {
                SparqlResultSet provResults = dog.Query(
                    "SELECT distinct ?provenanceLabel ?location ?dateAcquired ?ownerLabel ?dispayOrder WHERE  {" +
                    "?artwork a dbo:Artwork ." +
                    "?artwork rdfs:label ?label . " +
                    "?artwork :provenance ?provenance ." +
                    "?provenance :dateAcquired ?dateAcquired ." +
                    "?provenance rdfs:label ?provenanceLabel ." +
                    "?provenance schema:location ?city ." +
                    "?city rdfs:label ?location ." +
                    "?provenance gvp:displayOrder ?dispayOrder." +
                    "?provenance gvp:ulan2779_owned_by ?owner. " +
                    "?owner rdfs:label ?ownerLabel. " +
                    "FILTER regex(str(?label), \"" + title + "\") ." +
                    "FILTER(LANG(?ownerLabel) = \"\" || LANGMATCHES(LANG(?ownerLabel), \"en\")) ." +
                    "FILTER(lang(?location) = \"en\")} " +
                    "ORDER BY ASC(xsd:integer(?dispayOrder))") as SparqlResultSet;

                var provenance = provResults?
                                 .Select(x => new Provenance(x))
                                 .GroupBy(x => x.DispayOrder, (key, g) => g.OrderBy(e => e.DispayOrder).First());
                return(provenance);
            }
        }
Example #6
0
        // GET api/<controller>?title="any"
        public Artwork Get(string title)
        {
            using (StardogConnector dog = new StardogConnector(StarDogUrl, DbName, "admin", "admin"))
            {
                SparqlResultSet artworkResults = dog.Query(
                    "SELECT distinct ?label ?abstract ?depiction ?museumlabel ?authorLabel WHERE {" +
                    "?artwork a dbo:Artwork ." +
                    "?artwork rdfs:label ?label . " +
                    "?artwork dbo:abstract ?abstract ." +
                    "?artwork foaf:depiction ?depiction ." +
                    "?artwork dbo:author ?author ." +
                    "?author foaf:name ?authorLabel ." +
                    "?artwork dbo:museum ?museum ." +
                    "?museum rdfs:label ?museumlabel ." +
                    "FILTER regex(str(?label), \"" + title + "\")" +
                    "FILTER(lang(?museumlabel) = \"en\") ." +
                    "FILTER(lang(?abstract) = \"en\")}") as SparqlResultSet;

                if (!artworkResults.Any())
                {
                    return(null);
                }

                var result = artworkResults[0];
                return(new Artwork(
                           result.Value("label").ToString(),
                           result.Value("museumlabel").ToString(),
                           result.Value("abstract").ToString(),
                           result.Value("depiction").ToString(),
                           result.Value("authorLabel").ToString()));
            }
        }
Example #7
0
        /// <summary>
        /// Executes the referencing queries
        /// </summary>
        private static void AddReferenceGraph()
        {
            Log("Executing AddReferenceGraph()");
            Log("Connecting to Movie store...");
            var movieStore = new StardogConnector(settings.ServerIp, MoviesDbName, settings.Login, settings.Password);

            movieStore.Timeout = int.MaxValue;
            movieStore.DeleteGraph("http://imn.htwk-leipzig.de/pbachman/ontologies/references#");

            Log("Inserting film references...");
            movieStore.Query(File.ReadAllText(ReferenceFilmsQuery));

            Log("Inserting Song references...");
            movieStore.Query(File.ReadAllText(ReferenceSongsQuery));

            Log("Inserting Artists references...");
            movieStore.Query(File.ReadAllText(ReferenceArtistsQuery));

            Log("Inserting Chart song references...");
            movieStore.Query(File.ReadAllText(ReferenceChartsDe1Query));
        }
Example #8
0
 internal object Test()
 {
     resultsQuery = Context.Query("SELECT DISTINCT ?s WHERE { ?s ?p ?o } LIMIT 10") as SparqlResultSet;
     resultsQuery.Results.ForEach(item =>
     {
         var link = item["s"];
         SparqlResultSet productResult = new SparqlResultSet();
         //productResult = Context.Query("select ?p ?o WHERE { ?s ?p ?o FILTER (str(?s) = \"" + link.ToString() + "\" ) }") as SparqlResultSet;
         //Product product = CreateProduct(productResult.Results);
         //products.Add(product);
     });
     return(null);
 }
        // GET api/<controller>
        public IEnumerable <Artist> Get()
        {
            using (StardogConnector dog = new StardogConnector(StarDogUrl, DbName, "admin", "admin"))
            {
                SparqlResultSet artistsResults = dog.Query(
                    "SELECT distinct ?label ?abstract WHERE {" +
                    "?person rdf:type dbo:Artist ." +
                    "?person rdfs:label ?label . " +
                    "?person dbo:abstract ?abstract ." +
                    "FILTER(lang(?abstract) = 'en') ." +
                    "FILTER(lang(?label) = \"en\") }") as SparqlResultSet;

                var artists = artistsResults?.Select(x => new Artist(x));
                return(artists);
            }
        }
        // GET api/<controller>?artist="any"
        public IEnumerable <Artwork> Get(string artist)
        {
            using (StardogConnector dog = new StardogConnector(StarDogUrl, DbName, "admin", "admin"))
            {
                SparqlResultSet artworkResults = dog.Query(
                    "SELECT distinct ?label ?depiction ?abstract WHERE {" +
                    "?artwork a dbo:Artwork ." +
                    "?artwork rdfs:label ?label . " +
                    "?artwork dbo:abstract ?abstract ." +
                    "?artwork foaf:depiction ?depiction ." +
                    "?artwork dbo:author ?author ." +
                    "?author foaf:name ?authorLabel ." +
                    "FILTER regex(str(?authorLabel), \"" + artist + "\")" +
                    "FILTER(lang(?label) = \"en\") ." +
                    "FILTER(lang(?abstract) = \"en\")}") as SparqlResultSet;

                var artworks = artworkResults?.Select(x => new Artwork(x));
                return(artworks);
            }
        }
        // GET api/<controller>/?artistName="any"
        public IEnumerable <Artwork> Get(string artistName)
        {
            using (StardogConnector dog = new StardogConnector(StarDogUrl, DbName, "admin", "admin"))
            {
                SparqlResultSet artworksResults = dog.Query(
                    "SELECT distinct ?label ?abstract?depiction ?labelArtwork WHERE {" +
                    "?person rdf:type dbo:Artist ." +
                    "?person rdfs:label ?label ." +
                    "?artwork a dbo:Artwork ." +
                    "?artwork foaf:depiction ?depiction ." +
                    "?person dbo:abstract ?abstract ." +
                    "?artwork dbo:author ?person ." +
                    "?artwork rdfs:label ?labelArtwork . " +
                    " FILTER(lang(?abstract) = 'en') ." +
                    "FILTER(lang(?label) = 'en') ." +
                    "FILTER regex(str(?labelArtwork),   \"" + artistName + "\")" +
                    "FILTER(lang(?labelArtwork) = 'en') }")
                                                  as SparqlResultSet;

                var artworks = artworksResults?.Select(x => new Artwork(x));
                return(artworks);
            }
        }
Example #12
0
        public void PopulateProductsInfoBySubcategory(StardogConnector context, SubCategory s)
        {
            var queryUrl = context.Query("PREFIX t: <http://www.semanticweb.org/bobo/ontologies/2015/0/Adriana#> SELECT ?ind ?url WHERE { ?ind t:Has_URL ?url. ?ind rdf:type t:" + s.SubCategoryName + " } ") as SparqlResultSet;

            if (queryUrl != null)
            {
                foreach (var res in queryUrl.Results)
                {
                    var p = s.Products.FirstOrDefault(f => f.URI.ToLower() == res["ind"].ToString().ToLower());
                    if (p != null)
                    {
                        p.Url = res["url"].ToString();
                    }
                }
            }
            var queryBuyUrl = context.Query("PREFIX t: <http://www.semanticweb.org/bobo/ontologies/2015/0/Adriana#> SELECT ?ind ?url WHERE { ?ind t:Has_buy_url ?url. ?ind rdf:type t:" + s.SubCategoryName + " } ") as SparqlResultSet;

            if (queryBuyUrl != null)
            {
                foreach (var res in queryBuyUrl.Results)
                {
                    var p = s.Products.FirstOrDefault(f => f.URI.ToLower() == res["ind"].ToString().ToLower());
                    if (p != null)
                    {
                        p.BuyUrl = res["url"].ToString();
                    }
                }
            }
            var queryColours = context.Query("PREFIX t: <http://www.semanticweb.org/bobo/ontologies/2015/0/Adriana#> SELECT ?ind ?c WHERE { ?ind t:Has_colour ?c. ?ind rdf:type t:" + s.SubCategoryName + " } ") as SparqlResultSet;

            if (queryColours != null)
            {
                foreach (var res in queryColours.Results)
                {
                    var p = s.Products.FirstOrDefault(f => f.URI.ToLower() == res["ind"].ToString().ToLower());
                    if (p != null)
                    {
                        if (p.Colour == null)
                        {
                            p.Colour = new List <string>();
                        }
                        p.Colour.Add(res["c"].ToString().Substring("http://www.semanticweb.org/bobo/ontologies/2015/0/Adriana#".Length));
                    }
                }
            }
            var querySeason = context.Query("PREFIX t: <http://www.semanticweb.org/bobo/ontologies/2015/0/Adriana#> SELECT ?ind ?s WHERE { ?ind t:Is_from_season ?s. ?ind rdf:type t:" + s.SubCategoryName + " } ") as SparqlResultSet;

            if (querySeason != null)
            {
                foreach (var res in querySeason.Results)
                {
                    var p = s.Products.FirstOrDefault(f => f.URI.ToLower() == res["ind"].ToString().ToLower());
                    if (p != null)
                    {
                        if (p.Season == null)
                        {
                            p.Season = new List <string>();
                        }
                        p.Season.Add(res["s"].ToString().Substring("http://www.semanticweb.org/bobo/ontologies/2015/0/Adriana#".Length));
                    }
                }
            }
            var queryBrand = context.Query("PREFIX t: <http://www.semanticweb.org/bobo/ontologies/2015/0/Adriana#> SELECT ?ind ?s WHERE { ?ind t:Is_from ?s. ?ind rdf:type t:" + s.SubCategoryName + " } ") as SparqlResultSet;

            if (queryBrand != null)
            {
                foreach (var res in queryBrand.Results)
                {
                    var p = s.Products.FirstOrDefault(f => f.URI.ToLower() == res["ind"].ToString().ToLower());
                    if (p != null)
                    {
                        if (p.Brand == null)
                        {
                            p.Brand = new List <string>();
                        }
                        p.Brand.Add(res["s"].ToString().Substring("http://www.semanticweb.org/bobo/ontologies/2015/0/Adriana#".Length));
                    }
                }
            }
            var queryStyle = context.Query("PREFIX t: <http://www.semanticweb.org/bobo/ontologies/2015/0/Adriana#> SELECT ?ind ?s WHERE { ?ind t:Has_style ?s. ?ind rdf:type t:" + s.SubCategoryName + " } ") as SparqlResultSet;

            if (queryStyle != null)
            {
                foreach (var res in queryStyle.Results)
                {
                    var p = s.Products.FirstOrDefault(f => f.URI.ToLower() == res["ind"].ToString().ToLower());
                    if (p != null)
                    {
                        if (p.Style == null)
                        {
                            p.Style = new List <string>();
                        }
                        p.Style.Add(res["s"].ToString().Substring("http://www.semanticweb.org/bobo/ontologies/2015/0/Adriana#".Length));
                    }
                }
            }
            var queryGender = context.Query("PREFIX t: <http://www.semanticweb.org/bobo/ontologies/2015/0/Adriana#> SELECT ?ind ?s WHERE { ?ind t:For_gender ?s. ?ind rdf:type t:" + s.SubCategoryName + " } ") as SparqlResultSet;

            if (queryGender != null)
            {
                foreach (var res in queryGender.Results)
                {
                    var p = s.Products.FirstOrDefault(f => f.URI.ToLower() == res["ind"].ToString().ToLower());
                    if (p != null)
                    {
                        if (p.Gender == null)
                        {
                            p.Gender = new List <string>();
                        }
                        p.Gender.Add(res["s"].ToString().Substring("http://www.semanticweb.org/bobo/ontologies/2015/0/Adriana#".Length));
                    }
                }
            }
        }
Example #13
0
        /// <summary>
        /// This executes the saved SPARQL against the passed server and with the passed parameters
        /// </summary>
        /// <param name="parameters">Parameters to pass on to the SPARQL query. Can be any of the types that extend MiddlewareParameter</param>
        /// <param name="session">This holds server details, including username and password</param>
        /// <returns></returns>
        public IEnumerable <MiddlewareParameter> ExecuteSelect(IEnumerable <MiddlewareParameter> parameters, Session session, ParameterTypeEnum returnTypeWanted)
        {
            StardogConnector          theConnector = getConnector(session);
            SparqlParameterizedString query        = getQuery(parameters, sparql);

            try
            {
                IEnumerable <SparqlResult> queryResult = theConnector.Query(query.ToString()) as SparqlResultSet;//actually fire the query
                if (queryResult.Count <SparqlResult>() == 0)
                {
                    return(Enumerable.Empty <MiddlewareParameter>());//Don't do unnecessary processing, but returning null causes crashes further up
                }
                List <MiddlewareParameter> Result = new List <MiddlewareParameter>();
                bool linkParams = returnTypeWanted.HasFlag(ParameterTypeEnum.Multivalue);
                //I stay null if not doing multivalue requests
                MiddlewareParameter <List <MiddlewareParameter> > multiValue = null;
                int lineNumber = 1;
                foreach (SparqlResult res in queryResult)//for each line
                {
                    if (linkParams)
                    {
                        multiValue            = new MiddlewareParameter <List <MiddlewareParameter> >(MiddlewareParameterDirection.Out);
                        multiValue.ParamName  = lineNumber++.ToString();
                        multiValue.ParamValue = new List <MiddlewareParameter>();
                        returnTypeWanted     &= ~ParameterTypeEnum.Multivalue;   //The effect of this is allowing us to switch on the return type wanted
                    }
                    foreach (KeyValuePair <string, INode> parameterValue in res) //each parameter
                    {
                        if (linkParams)
                        {
                            handleLanguageTags(multiValue, parameterValue);
                        }
                        MiddlewareParameter toAdd = null;
                        switch (returnTypeWanted)
                        {
                        case ParameterTypeEnum.AsSource:
                            toAdd = createAsPerSourceType(parameterValue);
                            break;

                        case ParameterTypeEnum.String:
                            toAdd = createStringParameter(parameterValue);
                            break;

                        case ParameterTypeEnum.ByteArray:
                            toAdd = createByteParameter(parameterValue);
                            break;

                        case ParameterTypeEnum.Uri:
                            toAdd = createUriParameter(parameterValue);
                            break;

                        default:
                            throw new ArgumentException("Invalid return parameter type specified");
                        }
                        if ((toAdd != null) && (!linkParams))
                        {
                            Result.Add(toAdd);
                        }
                        else if (linkParams)
                        {
                            multiValue.ParamValue.Add(toAdd);
                        }
                    }
                    if (linkParams)
                    {
                        Result.Add(multiValue);
                    }
                }

                return(Result);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine(query.CommandText);
                throw ex;
            }
        }