- From: James Hudson <jameshudson3010@gmail.com>
- Date: Fri, 22 May 2020 08:57:21 -0400
- To: Holger Knublauch <holger@topquadrant.com>
- Cc: Håvard M. Ottestad <hmottestad@gmail.com>, Public Shacl W3C <public-shacl@w3.org>
- Message-ID: <CAEUVO9FzV_HWMAacXjzdWwXnYE8PKTRBixxB+Y7LNbi7qFkAtg@mail.gmail.com>
Hello Holger,
I'll add my opinion that sh:AllSubjects, etc. would be useful additions.
I am currently using
"sh:select" = "SELECT ?this WHERE { ?this ?p ?o . }"
which is equivalent to an sh:AllSubjects.
I am using it to help me validate schema's, making sure that all subjects
have a rdfs:comment, rdfs:label, etc.
While sh:AllSubjects is not necessary because it can be trivially expressed
with a SPARQL query, it would be useful because optimized implementations
would be easier to provide when sh:AllSubjects is needed.
Regards,
James
On Fri, May 22, 2020 at 1:05 AM Holger Knublauch <holger@topquadrant.com>
wrote:
>
> On 21/05/2020 20:02, "Håvard M. Ottestad" wrote:
>
> Hi Holger and everyone else :)
>
> The targets for the TargetShape would be all subjects and all objects in
> the data graph.
>
> In earlier versions of SHACL we had something like sh:target
> sh:AllSubjects and sh:target sh:AllObjects. I have forgotten the details
> but they were taken out soon afterwards and I moved them into the dash: (
> datashapes.org) namespace while sh:target became a SHACL-AF term.
>
> So I guess we could reintroduce something like those and also
> sh:filterShape and would possibly have the most flexible solution? So
>
> target nodes = targets of sh:targetXY filtered by sh:filterShape
>
> A clever algorithm then has a declarative model to work with and may
> quickly detect patterns like
>
> ex:EveryoneWhoKnowsThreePeopleMustKnowSteve
> a sh:NodeShape ;
> sh:target sh:AllSubject, sh:AllObjects ;
> sh:filterShape [
> sh:property [
> sh:path foaf:knows;
> sh:minCount 3 ;
> ]
> ] ;
> sh:property [
> sh:path foaf:knows;
> sh:hasValue ex:Steve;
> ] .
>
> Separating sh:AllSubjects and sh:AllObjects separately would offer more
> flexibility too. (The case above can only be satisfied by subjects, so why
> even bother about the objects?)
>
> Holger
>
>
>
> The TargetShape would produce all subjects or objects in the data graph
> and considered valid according to the interpretation of the shape of the
> TargetShape.
>
> As a simple rule, a Shape with a clone of itself as the TargetShape would
> end up validating only targets that are known to be valid and would
> consequently return no violations.
>
> Håvard
>
> On 21 May 2020, at 04:19, Holger Knublauch <holger@topquadrant.com>
> <holger@topquadrant.com> wrote:
>
>
>
>
> On 20/05/2020 22:23, Håvard Ottestad wrote:
>
> Hi,
>
> For the RDF4J SHACL implementation we would be able to much better
> optimise for something like filters than we ever could for SPARQL targets.
> Currently our benchmarks show that our custom targeting approach is
> considerably faster that SPARQL targets, milliseconds vs. seconds. This
> wouldn’t necessarily apply to other implementations though.
>
> My idea about using filters as SHACL advanced targets would look something
> like this:
>
> Shape explanation: Anyone who knows three or more people must also know
> Steve.
>
> ex:EveryoneWhoKnowsThreePeopleMustKnowSteve
> a sh:Shape ;
> sh:target [
> a sh:TargetShape ;
> sh:property [
> sh:path foaf:knows;
> sh:minCount 3 ;
> ]
> ] ;
> sh:property [
> sh:path foaf:knows;
> sh:hasValue ex:Steve;
> ] .
>
>
> Which would essentially have the same results as:
>
> ex:EveryoneWhoKnowsThreePeopleMustKnowSteve
> a sh:Shape ;
> sh:targetSubjectsOf foaf:knows ;
> sh:or (
> [
> sh:path foaf:knows;
> sh:minCount 3;
> sh:hasValue ex:Steve;
> ]
> [
> sh:path foaf:knows;
> sh:maxCount 2;
> ]
> ) .
>
>
> Anyone think that this is a good (or maybe a particularly bad) idea?
>
> In general I agree that richer targets are needed. While there might not
> be an official WG to produce such a thing, we as implementers could
> establish a de-facto standard. I had designed sh:target to serve as an
> extension point here, allowing custom systems to plug in their own
> extensions. The use a single property (sh:target) at least indicates to a
> processor that *some* target exists, so that it can at least print a
> warning if it doesn't know what to do with it.
>
> Down the road, if we agree on something as fundamental as something
> similar to filterShapes then we could introduce a new keyword such as
> sh:targetNodesConforming which would take a shape declaration as its value.
>
> My specific question (and I may be blind right now) is: what would be the
> target nodes of the TargetShape in your example? Formally it would need to
> be the set of all nodes in the universe, which doesn't even exist. Without
> target nodes, most constraints cannot be interpreted because they are
> formulated with a given focus node in mind.
>
> That's why reopening sh:filterShape might be a better approach. It has the
> advantage that filters can be added to any shape including shapes imported
> from a 3rd party, to narrow its targets down for a specific application. I
> don't remember exactly why we dropped that. Dimitris is correct that it was
> due to lack of time - there was quite some panic at the end of the WG. The
> reason was probably the complexity due to recursion. The minutes SHOULD
> have a resolution which may explain more.
>
> Holger
>
>
>
> Håvard
>
>
>
> On 20 May 2020, at 12:48, Varytimou, Natasa (Refinitiv) <
> Natasa.Varytimou@refinitiv.com> wrote:
>
> Hi all
>
> We also had a big performance issue with SHACL Sparql Targets which are
> incredible useful.
> Is there anything that can be done to improve performance?
> And the same question for Filters ( which I support that are useful to be
> included), will we have performance issues there as well?
>
>
> -----Original Message-----
> From: Håvard Ottestad <hmottestad@gmail.com>
> Sent: 20 May 2020 11:25
> To: Andy Seaborne <andy@apache.org>
> Cc: public-shacl@w3.org
> Subject: Re: SHACL target extension
>
> Hi Andy and Dimitris
>
> Filters look like particularly useful constructs. They also look very
> powerful, which is both good and bad.
>
> It’s quite close to what I want. I would want to have the filter run on
> all nodes in the data graph, essentially a sh:targetAllSubjects target. I
> think I saw something along those lines already, but I couldn’t find it now
> while writing this email.
>
> I can see that a natural extension would be to allow filters to be used as
> targets themselves, maybe through the SHACL Advanced sh:target property.
>
> Håvard
>
> On 20 May 2020, at 10:29, Andy Seaborne <andy@apache.org> wrote:
>
> Nice!
>
> That would be a useful addition to SHACL both on targets and on property
> shapes. And for rules.
>
> Were there any other features that got dropped that the community might be
> interested in?
>
> Andy
>
>
> On 19/05/2020 22:29, Dimitris Kontokostas wrote:
>
> Hi Håvard,
> I think what you are after is something like the filter shape feature
> (https://nam12.safelinks.protection.outlook.com/?url=https%3A%2F%2Fww
> w.w3.org%2FTR%2F2016%2FWD-shacl-201608H%25C3%25A5vard14%2F%23filterSh
> ape&data=02%7C01%7CNatasa.Varytimou%40refinitiv.com%7Ce6dc14407b7
> 34d54b27908d7fca8327d%7C71ad2f6261e244fc9e8586c2827f6de9%7C0%7C0%7C63
> 7255671647244813&sdata=9fkMStQVgoP4f8k3OKo4gaq4uampFgxMYbXuPjSH4q
> A%3D&reserved=0
> <https://nam12.safelinks.protection.outlook.com/?url=https%3A%2F%2Fww
> w.w3.org%2FTR%2F2016%2FWD-shacl-20160814%2F%23filterShape&data=02
> %7C01%7CNatasa.Varytimou%40refinitiv.com%7Ce6dc14407b734d54b27908d7fc
> a8327d%7C71ad2f6261e244fc9e8586c2827f6de9%7C0%7C0%7C63725567164724481
> 3&sdata=dVeAUe7hfKbnliGxy5KVlNTE5Zs%2BE3f81z2GX%2BYFQfc%3D&re
> served=0>) This is something that existed in the first versions of
> SHACL but was dropped due to time restrictions near the end of the WG
> Best, Dimitris
>
> On Tue, May 19, 2020 at 11:05 PM Håvard Ottestad <hmottestad@gmail.com <
> mailto:hmottestad@gmail.com <hmottestad@gmail.com>>> wrote:
>
> Hi James and Irene,
> Thanks for the replies.
> This is more a question of the standardisation aspect. Did anyone
> discus including more elaborate target building blocks? There is
> already sh:targetClass for rdf:type, but did anyone consider other
> class constructs like skos:inScheme?
> We already have two functional solutions within the current syntax:
> - use sh:targetNode with sh:inverseProperty
> - use SPARQL targets
> The issue with these solutions are:
> 1. Using sh:targetNode and sh:inverseProperty are much harder to
> read than something like the compound target that we we
> considering introducing.
> 2. SPARQL targets take took long to evaluate for transactional
> workloads.
> Håvard
>
> On 19 May 2020, at 20:37, James Hudson <jameshudson3010@gmail.com
> <mailto:jameshudson3010@gmail.com <jameshudson3010@gmail.com>>> wrote:
> You may want to check out:
>
> https://nam12.safelinks.protection.outlook.com/?url=https%3A%2F%2Fstackoverflow.com%2Fquestions%2F61323857%2Fwhat-is-the-difference-between-these-shape-graphs-which-use-shor&data=02%7C01%7CNatasa.Varytimou%40refinitiv.com%7Ce6dc14407b734d54b27908d7fca8327d%7C71ad2f6261e244fc9e8586c2827f6de9%7C0%7C0%7C637255671647244813&sdata=kjaTfSE9gI524M8kypS5LzuVtajKVemL7vMOWxlHfEw%3D&reserved=0
> and
>
> https://nam12.safelinks.protection.outlook.com/?url=https%3A%2F%2Fstackoverflow.com%2Fquestions%2F61190422%2Fvalidating-that-every-subject-has-a-type-of-class&data=02%7C01%7CNatasa.Varytimou%40refinitiv.com%7Ce6dc14407b734d54b27908d7fca8327d%7C71ad2f6261e244fc9e8586c2827f6de9%7C0%7C0%7C637255671647244813&sdata=skAZd%2BVgGSCgD%2B5wEuPAuRV7XFUEcOlBJ78Ol0oWcGs%3D&reserved=0
> and other SHACL questions and answers I have on SO. They may help
> you out.
> As Irene already pointed out, SPARQL-based targets will solve
> your problem.
> On Tue, May 19, 2020 at 11:39 AM Håvard Ottestad
> <hmottestad@gmail.com <mailto:hmottestad@gmail.com <hmottestad@gmail.com>>>
> wrote:
> Hi,
> I’m the developer for the RDF4J SHACL implementation and we
> are looking into extending the targeting options in SHACL and
> are wondering if this is something that was discussed during
> the development of the standard or if anyone else has run
> into similar requirements.
> Essentially extending the current list of sh:targetNode,
> sh:targetClass, sh:targetSubjectsOf and sh:targetObjectsOf.
> Our use case can be summed up as.
> ex:Håvard ex:nationality ex:Norway;
> ex:norwegianID “12345612345”.
> Where we would essentially like to be able to add a shape
> that says that all Norwegian citizens should have a Norwegian
> ID number.
> We have been testing out the concept of a compound target.
> For our current tests we have used our own namespace like this:
> @prefix rdf4j-sh: <
> https://nam12.safelinks.protection.outlook.com/?url=http%3A%2F%2Frdf4j.org%2Fschema%2Frdf4j-shacl%23&data=02%7C01%7CNatasa.Varytimou%40refinitiv.com%7Ce6dc14407b734d54b27908d7fca8327d%7C71ad2f6261e244fc9e8586c2827f6de9%7C0%7C0%7C637255671647244813&sdata=ZmKYvssWhaW30oRKEkRqDpK6%2FizYr8tDe8xaPfdqvPc%3D&reserved=0>
> .
> ex:PersonShape
> a sh:NodeShape ;
> rdf4j-sh:compoundTarget [
> rdf4j-sh:targetPredicate ex:nationality;
> rdf4j-sh:targetObject ex:Norway
> ];
> sh:property [
> sh:path ex:norwegianID ;
> sh:minCount 1 ;
> sh:maxCount 1 ;
> ] .
> We have also been thinking about allowing
> rdf4j-sh:targetObject to be have multiple values.
> I also realise that it’s possible to use inversePath to solve
> this same problem, but I feel it becomes hard to read and
> grasp the intent.
> ex:PersonShape
> a sh:NodeShape ;
> sh:targetNode ex:Norway;
> sh:property [
> sh:path [sh:inversePath ex:nationality ];
> sh:property [
> sh:path ex:norwegianID ;
> sh:minCount 1 ;
> sh:maxCount 1 ;
> ]
> ] .
> Concurrently we have been testing the SHACL Advanced SPARQL
> targets. These allow us to do the same thing, but we are
> unable to achieve the same level of performance. In one of
> our benchmarks we see that SPARQL targets is 450x slower per
> transaction than compound targets. This is mostly due to our
> SHACL implementation being able to analyse the transactional
> changes and run a very minimal validation for compound
> targets. We do think that SPARQL targets could be
> considerably faster, but the design choices that allow for
> minimal transactional validation are currently also limiting
> our options for speeding up SPARQL targets.
> Does anyone know if this approach to a more flexible
> targeting has been considered as part of the spec? Or if
> someone has run into similar needs and is maybe considering
> implementing something similar.
> Cheers,
> Håvard
>
> --
> Kontokostas Dimitris
>
>
>
>
>
Received on Friday, 22 May 2020 12:57:47 UTC