@prefix dc: <http://purl.org/dc/elements/1.1/> .

<> dc:description """
Sniff a schema from some RDF data.
""",
"$Id: sniffSchema.n3,v 1.5 2002/07/18 05:39:40 connolly Exp $";
dc:relation <sniffSchema.rdf>, <sniffSchema.n3>.

@prefix s: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix r: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.

@prefix log:  <http://www.w3.org/2000/10/swap/log#> .
@prefix str:  <http://www.w3.org/2000/10/swap/string#> .

@prefix   : <http://www.w3.org/2000/10/swap/util/sniffSchema#>.
@prefix ss: <http://www.w3.org/2000/10/swap/util/sniffSchema#>.

this log:forAll :P, :C, :X, :T.

# declare the properties I'm using...
# thanks to the DAML validator for keeping me honest.
#  http://www.daml.org/validator/
ss:label a r:Property; s:label "label?".
ss:intersectsDomainOf a r:Property; s:label "intersects domain of".
ss:domainIntersects a r:Property; s:label "domain intersects".
ss:rangeIntersects a r:Property; s:label "range intersects".

{ [] :P []. } log:implies { :P a r:Property }.
{ [] a :C } log:implies { :C a s:Class }.

{ [] :P [].
  ( [ is log:uri of :P] "#(.*)") str:scrape :T }
  log:implies { :P ss:label :T }.
{ [] a :C.
  ( [ is log:uri of :C] "#(.*)") str:scrape :T }
  log:implies { :C ss:label :T }.

{ [ a :C ] :P [] } log:implies {
  :P :domainIntersects :C.
  :C ss:intersectsDomainOf :P.
  ss:intersectsDomainOf s:subPropertyOf s:seeAlso.
}.
{ [] :P [ a :C ] } log:implies { :P :rangeIntersects :C }.
{ [] :P [ log:rawType log:Literal ] } log:implies { :P :rangeIntersects s:Literal }.

# might need to think for these to have much impact...
{ :X a r:Property;
     s:label :T } log:implies { :X s:label :T }.
{ :X a s:Class;
     s:label :T } log:implies { :X s:label :T }.

log:implies a log:Chaff. #@@ I hate this hack.
