- From: Karen Coyle <kcoyle@kcoyle.net>
- Date: Wed, 04 Feb 2015 14:37:59 -0800
- To: Eric Prud'hommeaux <eric@w3.org>, "public-data-shapes-wg@w3.org" <public-data-shapes-wg@w3.org>
I'm not sure that it is the same as your example below, but perhaps it is just that it is simpler. The stated use case from Europeana is: For each incoming record (graph) there must be one subject declared as type edm:providedCHO and one subject declared as type ore:Aggregation. So it isn't connected with any property other than "rdf:type" (or is it rdfs:type - I never remember). This is why I ask, because DCMI has declared separate cardinality requirements for properties and for classes. Conceptually, it's putting restrictions at an entity level, if your data is modeled in E-R terms. In RDF I think of it as "only one graph declared as this type". Is that still the same qualified cardinality that you describe? kc On 2/4/15 2:08 PM, Eric Prud'hommeaux wrote: > * Karen Coyle <kcoyle@kcoyle.net> [2015-02-04 12:58-0800] >> One of the requirements that we will be discussing tomorrow is: >> Declarations of Property Min/Max Cardinality >> >> Is there a related requirement that would assert min/max cardinality >> on subjects of a type, or within a targeted graph? - e.g. only one >> subject of type foaf:person per graph. This is a common requirement >> that we have in the DCMI work. > > I believe that's a qualfied cardinality restriction. A bunch of > clinical modelers have requested something basically like this: > > my:PersonShape { > :hasBiologicalParent { :gender (:Male) }, > :hasBiologicalParent { :gender (:Female) } > } > > Which I implemented as requiring one of the first, one of the second, > and no more instances of :hasBiologicalParent. > > see http://w3.org/brief/NDMy > > In OWL, that would look like a couple QCRs and an allValuesFrom: > > my:PersonShape > rdfs:subClassOf > [ owl:onProperty :hasBiologicalParent; > owl:cardinality 1; > owl:allValuesFrom [ owl:onProperty :gender ; owl:hasValue :Male ] ], > [ owl:onProperty :hasBiologicalParent; > owl:cardinality 1; > owl:allValuesFrom [ owl:onProperty :gender ; owl:hasValue :Female ] ], > [ owl:onProperty :hasBiologicalParent; > owl:allValuesFrom [ owl:unionOf ( > [ owl:onProperty :gender ; owl:hasValue :Male ] > [ owl:onProperty :gender ; owl:hasValue :Female ] > ) ] ] . > > I could simplify this example by removing the extra nested constraint, > but it becomes a bit artificial: > > my:AnimalShape { > :consumes :food, > :consumes :water, > :consumes :oxygen > } > > would look like: > > my:AnimalShape > rdfs:subClassOf > // consumes each of three things: > [ owl:onProperty :consumes; > owl:cardinality 1; > owl:hasValue :food ], > [ owl:onProperty :consumes; > owl:cardinality 1; > owl:hasValue :water ], > [ owl:onProperty :consumes; > owl:cardinality 1; > owl:hasValue :oxygen ], > > // consumes only those three things: > [ owl:onProperty :consumes; > owl:allValuesFrom [ owl:oneOf ( > :food :water :oxygen > ) ] ] . > > Without the last restriction, we fail to catch a lot of errors, > e.g. coding errors: > > <Rex> :consumes :food, :water, O2 . > > or typos: > > <Rex> :consumes :food, :water, xoygen . > > >> kc >> >> -- >> Karen Coyle >> kcoyle@kcoyle.net http://kcoyle.net >> m: 1-510-435-8234 >> skype: kcoylenet/+1-510-984-3600 >> > -- Karen Coyle kcoyle@kcoyle.net http://kcoyle.net m: 1-510-435-8234 skype: kcoylenet/+1-510-984-3600
Received on Wednesday, 4 February 2015 22:38:29 UTC