Re: Declarations of Property Min/Max Cardinality

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