Ayuda:Consultas semánticas
Las consultas semánticas son una de las funciones más flexibles de Semantic MediaWiki y de NuestraCiudad.info.
Estas consultas se realizan con un markup (código) especial, que es simple de comprender una vez que hemos entendido las bases del wiki semántico.
La estructura del wiki semántico
Los que no lo hayan hecho aún les recomendamos leer la página Ayuda sobre los wikis semánticos. En este se describe la estructura general del wiki. Acá la resumimos en pocas palabras, tomando el ejemplo de la localidad de Villa Allende.
Los elementos del wiki semántico son:
- Artículos - Son los "sujetos" de cada afirmación que se encuentra en el wiki (en nuestro caso es el artículo Villa Allende, el cual describe la localidad de Villa Allende).
- Categorías (clases) - Son las "clases de cosas" o "categorías de cosas" en las que podemos agrupar los artículos (en nuestro caso Villa Allende entra en la categoría Municipio). Las categorías están organizadas como una taxonomía jerárquica. Así, los municipios son a su vez un tipo de localidad.
- Atributos o propiedades: Son los "verbos" de cada afirmación en el wiki y relacionan las entidades descritas en los artículos con un valor determinado. Por ejemplo, en el caso de Villa Allende tenemos el atributo Tiene población oficial, el cual tiene un valor de 27.164 e indica que la ciudad en el último censo oficial tuvo 27.164 habitantes.
- Los valores de los atributos son los objetos de las afirmaciones. En el ejemplo recién visto 27.164 es el objeto. Existen, a grandes rasgos tres tipos de valores:
- Valores literales: son datos que no tienen un significado particular, como números o nombres. Es decir, no tiene ningún sentido armar una página sobre el dato en el contexto del wikiVer nota. El ejemplo recién mencionado de 27.164 es un valor de este tipo.
- Objetos: son datos que sí tienen un sentido definido. Por ejemplo, Villa Allende a través del Tiene intendente actual está relacionado con el valor Héctor Colombo, que a su vez puede ser una página en NuestraCiudad.
- Textos: son textos más largos, como descripciones o caracterizaciones. Este tipo de objetos no son indexados por el buscador semántico. En realidad son un caso especial de los valores literales.
Cómo consultar
Traducir el lenguaje "humano" al "lenguaje de la máquina"
En las consultas semánticas lo más comun es que querramos saber un dato de un grupo de artículos que responden a una serie de criterios.
Por ejemplo podemos preguntar: ¿Cuales son los municipios que tienen entre 20.000 y 30.000 habitantes?
Para armar nuestra consulta dividimos la pregunta en partes para hacerla comprensible por un sistema informático:
- Cuales son los municipios - se puede traducir a que solamente buscamos entidades en la Categoría:Municipio.
- que tienen entre 20.000 y 30.000 habitnates - se puede traducir a que buscamos entidades en las cuales el valor del Atributo:Tiene población oficial se ubique superior a 20.000 e inferior a 30.000.
El código fuente
Para marcar una consulta como tal existe la función #ask:
.
Su formato general es el siguiente:
{{#ask: <Condiciones> | <Parámetros de salida y opciones>}}
.
Condiciones
Las condiciones que buscamos, como ya hemos visto son las siguientes: Buscar entidades en la Categoría "Municipio" cuyo atributo "Tiene población oficial" tenga un valor superior a 20.000 e inferior a 30.000
{{#ask: [[Categoría:Municipio]] [[Tiene población oficial::>20000]] [[Tiene población oficial::<30000]]}}
.
(Como se ve: Si hay varias condiciones respecto al valor del atributo, el atributo lamentablemente tiene que ser mencionado una vez cada condición).
El resultado es el siguiente, aún sin opciones ni parámetros de salida (esta es una consulta "en vivo", podés consultar el código fuente de esta página para comprobarlo):
Allen, Arroyito, Cinco Saltos, Cosquín, Pico Truncado, Pérez, Villa Allende
Parámetros de salida
Ahora vamos a los parámetros de salida. Con este método no solamente podemos ver el nombre de cada entidad que cumple las condiciones de la consulta - el resultado principal - sino también algún otro dato que nos interesa. Por ejemplo, en nuestra consulta sería lógico que nos interese el valor exacto del atributo Tiene población oficial.
Cada atributo que queremos consultar se pone detrás de un signo de interrogación:
|?<Atributo>
La consulta completa, si queremos saber el valor de la población oficial, es:
{{#ask: [[Categoría:Municipio]] [[Tiene población oficial::>20000]] [[Tiene población oficial::<30000]] |?Tiene población oficial }}
Lo que nos da como resultado:
Tiene población oficial | |
---|---|
Allen | 27.443 |
Arroyito | 22.147 |
Cinco Saltos | 24.138 |
Cosquín | 20.104 |
Pico Truncado | 20.889 |
Pérez | 27.439 |
Villa Allende | 27.164 |
¡Oops! Estamos viendo que el programa "corrigió" el formato y ahora vemos una tabla en vez de una lista. Esto es una funcionalidad de Semantic MediaWiki: se adapta para mostrar el formato que consideraron "mejor" sus programadores para cada tipo de consulta. Todas las consultas con más de un valor por entidad son mostrados, por defecto, en formato "tabla".
Ahora, puede ser que pensemos que Tiene población oficial es muy largo como título de la columna. Quisiéramos que en cambio aparezca Habitantes. Esto se logra con un signo de igualdad detrás del atributo y el título deseado:
|?Tiene población oficial = Habitantes
Ahora podemos armar una tabla más linda. Para mostrar como se hace agregamos otro atributo más:
{{#ask: [[Categoría:Municipio]] [[Tiene población oficial::>20000]] [[Tiene población oficial::<30000]] |?Tiene población oficial = Habitantes |?Ubicado en departamento = Departamento }}
nos "tira" lo siguiente:
Como podemos ver cuando agregamos otro atributo más a la consulta, esto no cambia el formato.
Opciones
Ahora vamos a las opciones. En este texto solamente mencionaré las más importantes. Las opciones se ponen en el formato:
|<opción> = <valor>
Existen las siguientes opciones más básicas:
- mainlabel - Define como es mostrado la columna con el resultado principal.
- mainlabel=<Título> pone un título en la columna (en el caso de tablas) que muestra los resultados principales.
- mainlabel=- suprime el resultado principal en cada fila.
- link - Define si los resultados se muestran con enlace a una página o no. Si no se configura esta opción, se añada un enlace siempre y cuando el valor sea un objeto (es decir, el atributo es del tipo Página)
- none - No enlaza nada. Es útil sobre todo si usamos luego una plantilla para procesar el resultado.
- subject - Solo enlaza el resultado principal.
- format - El formato de la salida. Ya hemos visto las listas y las tablas. Podemos forzar también las consultas con varios atributos a que sean listas, ajustando este parámetro. Los formatos más importantes:
- list - Lista común. Los valores de los atributos son mostrados entre paréntesis.
- table - Tabla.
- ol - Lista ordenada con numeración.
- ul - Lista con viñetas.
- template - Entregamos la salida a una plantilla personalizada. Esto es la variante más flexible, pero requiere que sepamos bien el formato de las plantillas de MediaWiki. Ver como ayuda: Ayuda oficial de MediaWiki. Los parámetros son entregados a la plantilla de manera numerada y se acceden con
{{{1}}}, {{{2}}},
etc. - count - Solamente nos muestra la cantidad de entidades que existen.
Un ejemplo con el formato más raro, "count":
Existen {{#ask: [[Categoría:Municipio]] [[Tiene población oficial::>20000]] [[Tiene población oficial::<30000]] |format=count }} ciudades con población entre 20.000 y 30.000 habitantes.
Da como resultado:
Existen 7 ciudades con población entre 20.000 y 30.000 habitantes.
Con este ejemplo también podemos ver que las consultas semánticas se incluyen en los textos tal como lo conocemos de otros elementos del código fuente de MediaWiki.
Ahora usamos todo lo que hemos aprendido hasta ahora, menos las plantillas, que las dejamos para más adelante:
{{#ask: [[Categoría:Municipio]] [[Tiene población oficial::>20000]] [[Tiene población oficial::<30000]] |?Tiene población oficial = Habitantes |?Tiene intendente actual = Intendente |?Ubicado en departamento = Departamento |mainlabel = Municipio |link=none |format=table }}
nos tira una tabla "en bruto", sin ningún enlace, con el título Municipio para los resultados principales:
Municipio | [[:Propiedad:Tiene población oficial|
| Intendente | Departamento | ||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Allen.RN | 27.443 | Departamento General Roca (Río Negro).RN | |||||||||||||||||||||||||||||||||
Arroyito | 22.147 | Mauricio Cravero | Departamento San Justo.CBA | ||||||||||||||||||||||||||||||||
Cinco Saltos.RN | 24.138 | Departamento General Roca.RN | |||||||||||||||||||||||||||||||||
Cosquín.CBA | 20.104 | Rossana Adaglio | Departamento Punilla.CBA | ||||||||||||||||||||||||||||||||
Pico Truncado.SC | 20.889 | Departamento Deseado.SC | |||||||||||||||||||||||||||||||||
Pérez.SF | 27.439 | Pablo Corsalini | Departamento Rosario.SF | ||||||||||||||||||||||||||||||||
Villa Allende.CBA | 27.164 | Héctor Colombo | Departamento Colón.CBA |
¡A probar!
Con estas herramientas ahora podemos armar nuestras propias consultas. No hay límites respecto del formato y diseño.
Tenemos que aclarar acá que hay una forma un poco más compleja de estructurar los datos, los Objetos complejos. Estos existen si solamente tiene sentido un conjunto de datos inseparable, por ejemplo, los horarios y fechas de un evento. Las consultas en este caso son más difíciles pero igual de flexibles. Visitá Extension:Semantic Internal Objects para más información (lamentablemente solo disponible en inglés).
Véase también
Notas
El significado de cada elemento (atributo, valor etc.) difiere en cada contexto. Por tal razón puede haber un valor que en un wiki semántico es un objeto y en otro no. Imaginemosnos, por ejemplo, un wiki matemático que explica las características de los números. En éste wiki el mencionado valor de 27.164 puede ser un objeto que apunta a una página propia. Pero en un wiki de interés general como NuestraCiudad.info no necesitamos saber más cosas sobre este número. Lo mismo podría ocurrir, por ejemplo, si tomamos nuestro atributo Tiene nombre. En un wiki lingüístico y hasta en una "Wikipedia semántica" uno se puede imaginar que pueda haber páginas sobre nombres que nos informen sobre la etimología, el origen del nombre, áreas geográficos dónde se usa, etcétera. El hecho que un atributo tenga valores literales o valores-objeto se define generalmente en la ontología del wiki - que es una especie de "matriz" que define la estructura de cada sistema semántico. En NuestraCiudad,info estas definiciones se encuentran en Ontología.
Por todas estas razones la distinción que hacemos aquí entre literal y objeto no es del todo rígida y puede cambiar según el contexto y la ontología que se trate. En NuestraCiudad.info los números y las cadenas de caracteres que no designan a ningún objeto en la ontología son tratados todos como literales.