compiling ShEx oneOf to SHACL

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.

Received on Monday, 5 June 2017 11:02:59 UTC