- 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