es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Wikidata obtén todas las propiedades de un elemento con unidades.

Estamos creando una aplicación que utiliza datos de los servicios de Wikidata con consultas Sparql.
La tarea básica es obtener todas las propiedades de un elemento con las unidades y precisión correspondientes.

Hay un gran ejemplo de una consulta aquí, pero carece de datos sobre las unidades y la precisión.
Hemos añadido algunos detalles a este ejemplo, pero las unidades solo están disponibles para la propiedad específica P2102.

Entonces la pregunta es: ¿cómo usar propiedades genéricas (es decir, propiedades genéricas, a diferencia de las específicas p:P2102, ps:P2102 o psv:P2102 en el ejemplo de abajo) en consultas Sparql genéricas como esta?

Aquí tienes un ejemplo de nuestra consulta:

SELECT ?wd ?wdLabel ?wdDescription ?ps_ ?psLabel ?psDescription ?wdpq ?wdpqLabel ?wdpqDescription ?pq_ ?pqLabel ?pqDescription ?bpUnit ?bpUnitLabel {
  VALUES (?itm) {(wd:Q407225)}

  ?itm ?p ?statement .
  ?statement ?ps ?ps_ .

  ?wd wikibase:claim ?p.
  ?wd wikibase:statementProperty ?ps.

  OPTIONAL {
    ?statement ?pq ?pq_ .
    ?wdpq wikibase:qualifier ?pq .

    ?itm p:P2102 [
      ps:P2102 ?bp ;
      psv:P2102/wikibase:quantityUnit  ?bpUnit
    ].
  }

  SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
} 
ORDER BY ?wd ?statement ?ps_
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para utilizar propiedades no específicas en consultas genéricas de Sparql, puedes usar rutas de propiedad para navegar por el grafo y obtener la información deseada. Por ejemplo, para obtener la unidad y la precisión de una propiedad, puedes utilizar las siguientes rutas de propiedad:

    • ?statement p ?p . ?p ps:P1630 ?unit para obtener la unidad de la propiedad.
    • ?statement p ?p . ?p pq:P1630 ?precision para obtener la precisión de la propiedad.

    Incorporar estas rutas de propiedad en la consulta original se vería algo así:

    SELECT ?wd ?wdLabel ?wdDescription ?ps_ ?ps_Label ?ps_Description ?wdpq ?wdpqLabel ?wdpqDescription ?unit ?precision {
      VALUES (?itm) {(wd:Q407225)}
    
      ?itm ?p ?statement .
      ?statement ?ps ?ps_ .
    
      ?wd wikibase:claim ?p.
      ?wd wikibase:statementProperty ?ps.
    
      OPTIONAL {
        ?statement p ?p .
        ?p ps:P1630 ?unit .
        ?p pq:P1630 ?precision .
      }  
    
      SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
    } 
    ORDER BY ?wd ?statement ?ps_
    

    Ten en cuenta que esta consulta asume que la propiedad de Wikidata que estás consultando tiene información de unidad y precisión asociada. Si este no es el caso, la cláusula OPTIONAL no devolverá ningún resultado.

Comments are closed.