- From: Holger Knublauch <holger@topquadrant.com>
- Date: Tue, 26 Nov 2024 09:54:57 +0100
- To: Edmond Chuc <edmond@kurrawong.ai>
- Cc: "public-shacl@w3.org" <public-shacl@w3.org>
- Message-Id: <C0B9289E-48EA-4BF6-902C-DC1CB1ABB095@topquadrant.com>
Hi Edmond, yes we have seen the same requirement. In TopBraid we are supporting this constraint component tosh:ShapeInGraphConstraintComponent a sh:ConstraintComponent ; dash:propertySuggestionGenerator tosh:DeleteTripleSuggestionGenerator ; rdfs:comment "A constraint component that can be used to verify that the value nodes have a given shape, where the shape validation is executed in a given graph. This can, for example, be used to verify that a given value is declared as an instance of a given class in some specified (not imported) graph." ; rdfs:label "Shape in graph constraint component" ; sh:labelTemplate "Values must have shape {$shapeInGraph} defined in graph {$graph}" ; sh:message "Value does not have shape {$shapeInGraph} defined in graph {$graph}" ; sh:parameter [ sh:path tosh:graph ; sh:nodeKind sh:IRI ; ] ; sh:parameter [ sh:path tosh:shapeInGraph ; sh:nodeKind sh:BlankNodeOrIRI ; ] ; sh:validator [ a sh:SPARQLAskValidator ; sh:ask """ASK { GRAPH $graph { FILTER tosh:hasShape($value, $shapeInGraph) } }""" ; sh:prefixes <http://topbraid.org/tosh> ; ] ; . and then have a custom dash:editor that selects available values using SELECT DISTINCT ?remoteValue ?remoteLabel WHERE { $focusNode a ?type . ?type rdfs:subClassOf* ?class . ?nodeShape sh:targetClass? ?class . ?nodeShape sh:property ?ps . ?ps sh:path $predicate . ?ps tosh:graph ?graph . ?ps tosh:shapeInGraph/sh:class ?remoteClass . GRAPH ?graph { ?remoteType rdfs:subClassOf* ?remoteClass . ?remoteValue a ?remoteType . BIND (ui:label(?remoteValue) AS ?remoteLabel) . } } ORDER BY ?remoteLabel This is slightly more general than just class-in-graph, but I think a pure class-in-graph constraint for 1.2 could make sense, maybe even as second parameter to sh:ClassConstraintComponent. If you haven't done so, why don't you record the problem statement and suggested solution at https://github.com/w3c/shacl/issues Holger > On 26 Nov 2024, at 6:22 AM, Edmond Chuc <edmond@kurrawong.ai> wrote: > > Hi all, > > I'm wondering whether there's been any new thoughts or development to this original email <https://lists.w3.org/Archives/Public/public-shacl/2019Jul/0003.html> around extending SHACL to work with RDF datasets. > > My use case is to acquire values that satisfy both the sh:class and sh:node definitions from a specific named graph and use these values in a SHACL UI autocomplete widget. I'm using shx:targetGraph from Extending SHACL to RDF Datasets <https://afs.github.io/shacl-datasets.html>. Please see the example property shape below. > > Currently, SHACL operates on a single data graph. Without RDF dataset support, implementing a general SHACL UI tool capable of editing data across data graphs becomes challenging. > > Would extending SHACL to support RDF datasets be a candidate for the next SHACL version? > > Alternatively, is there another technique or approach I could consider? > Looking forward to any thoughts or suggestions! > > Cheers, > > Edmond > > :Dataset-keywords a sh:PropertyShape ; > sh:name "Search Words" ; > sh:path sdo:keywords ; > sh:class skos:Concept ; > shx:targetGraph <urn:graph:vocabs> ; > sh:node [ > sh:property [ > sh:path skos:inScheme ; > sh:hasValue <https://linked.data.gov.au/def/GSWA-vocabulary-themes> ; > ] ; > sh:property [ > sh:path skos:prefLabel ; > dash:propertyRole dash:LabelRole ; > ] ; > ] ; > sh:order 3 ; > sh:group :Dataset-metadata-group ; > . > > Edmond Chuc > Knowledge Graph Senior Developer > KurrawongAI > > > edmond@kurrawong.ai <> > https://kurrawong.ai <https://kurrawong.ai/> > > > > > >
Received on Tuesday, 26 November 2024 08:55:15 UTC