Beispiel #1
0
        /// <summary>
        /// Obtiene los detalles de un rdf
        /// </summary>
        /// <returns></returns>
        public IActionResult DetailsRdf(Guid itemId)
        {
            //Cargamos la ontología
            RohGraph ontologyGraph = new RohGraph();

            ontologyGraph = _callEDtlPublishService.CallGetOntology();

            SparqlResultSet sparqlResultSetNombresPropiedades = (SparqlResultSet)ontologyGraph.ExecuteQuery("select distinct ?entidad ?nombre where { ?entidad <http://www.w3.org/2000/01/rdf-schema#label> ?nombre. FILTER(lang(?nombre) = 'es')}");

            //Guardamos todos los nombres de las propiedades en un diccionario
            Dictionary <string, string> communNamePropierties = new Dictionary <string, string>();

            foreach (SparqlResult sparqlResult in sparqlResultSetNombresPropiedades.Results)
            {
                communNamePropierties.Add(sparqlResult["entidad"].ToString(), ((LiteralNode)(sparqlResult["nombre"])).Value);
            }

            //Cargamos los datos
            DiscoverItem discoveryGraph = _discoverItemService.GetDiscoverItemById(itemId);
            RohGraph     dataGraph      = new RohGraph();

            dataGraph.LoadFromString(discoveryGraph.DiscoverRdf, new RdfXmlParser());

            //Guardamos todas las entidades que no son blankNodes
            List <String>   entities = new List <string>();
            SparqlResultSet sparqlResultSetListaEntidadesNotBN = (SparqlResultSet)dataGraph.ExecuteQuery("select ?s count(?p) as ?num where { ?s ?p ?o. FILTER (!isBlank(?s)) }group by ?s order by desc(?num) ");

            foreach (SparqlResult sparqlResult in sparqlResultSetListaEntidadesNotBN.Results)
            {
                entities.Add(sparqlResult["s"].ToString());
            }
            List <DiscoverRdfViewModel> model = new List <DiscoverRdfViewModel>();

            //Guardamos todas las entidades
            List <String>   allEntities = new List <string>();
            SparqlResultSet sparqlResultSetEntidades = (SparqlResultSet)dataGraph.ExecuteQuery("select distinct ?s where { ?s ?p ?o }");

            foreach (SparqlResult sparqlResult in sparqlResultSetEntidades.Results)
            {
                allEntities.Add(sparqlResult["s"].ToString());
            }
            SparqlResultSet sparqlResultSet = (SparqlResultSet)dataGraph.ExecuteQuery("select ?s ?p ?o where { ?s ?p ?o }");
            Dictionary <string, List <SparqlResult> > entitySparqlResult = new Dictionary <string, List <SparqlResult> >();

            foreach (SparqlResult sparqlResult in sparqlResultSet.Results)
            {
                if (!entitySparqlResult.ContainsKey(sparqlResult["s"].ToString()))
                {
                    entitySparqlResult.Add(sparqlResult["s"].ToString(), new List <SparqlResult>());
                }
                entitySparqlResult[sparqlResult["s"].ToString()].Add(sparqlResult);
            }

            foreach (var idEntity in entities)
            {
                DiscoverRdfViewModel entidad = createDiscoverRdfViewModel(idEntity, entitySparqlResult, new List <string>(), allEntities, communNamePropierties, discoveryGraph.LoadedEntities);
                model.Add(entidad);
            }
            return(View(model));
        }
Beispiel #2
0
        /// <summary>
        /// Crea un modelo DiscoverRdfViewModel
        /// </summary>
        /// <param name="idEntity">Identificador de la entidad de la que crear el modelo</param>
        /// <param name="entitySparqlResult">SparqlResult con todos los triples agrupados por el sujeto</param>
        /// <param name="parents">Lista de ancestros de la entidad</param>
        /// <param name="allEntities">Listado con todos los identificadores del RDF</param>
        /// <param name="communNameProperties">Diccionario con los nombres de las propiedades</param>
        /// <param name="loadedEntities">Lista de entidades cargadas en el triple store</param>
        /// <returns></returns>
        public DiscoverRdfViewModel createDiscoverRdfViewModel(string idEntity, Dictionary <string, List <SparqlResult> > entitySparqlResult, List <string> parents, List <string> allEntities, Dictionary <string, string> communNameProperties, List <string> loadedEntities)
        {
            //Obtenemos todos los triples de la entidad
            DiscoverRdfViewModel entidad = new DiscoverRdfViewModel();

            entidad.stringPropertiesEntity   = new Dictionary <string, List <string> >();
            entidad.entitiesPropertiesEntity = new Dictionary <string, List <DiscoverRdfViewModel> >();
            entidad.uriEntity             = idEntity;
            entidad.urisRdf               = allEntities;
            entidad.communNamePropierties = communNameProperties;
            entidad.LoadedEntities        = loadedEntities;
            if (entidad.LoadedEntities == null)
            {
                entidad.LoadedEntities = new List <string>();
            }
            if (entitySparqlResult.ContainsKey(idEntity))
            {
                foreach (SparqlResult sparqlResult in entitySparqlResult[idEntity])
                {
                    if (sparqlResult["o"] is BlankNode && !parents.Contains(sparqlResult["o"].ToString()))
                    {
                        if (!entidad.entitiesPropertiesEntity.ContainsKey(sparqlResult["p"].ToString()))
                        {
                            //Añadimos la propiedad a 'entitiesPropertiesEntity'
                            entidad.entitiesPropertiesEntity.Add(sparqlResult["p"].ToString(), new List <DiscoverRdfViewModel>());
                        }
                        parents.Add(idEntity);
                        entidad.entitiesPropertiesEntity[sparqlResult["p"].ToString()].Add(createDiscoverRdfViewModel(sparqlResult["o"].ToString(), entitySparqlResult, parents, allEntities, communNameProperties, loadedEntities));
                    }
                    else
                    {
                        if (!entidad.stringPropertiesEntity.ContainsKey(sparqlResult["p"].ToString()))
                        {
                            //Añadimos la propiedad a 'stringPropertiesEntity'
                            entidad.stringPropertiesEntity.Add(sparqlResult["p"].ToString(), new List <string>());
                        }
                        if (sparqlResult["o"] is LiteralNode)
                        {
                            entidad.stringPropertiesEntity[sparqlResult["p"].ToString()].Add(((LiteralNode)(sparqlResult["o"])).Value);
                        }
                        else
                        {
                            entidad.stringPropertiesEntity[sparqlResult["p"].ToString()].Add(sparqlResult["o"].ToString());
                        }
                    }
                }
            }
            return(entidad);
        }