@keywords a .
@prefix : <http://example.org/ns/plan3#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix log: <http://www.w3.org/2000/10/swap/log#> .

<> doc "validate.n3 - Validate an Instance"; 
   dc:author [ foaf:homepage <http://inamidst.com/sbp/> ] .

# first def ((seq)
#    (if seq (return (seq 0)))
#    (else (return (list)))
# ) .

# entail def ((triples)
#    (create entailment)
#    (store entailment <rdf-rules.n3> <rdfs-rules.n3>)
#    (return (conclude triples entailment))
# ) .

# check def ((t expected)
#    (var uri (racine t))
#    (var triples (semanticsOrError uri
#       ((say "Error: can't access" ?uri) (return))))
#    (var defn (first (select ?d from triples { t rdfs:isDefinedBy ?d })))
#    (if defn
#       (var dtriples (semanticsOrError defn 
#          ((say "Error: can't access" defn) (return)))) 
#       (var aug (entail dtriples)))
#    (else (var aug (entail triples)))
#    (if (not (includes aug expected))
#       (say "Error:" t "is undefined in" (or defn uri))))
# ) .

check def ((t expected)
   (say "t:" t)
   (say "expected:" expected)

   (var uri (racine t))
   (say "uri:" uri)

   (var triples (semanticsOrError uri
      ((say "Error: can't access" uri) (say) (return))))
   (var defn (first (select ?d from triples where { t rdfs:isDefinedBy ?d })))
   (say "defn:" defn)
   # (if defn
   #    ((var dtriples (semanticsOrError defn 
   #        ((say "Error: can't access" defn) (return)))) 
   #     (var aug (entail dtriples))))
   # (else (var aug (entail triples)))

   (say)
) .

validate def ((input)
   (select distinct ?p from input where { ?s ?p ?o }
      (check ?p { ?p a rdf:Property }))
   (select distinct ?c from input where { ?s a ?c }
      (check ?c { ?c a rdfs:Class }))
) .

main script (
   (var target (baseAbsolute (argv 1)))
   (var input (semantics target))
   (validate input)
) .

