public SparqlObject SelectData(string pSPARQLEndpoint, string pGraph, string pConsulta, string pQueryParam, string pUsername, string pPassword) { SparqlObject datosSPARQL = null; string urlConsulta = pSPARQLEndpoint; WebClient webClient = new WebClient(); webClient.Encoding = Encoding.UTF8; webClient.Headers.Add(HttpRequestHeader.ContentType, "application/x-www-form-urlencoded"); if (!string.IsNullOrEmpty(pUsername) && !string.IsNullOrEmpty(pPassword)) { webClient.Credentials = new System.Net.NetworkCredential(pUsername, pPassword); } NameValueCollection parametros = new NameValueCollection(); parametros.Add("default-graph-uri", pGraph); parametros.Add(pQueryParam, pConsulta); parametros.Add("format", "application/sparql-results+json"); byte[] responseArray = null; int numIntentos = 0; Exception exception = null; while (responseArray == null && numIntentos < 5) { numIntentos++; try { responseArray = webClient.UploadValues(urlConsulta, "POST", parametros); exception = null; } catch (Exception ex) { Thread.Sleep(10000); exception = ex; } } if (exception != null) { throw exception; } string jsonRespuesta = System.Text.Encoding.UTF8.GetString(responseArray); if (!string.IsNullOrEmpty(jsonRespuesta)) { datosSPARQL = JsonConvert.DeserializeObject <SparqlObject>(jsonRespuesta); } return(datosSPARQL); }
/// <summary> /// Busca personas en el API de DBPEDIA /// </summary> /// <param name="q">Texto a buscar (con urlEncode)</param> /// <returns>Objeto con las personas encontradas</returns> public static DBPEDIAData Search(string q) { string SPARQLEndpoint = "https://dbpedia.org/sparql"; string Graph = "http://dbpedia.org"; string consulta = "select * where {?s <http://www.w3.org/2000/01/rdf-schema#label> '" + q + "'@es. ?s a ?rdftype.FILTER(?rdftype in (<http://dbpedia.org/ontology/Organisation>,<http://dbpedia.org/ontology/Place>)) MINUS{?s <http://dbpedia.org/ontology/wikiPageDisambiguates> ?dis} OPTIONAL {?s <http://www.w3.org/2002/07/owl#sameAs> ?geonames.FILTER(?geonames like'http://sws.geonames.org*')}}"; string QueryParam = "query"; SparqlUtility utility = new SparqlUtility(); SparqlObject sparqlObject = utility.SelectData(SPARQLEndpoint, Graph, consulta, QueryParam, "", ""); DBPEDIAData dBPEDIAData = new DBPEDIAData(); foreach (var result in sparqlObject.results.bindings) { if (result.ContainsKey("s") && result["s"] != null) { dBPEDIAData.uri_dbpedia = result["s"].value; } if (result.ContainsKey("geonames") && result["geonames"] != null) { dBPEDIAData.uri_geonames = result["geonames"].value; } } return(dBPEDIAData); }
public SparqlObject SelectData(string pSPARQLEndpoint, string pGraph, string pConsulta, string pQueryParam, string pUsername, string pPassword) { SparqlResultSet sparqlResultSet = (SparqlResultSet)_dataGraph.ExecuteQuery(pConsulta.ToString()); SparqlObject sparqlObject = new SparqlObject(); sparqlObject.results = new SparqlObject.Results(); sparqlObject.results.bindings = new List <Dictionary <string, SparqlObject.Data> >(); foreach (var sparqlResult in sparqlResultSet) { Dictionary <string, SparqlObject.Data> dict = new Dictionary <string, SparqlObject.Data>(); foreach (var variable in sparqlResult.Variables) { SparqlObject.Data data = new SparqlObject.Data(); if (sparqlResult[variable] != null) { data.type = variable; if (sparqlResult[variable] is LiteralNode) { data.value = ((LiteralNode)(sparqlResult[variable])).Value; if (((LiteralNode)sparqlResult[variable]).DataType != null) { data.datatype = ((LiteralNode)sparqlResult[variable]).DataType.ToString(); } } else { data.value = sparqlResult[data.type].ToString(); } dict.Add(data.type, data); } } sparqlObject.results.bindings.Add(dict); } return(sparqlObject); }
public void CargarPeliculas(List <Movie> peliculas, Dictionary <string, string> guidDictionary) { mResourceApi.ChangeOntoly("pelicula"); List <string> guidsExistentes = new List <string>(); try { SparqlObject resultados = mResourceApi.VirtuosoQuery("Select distinct ?o ?id ", "Where { ?o <http://schema.org/name> ?id }", "pelicula"); foreach (var resultado in resultados.results.bindings) { guidsExistentes.Add(resultado["o"].value); } } catch (Exception e) { mResourceApi.Log.Error($"Error al hacer la consulta a Virtuoso: {e.Message} -> {e.StackTrace}"); } foreach (Movie pelicula in peliculas) { if (!guidsExistentes.Contains("http://try.gnoss.com/items/" + guidDictionary[pelicula.Schema_name])) { try { ComplexOntologyResource complexResource = pelicula.ToGnossApiResource(mResourceApi, null, new Guid(guidDictionary[pelicula.Schema_name].Split('_')[1]), new Guid(guidDictionary[pelicula.Schema_name].Split('_')[2])); mResourceApi.LoadComplexSemanticResource(complexResource); } catch (Exception e) { mResourceApi.Log.Error(pelicula.Schema_name); } } } }