- From: Irene Polikoff <irene@topquadrant.com>
- Date: Mon, 13 Apr 2020 09:31:08 -0400
- To: James Hudson <jameshudson3010@gmail.com>
- Cc: Public Shacl W3C <public-shacl@w3.org>
- Message-Id: <591F0AF4-1F8C-4727-9A31-AB2AA9EC1AF1@topquadrant.com>
Hi James,
I use TopBraid products rather than SHACL playground so I can’t really help with issues/questions related to it.
I do know though that at the moment SHACL playground is not a complete implementation of SHACL, let alone SHACL Advanced Features. Take a look at the Known Issues section on the playground page.
If you want to work with a complete implementation, I recommend you download TopBraid Composer. You do not need a license for the first 30 days and this trial period could be extended by another 30 days.
Irene
Sent from my iPhone
> On Apr 13, 2020, at 9:02 AM, James Hudson <jameshudson3010@gmail.com> wrote:
>
> Hello Irene,
>
> Thank you for helping me to understand how to use SPARQL. I now understand better what Holger was saying in his comment in the SO answer.
>
> I am still missing something about how to make use of this knowledge however.
>
> Using the SHACL Playground, let's say that I have the following Data Graph:
>
> @prefix hr: <http://learningsparql.com/ns/humanResources#> .
> @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
> @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
> @prefix xml: <http://www.w3.org/XML/1998/namespace> .
> @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
>
> hr:Employee a rdfs:Class .
> hr:BadThree rdfs:comment "some comment about missing" .
> hr:BadTwo a hr:BadOne .
> hr:YetAnother a hr:Another .
> hr:YetAnotherName a hr:AnotherName .
> hr:Another a hr:Employee .
> hr:AnotherName a hr:name .
> hr:BadOne a hr:Dangling .
> hr:name a rdf:Property .
>
> and the following Shapes Graph:
>
> @prefix hr: <http://learningsparql.com/ns/humanResources#> .
> @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
> @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
> @prefix xml: <http://www.w3.org/XML/1998/namespace> .
> @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
> @prefix schema: <http://schema.org/> .
> @prefix sh: <http://www.w3.org/ns/shacl#> .
>
> schema:SchemaShape
> a sh:NodeShape ;
> sh:target [
> a sh:SPARQLTarget ;
> sh:prefixes hr: ;
> sh:select """
> SELECT ?this
> WHERE {
> ?this ?p ?o .
> }
> """ ;
> ] ;
>
> sh:property [
> sh:path rdf:type ;
> sh:nodeKind sh:IRI ;
> sh:hasValue rdfs:Class
> ] ;
> .
>
> What I think should happen is the SPARQL based target should select every subject in the Data Graph and then verify that there is a path of rdf:type which has a value of rdfs:Class.
>
> However, the https://shacl.org/playground/ reports no validation errors.
>
> The expected validation errors should include the following subjects:
>
> | <http://learningsparql.com/ns/humanResources#BadOne> |
> | <http://learningsparql.com/ns/humanResources#BadTwo> |
> | <http://learningsparql.com/ns/humanResources#BadThree> |
> | <http://learningsparql.com/ns/humanResources#AnotherName> |
> | <http://learningsparql.com/ns/humanResources#name> |
> | <http://learningsparql.com/ns/humanResources#YetAnotherName> |
>
> What am I missing?
>
> Regards,
> James
>
>
>
>> On Fri, Apr 10, 2020 at 10:51 PM Irene Polikoff <irene@topquadrant.com> wrote:
>> Hi James,
>>
>> You can use SPARQL query to target anything you want - as shown in the example here https://w3c.github.io/shacl/shacl-af/#SPARQLTarget.
>>
>> Strictly speaking, your query would not do it. It will not catch something like this:
>>
>> ex:R1 ex:p ex:R2
>>
>> Where there are no triples with ex:R2 or ex:p as subjects.
>>
>>> On Apr 10, 2020, at 9:43 PM, James Hudson <jameshudson3010@gmail.com> wrote:
>>>
>>> Hello Irene,
>>>
>>> You are correct, it does not. That was an error on my part, I missed that it does not also include all the results returned by
>>>
>>> SELECT DISTINCT ?s
>>> WHERE {
>>> {
>>> ?s ?p ?o .
>>> FILTER NOT EXISTS {
>>> ?s a ?c .
>>> FILTER(?c IN (rdfs:Class, rdf:Property))
>>> }
>>> }
>>> }
>>>
>>> If I understand your comment correction regarding the SHACL Advanced Features, SHACL is capable of performing the validation check?
>>>
>>> I would love to see how that would be written...
>>>
>>> Regards,
>>> James
>>>
>>>
>>>> On Fri, Apr 10, 2020 at 5:08 PM Irene Polikoff <irene@topquadrant.com> wrote:
>>>> How does your query find resources that have no type?
>>>>
>>>> As for ensuring that the type in either a class or a property, you could for example do the following:
>>>>
>>>> ex:Shape1 a sh:NodeShape;
>>>> sh:targetSubjectsOf rdf:type;
>>>> sh:or (
>>>> [
>>>> sh:path rdf:type ;
>>>> sh:class rdfs:Class ;
>>>> ]
>>>> [
>>>> sh:path rdf:type ;
>>>> sh:class rdf:Property ;
>>>> ]
>>>> ) .
>>>>
>>>> Btw, SHACL Advanced Features supports SPARQL-based targets https://w3c.github.io/shacl/shacl-af/.
>>>>
>>>>> On Apr 10, 2020, at 4:21 PM, James Hudson <jameshudson3010@gmail.com> wrote:
>>>>>
>>>>> Hello,
>>>>>
>>>>> I asked a question on SO ( https://stackoverflow.com/questions/60993789/targeting-all-nodes-for-validation ) regarding how to verify that every node in my graph had a rdf:type and that the type was ultimately either a rdfs:Class or rdf:Property. The response I received was that it was impossible with SHACL because:
>>>>>
>>>>> The problem is that none of the four built-in target types is sufficient to reach all subject/objects regardless of predicate.
>>>>>
>>>>> I was just wondering why such a target type does not exist or if there were plans to include such a target type in the future...?
>>>>>
>>>>> I was able to do what I needed to do with SPARQL with the following query:
>>>>>
>>>>> {
>>>>> ?s rdf:type+ ?o .
>>>>> FILTER NOT EXISTS {
>>>>> ?s rdf:type+ ?c .
>>>>> FILTER(?c IN (rdfs:Class, rdf:Property))
>>>>> }
>>>>> }
>>>>>
>>>>> but, I would have preferred to use SHACL.
>>>>>
>>>>> Regards,
>>>>> James
>>>>>
>>>>
>>
Received on Monday, 13 April 2020 13:31:24 UTC