W3C home > Mailing lists > Public > public-data-shapes-wg@w3.org > August 2016

an alternative proposal for partition

From: Eric Prud'hommeaux <eric@w3.org>
Date: Wed, 10 Aug 2016 21:32:37 -0400
To: public-data-shapes-wg@w3.org
Cc: "Solbrig, Harold R." <Solbrig.Harold@mayo.edu>, Iovka Boneva <iovka.boneva@univ-lille1.fr>, Jose Emilio Labra Gayo <jelabra@gmail.com>
Message-ID: <20160811013234.GA9162@w3.org>
The current partition meets some additive use cases like:
  <S> {
    dc:creator PATTERN "^mailto:a.gov" ; # one a.gov creator
    dc:creator PATTERN "^mailto:b.mil"   # and one b.mil creator
  }

but not ones with any algebraic operators like:
  <S> {
    (   dc:creator PATTERN "^mailto:.*@a.gov"  # either creator a.gov
      | dc:creator {                           # or a creator some node
          foaf:mbox PATTERN "^mailto:.*@a.gov" # with a foaf:mbox of a.gov
        }
    ) ;
    dc:creator PATTERN "^mailto:.*@b.mil"     # and one b.mil creator
  }

An alternative which would be to create a syntax to capture ShEx's
partition semantics which say:
  Map the triples to the triple patterns with the same predicate.
  The node is valid with respect to a triple expression if there
  is a mapping of triple to triple pattern which satisfies the
  expression.
For instance, the data
  <s> dc:creator <mailto:a@b.mil> .
  <s> dc:creator _:b1 .
  _:b1 foaf:mbox <mailto:b@a.gov> .
satisfies the above pattern.

I propose leveraging the current partition but allowing expressions:
  <S> sh:partition [
    sh:and (
      [ sh:property [
          sh:predicate ex:creator ; sh:minCount 1 ; sh:maxCount 1 ;
	  sh:pattern "^mailto:.*@a.gov" ] ]
      [ sh:property [
          sh:predicate ex:creator ; sh:minCount 1 ; sh:maxCount 1 ;
	  sh:pattern "^mailto:.*@b.mil" ] ]
    ) .

This also handily provides a semantics with a disjunctive OR so e.g.
  <EmployeeShape> {
      foaf:name .          # either a foaf:name
    | ( foaf:givenName . ; # or a pair of givenName
        foaf:familyName .  # and familyName
      )
  }
would not be satisfied with a partial pair:
  <emp1> foaf:name "Alice Cooper" .
  <emp1> foaf:familyName "Cooper" .
because the 1st disjoint doesn't use the 2nd triple and the 2nd
disjoint is missing a familyName.

Users wanting either additive properties or disjunctive OR could
use the sh:partition operator.

-- 
-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 Thursday, 11 August 2016 01:32:43 UTC

This archive was generated by hypermail 2.3.1 : Thursday, 11 August 2016 01:32:43 UTC