# $Id: peopleKeyP.n3,v 1.1 2002/07/17 17:35:14 connolly Exp $
#
# based on...
#
# Message-ID: <15564.14438.901815.162795@merlin.oaklands.net>
# Date: Sun, 28 Apr 2002 18:59:02 +0100
# To: Dan Connolly <connolly@w3.org>
# Cc: Pat Hayes <phayes@ai.uwf.edu>, www-webont-wg@w3.org
# From: Ian Horrocks <horrocks@cs.man.ac.uk>
# Subject: Re: SEM: semantics for current proposal (why R disjoint V?) 	(sameState TEST)
#
# http://lists.w3.org/Archives/Public/www-webont-wg/2002Apr/0354.html

# Imagine, for example, that a datatype
# consisting of integers in the range 0-999


@prefix ont: <http://www.daml.org/2001/03/daml+oil#>. # not the newest namespace
@prefix s: <http://www.w3.org/2000/01/rdf-schema#> .


@prefix dt: <http://www.w3.org/2001/XMLSchema#>.
@prefix dtaux: <http://www.w3.org/2002/03owlt/datatype-aux@@#>.

@prefix :   <http://example/vocab#>.
@prefix ex: <http://example/vocab#>.

# RDFCore hasn't been convinced to deal with facets,
# so I'm sorta making this up...

# let's make it one to 10 for time's sake...

:OneTo9 ont:intersectionOf (
  :ints
  [ dt:maxExclusive "10"]
  [ dt:minInclusive "0"]
  ).

dt:integer dtaux:valueSpace :ints.

# is used as a unique-id/key
# for instances of the class Person such that all persons have exactly
# one unique-id, all unique-ids are integers in the range 0-999, and
# unique-id is an UnambiguousProperty.

:uniqueId a ont:UnambiguousProperty;
  s:domain :Person;
  s:range :OneTo99.

#  In order to function correctly,
# a reasoner is now required to understand the properties of datatypes,
# e.g., that the cardinality of this particular datatype is 1,000, and
# that as a result no model can contain more than 1,000 instances of
# Person (note that this would not be the case if unique-ids were reals
# in the range 0-999). 

# The formal properties of the resulting logic are not well understood
# (e.g., it is not clear yet if the language would be
# decidable). Moreover, it would cause severe problems for implementors
# and might be a source (admittedly not the only possible source) of
# crippling intractability: remember that, unlike a database, the
# existence of 2,000 individual names would not be an error, but would
# lead to the inference that the names must be partitioned into 1,000
# sets of "sameIndividuals". Check out the number of ways that 2,000
# elements can be partitioned into 1,000 sets - it is a big number!

:givenName a ont:UniqueProperty. # different name -> different person

:MyFamily ont:oneOf (
  [:givenName "Fred"]
  [:givenName "Wilma"]
  [:givenName "Bob"]
  [:givenName "Susie"]
  [:givenName "Jill"]
  [:givenName "Amy"]
  [:givenName "Jordan"]
  [:givenName "William"]
  [:givenName "Gertrude"]
  [:givenName "Janet"]
  [:givenName "Mark"]
).

:MyFamily s:subClassOf :Person.


