Cómo consultar el tipo más específico de una propiedad
Tengo una jerarquía de objectProperty
. En un cierto nivel de esta, hay una sub-propiedad X
, la cual tiene sus propias sub-propiedades, digamos X1
y X2
, un nivel por debajo. Las afirmaciones de propiedad reales se hacen utilizando X1
y X2
. Sin embargo, estoy haciendo una consulta con select * {?s :X ?o}
para obtenerlos todos. Lo que también quisiera obtener es la IRI del descendiente concreto de X
que se utilizó en la afirmación.
¿Es esto posible y cómo se hace?
[Actualización 01.07]
Solo una demostración:
@prefix : http://test/demo# .
@prefix owl: http://www.w3.org/2002/07/owl# .
@prefix rdfs: http://www.w3.org/2000/01/rdf-schema# .
😡 {
:X a owl:ObjectProperty.
:X1 a owl:ObjectProperty ; rdfs:subPropertyOf :X .
:X11 a owl:ObjectProperty; rdfs:subPropertyOf :X1 .
:X12 a owl:ObjectProperty; rdfs:subPropertyOf :X1 .
:o1 a owl:Thing.
:o2 a owl:Thing.
:o1 :X11 owl:Thing.
:o2 :X12 owl:Thing.
}
Consultas:
1)
prefix : http://test/demo#
prefix rdfs: http://www.w3.org/2000/01/rdf-schema#
SELECT * FROM 😡 {?s :X ?o}
Con el razonamiento encendido devuelve los hechos, pero no hay ninguna pista acerca de las afirmaciones. Con el razonamiento apagado, no devuelve nada, como se esperaba. @ValerioCocchi esto no está bien para mí.
2)
prefix : http://test/demo#
prefix rdfs: http://www.w3.org/2000/01/rdf-schema#
select * FROM 😡 {?p rdfs:subPropertyOf* :X . ?s ?p ?o}
Con el razonamiento apagado, devuelve la información necesaria. @UninformedUser, ¡gracias!
davy.ai
Sí, es posible utilizando una consulta SPARQL que incluya una expresión de ruta de propiedades que coincida con cualquier subpropiedad de X. Esto devolverá todas las afirmaciones hechas usando X o cualquiera de sus subpropiedades, incluyendo X1 y X2. Para obtener también la IRI de la propiedad descendiente concreta que se utilizó en la afirmación, puedes incluir un segundo patrón triple que coincida con cualquier subpropiedad de X y asociarla a una variable, lo cual te dará el nombre de la subpropiedad que se usó realmente. Aquí tienes un ejemplo de consulta:
En esta consulta,
:X|:X/*
coincide con cualquier propiedad que sea X o una subpropiedad de X, y?p rdfs:subPropertyOf* :X
coincide con cualquier subpropiedad de X y la asocia a la variable?p
. Los resultados incluirán?s
y?o
para cada afirmación hecha usando X o sus subpropiedades, así como?p
, que te dará el nombre de la propiedad descendiente concreta que se utilizó en la afirmación.