Figura 1. Jerarquía de clases en DBpedia. Pincha en la imagen para ver el grafo completo.

A menudo me preguntan cómo se puede obtener la jerarquía de clases de DBpedia. Algo similar a lo que hay en http://mappings.dbpedia.org/server/ontology/classes/.

Por lo pronto, en esDBpedia NO está la ontología DBpedia. Muchas veces la incluyo para comodidad de los usuarios, pero no deberíamos contar con ella. Su sitio es DBpedia.

A continuación muestro la manera más sencilla que conozco: reaprovechando el ejemplo de árboles (hechos con la librería Javascript D3) de http://bl.ocks.org/d3noob/8329404. Este es el resultado: http://es.dbpedia.org/classtree.html

Todo comienza con esta SPARQL query sobre DBpedia (NO sobre esDBpedia), que muestra para cada clase su clase padre:

select * where{
  ?s a owl:Class 
  FILTER(regex(STR(?s), "http://dbpedia.org/ontology/", "i")) .
  optional {?s rdfs:subClassOf	?subOf }
}order by asc(?s)

Si ejecutas esta query, verás que, en la columna de subOf, hay varios http://www.w3.org/2002/07/owl#Thing. Estas son las clases de primer nivel.

Para reaprovechar el código javascript mencionado, necesitamos los datos en este formato:

{ "name" : "Abbey", "parent" : "ReligiousBuilding" },
{ "name" : "AcademicJournal", "parent" : "PeriodicalLiterature" },
{ "name" : "AcademicSubject", "parent" : "TopicalConcept" },
{ "name" : "Activity", "parent" : "null" },

Por tanto, tenemos que tratar los resultados de la query para hacer una concatenación (CONCAT) y varias sustituciones (REPLACE). La query queda así:

select (CONCAT ("{ \"name\"",
                " : \"",
                replace(str(?s), "http://dbpedia.org/ontology/", ""),
                "\", \"parent\"",
                " : \"", 
                replace(replace(str(?subOf), "http://www.w3.org/2002/07/owl#Thing", "null"),
                        "http://dbpedia.org/ontology/", ""),
                "\" },")
         as ?line) 
where{
  ?s a owl:Class 
  FILTER(regex(STR(?s), "http://dbpedia.org/ontology/", "i")) .
  optional {?s rdfs:subClassOf	?subOf }
}order by asc(?s)

Si ejecutas esta query obtendrás resultados como estos:

{ "name" : "Abbey", "parent" : "ReligiousBuilding" },
{ "name" : "AcademicJournal", "parent" : "PeriodicalLiterature" },
{ "name" : "AcademicSubject", "parent" : "TopicalConcept" },
{ "name" : "Activity", "parent" : "null" },
{ "name" : "Actor", "parent" : "Artist" },

Ahora ya sólo hay que pegar los datos en el fichero javascript, teniendo cuidado con varios detalles:

1) El ejemplo no permite tener un árbol con varias raíces. Por tanto, hay que sustituir los null por DBpediaClass y crear una única raíz (null) que sea padre de DBpediaClass.

{ "name" : "DBpediaClass", "parent" : "null" },

2) También hay que tener cuidado con algunas clases que tienen varios padres, algunos no en la ontología DBpedia. Estos son algunos ejemplos:

{ "name" : "Band", "parent" : "http://www.ontologydesignpatterns.org/ont/dul/DUL.owl#SocialPerson" },
{ "name" : "Band", "parent" : "Group" },
{ "name" : "Band", "parent" : "http://schema.org/MusicGroup" },


{ "name" : "FilmFestival", "parent" : "SocietalEvent" },
{ "name" : "FilmFestival", "parent" : "http://schema.org/Festival" },

{ "name" : "Group", "parent" : "Organisation" },
{ "name" : "Group", "parent" : "http://schema.org/Organization" },

{ "name" : "Instrument", "parent" : "Device" },
{ "name" : "Instrument", "parent" : "http://schema.org/Product" },

{ "name" : "MusicalArtist", "parent" : 

"http://www.ontologydesignpatterns.org/ont/dul/DUL.owl#NaturalPerson" },
{ "name" : "MusicalArtist", "parent" : "Artist" },
{ "name" : "MusicalArtist", "parent" : "http://schema.org/MusicGroup" },

{ "name" : "Weapon", "parent" : "Device" },
{ "name" : "Weapon", "parent" : "http://schema.org/Product" },

Para estos casos, he eliminado a mano los "padres NO DBpedia".

3) Tocar el tamaño del canvas para hacerlo más grande y que quepa todo el grafo.

¡Y ya está!. El resultado lo tienes en http://es.dbpedia.org/classtree.html.

Observa que puedes hacer búsquedas en la página.

-Mariano Rico

Add new attachment

Only authorized users are allowed to upload new attachments.

List of attachments

Kind Attachment Name Size Version Date Modified Author Change note
png
DBpediaClasses.banner.png 85.8 kB 1 25-May-2016 18:05 Mariano Rico
png
DBpediaClasses.png 129.9 kB 1 25-May-2016 18:02 Mariano Rico
« This page (revision-8) was last changed on 25-May-2016 19:46 by Mariano Rico  
G’day (anonymous guest) My Prefs

Página principal
Main page




OEG
UPM
UAM
RTE Linked Data


Project support: "Red Temática Española de Linked Data" project (TIN2010-10811-E) and "Go Lite" project (TIN2011-24139).


JSPWiki v2.8.4