Re: compiling ShEx oneOf to SHACL

> On 6 Jun 2017, at 18:46, Eric Prud'hommeaux <eric@w3.org> wrote:
> 
> * Irene Polikoff <irene@topquadrant.com> [2017-06-05 17:09-0400]
>> I think you could do
>> 
>> sh:xone ( 
> 
> Is there some reason to use sh:xone instead of sh:or?
> 
> 
>> [
>> sh:property [ sh:path foaf:name ; sh:minCount 1 ;];
>                                                   ^ sh:maxCount 1
>> sh:property [ sh:path foaf:familyName ; sh:maxCount 0 ; ];
>> sh:property [sh:path foaf:givenName ; sh:maxCount 0 ; ] 
>> ]
>> 
>> [
>> sh:property [sh:path foaf:familyName ;sh:minCount 1 ;] ;
>                                                       ^ sh:maxCount 1
>> sh:property [sh:path ex:givenName ; sh:minCount 1 ;]; 
>                                                     ^ sh:maxCount 1
>> sh:property [ sh:path foaf:name ; sh:maxCount 0 ;]
>> ] 
>> 
>> ) 
> 
> That makes sense. I added a couple max counts to make it like the ShEx
> example.
> 
> 
>> Or you could skip the use of maxCount=0 in the sh:xone and instead create separate “co-occurance” shapes that say that certain properties should be used together - by using subjectsOf target e.g.
>> 
>> ex:MustHaveGivenName sh:targetSubjectsOf foaf:familyName ;
>> sh:property [sh:path foaf:givenName ; sh:minCount 1 ;]
>> 
>> ex:MustHaveFamilyName sh:targetSubjectsOf foaf:givenName ;
>> sh:property [sh:path foaf:familyName ; sh:minCount 1 ;]
> 
> That seems like a bold rule as you lose contextual control. That would mean you couldn't use either foaf:givenName or foaf:familyName individually anywhere else in your schema.
> 
> 
>> It may make sense to create a re-usable co-occurance constant component as part of an extension library, so one didn’t have to create a shape for each predicate in the pair (or more) of predicates that are used together.
> 
> This could provide a useful ShEx library for SHACL, but is it doable in the general case or only where the disjuncts are themselves simple conjunctions of properties?

I remember at some stage you had a ShEx to SPARQL translator? That would be the last resort for any mapping to SHACL.

Holger


> 
> 
>>> On Jun 5, 2017, at 2:48 PM, Eric Prud'hommeaux <eric@w3.org> wrote:
>>> 
>>> * Irene Polikoff <irene@topquadrant.com> [2017-06-05 10:54-0400]
>>>> You can use sh:xone instead of sh:or, then you will not need any NOT statements
>>> 
>>> sh:xone works for disjuncts with a single property in them but if
>>> you have more, as in foaf:givenName and foaf:familyName, it doesn't
>>> prevent complete matches of one disjunct with partial matches of
>>> another.
>>> [[
>>> For each value node v let N be the number of the shapes that are
>>> members of $xone where v conforms to the shape.
>>> ]]
>>> (What's "$xone"?)
>>> 
>>> To illustrate this, <F_extraGiven> and <F_extraFamily> pass the shape
>>> below:
>>> 
>>> <P_name>        foaf:name "Bob Smith".
>>> <P_givenFamily>                         foaf:givenName "Bob" ; foaf:familyName "Smith" .
>>> <F_missing>     <p> <o> .
>>> <F_extraBoth>   foaf:name "Bob Smith" ; foaf:givenName "Bob" ; foaf:familyName "Smith" .
>>> <F_extraGiven>  foaf:name "Bob Smith" ; foaf:givenName "Bob" .
>>> <F_extraFamily> foaf:name "Bob Smith" ;                        foaf:familyName "Smith" .
>>> 
>>> 
>>>> http://w3c.github.io/data-shapes/shacl/#XoneConstraintComponent <http://w3c.github.io/data-shapes/shacl/#XoneConstraintComponent>
>>>> 
>>>> 
>>>>> On Jun 5, 2017, at 7:02 AM, Eric Prud'hommeaux <eric@w3.org> wrote:
>>>>> 
>>>>> I'm considering the feasibility of compiling ShEx to SHACL. Is there a
>>>>> shorter way to compile this ShEx oneOf:
>>>>> 
>>>>> <NameShape> {
>>>>>  foaf:name LITERAL
>>>>> | foaf:givenName LITERAL ; foaf:familyName LITERAL
>>>>> }
>>>>> 
>>>>> than this SHACL?:
>>>>> 
>>>>> :UserShape
>>>>> sh:or (
>>>>>  [ sh:and (
>>>>>    [ sh:property
>>>>>      [ sh:path foaf:name; sh:minCount 1; sh:maxCount 1 ] ]
>>>>>    [ sh:not [
>>>>>       sh:property
>>>>>         [ sh:path foaf:givenName; sh:minCount 1; sh:maxCount 1 ] ] ]
>>>>>    [ sh:not [
>>>>>       sh:property
>>>>>         [ sh:path foaf:familyName; sh:minCount 1; sh:maxCount 1 ] ] ] ) ]
>>>>>  [ sh:and (
>>>>>    [ sh:not [ sh:property
>>>>>      [ sh:path foaf:name; sh:minCount 1; sh:maxCount 1 ] ] ]
>>>>>    [ sh:property
>>>>>      [ sh:path foaf:givenName; sh:minCount 1; sh:maxCount 1 ] ]
>>>>>    [ sh:property
>>>>>      [ sh:path foaf:familyName; sh:minCount 1; sh:maxCount 1 ] ] ) ] ) .
>>>>> 
>>>>> -- 
>>>>> -ericP
>>>>> 
>>>>> office: +1.617.599.3509
>>>>> mobile: +33.6.80.80.35.59
>>>>> 
>>>>> (eric@w3.org)
>>>>> Feel free to forward this message to any list for any purpose other than
>>>>> email address distribution.
>>>>> 
>>>>> There are subtle nuances encoded in font variation and clever layout
>>>>> which can only be seen by printing this message on high-clay paper.
>>>>> 
>>>> 
>>> 
>>> -- 
>>> -ericP
>>> 
>>> office: +1.617.599.3509
>>> mobile: +33.6.80.80.35.59
>>> 
>>> (eric@w3.org)
>>> Feel free to forward this message to any list for any purpose other than
>>> email address distribution.
>>> 
>>> There are subtle nuances encoded in font variation and clever layout
>>> which can only be seen by printing this message on high-clay paper.
>> 
> 
> -- 
> -ericP
> 
> office: +1.617.599.3509
> mobile: +33.6.80.80.35.59
> 
> (eric@w3.org)
> Feel free to forward this message to any list for any purpose other than
> email address distribution.
> 
> There are subtle nuances encoded in font variation and clever layout
> which can only be seen by printing this message on high-clay paper.
> 

Received on Tuesday, 6 June 2017 09:09:09 UTC