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.

SHACL sh:rule con sh:condition en SPARQL en TopBraid Composer SHACL sh:rule con sh:condition en SPARQL en TopBraid Composer

La ontología de ejemplo tiene dos clases (“:MyClass” y “:Value”) y dos propiedades (“:MyObjProp” y “:MyDataProp”).

:MyClass
a owl:Class ;
a sh:NodeShape ;
rdfs:subClassOf owl:Thing ;
.
:MyDataProp
a owl:DatatypeProperty ;
rdfs:domain :MyClass ;
rdfs:range xsd:string ;
.
:MyObjProp
a owl:ObjectProperty ;
rdfs:domain :MyClass ;
rdfs:range :Value ;
.
:Value
a owl:Class ;
rdfs:subClassOf owl:Thing ;
.

Se añadieron algunas instancias.

:MyClass_1
a :MyClass ;
:MyDataProp :Value_1 ;
:MyObjProp :Value_1 ;
.
:MyClass_2
a :MyClass ;
:MyObjProp :Value_2 ;
.
:Value_1
a :Value ;
.
:Value_2
a :Value ;
.

Se creó un NodeShape “:NodeShapeRule” con una regla “sh:rule” (“:SPARQLRule_1”). Esta regla crea nuevas tripletas. Con “sh:condition”, la regla debería estar restringida a un subconjunto de objetivos.

:NodeShapeRule
a sh:NodeShape ;
sh:rule :SPARQLRule_1 ;
sh:targetClass :MyClass ;
.
:SPARQLRule_1
a sh:SPARQLRule ;
sh:condition :NodeShapeConditionSPARQL ;
sh:construct “””
PREFIX :
CONSTRUCT
{
$this :MyDataProp “New input” .
}
WHERE
{
$this :MyObjProp ?p .
}
“”” ;
.

Para la restricción se definieron dos NodeShapes equivalentes. La primera restricción funciona con “sh:property”, la otra utiliza “sh:sparql”.

:NodeShapeConditionProperty
a sh:NodeShape ;
sh:property [
sh:path :MyObjProp ;
sh:description “NodeShapeConditionProperty” ;
sh:hasValue :Value_1 ;
] ;
sh:targetClass :MyClass ;
.
:NodeShapeConditionSPARQL
a sh:NodeShape ;
sh:sparql [
sh:message “NodeShapeConditionSPARQL” ;
sh:prefixes ;
sh:select “””
PREFIX :
SELECT $this
WHERE
{
$this :MyObjProp ?prop .
}
“”” ;
] ;
sh:targetClass :MyClass ;
.

Mientras hacía inferencias con Topbraid Composer, obtuve resultados diferentes para ambas soluciones. Solo la solución con “sh:property” proporciona la respuesta esperada. ¿Podría alguien explicarme este comportamiento?

:MyClass_1 :MyDataProp “New input”

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    La razón por la cual la solución con sh:property proporciona la respuesta esperada mientras que la solución con sh:sparql no lo hace, es porque definen restricciones diferentes.

    La restricción sh:property restringe los valores que se pueden asignar a la propiedad :MyObjProp en instancias de :MyClass únicamente a :Value_1. Por lo tanto, cuando la regla :SPARQLRule_1 construye un nuevo triple con :MyDataProp y el valor "Nuevo input", solo se aplica a la instancia :MyClass_1, que tiene :Value_1 como su valor para :MyObjProp.

    Por otro lado, la restricción sh:sparql solo selecciona instancias de :MyClass que tienen al menos un valor para :MyObjProp. Por lo tanto, la regla se aplica tanto a :MyClass_1 como a :MyClass_2. Esto significa que se construye el nuevo triple con :MyDataProp y el valor "Nuevo input" para ambas instancias.

    En resumen, la diferencia en el comportamiento se debe al hecho de que la restricción sh:property restringe los posibles valores de la propiedad, mientras que la restricción sh:sparql solo filtra las instancias en función de una condición.

Comments are closed.