@prefix : <#> .
@prefix earl: <http://www.w3.org/2001/03/earl/0.9#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix log: <http://www.w3.org/2000/10/swap/log.n3#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .

<> dc:title "EARL 0.9 RDF Schema";
   dc:version """$Id: 0.9.n3,v 1.10 2001/05/16 18:04:35 dom Exp $""" .

earl:Evaluation a rdfs:Class; rdfs:subClassOf rdf:Statement .

earl:asserts a rdf:Property; 
   rdfs:comment """For earl:asserts(x,y), the assertor (x) asserts the assertion (y)""";
   rdfs:domain earl:Assertor;
   rdfs:range earl:Assertion .

earl:Assertor a rdfs:Class .
earl:Assertion a rdfs:Class .

# { [ a earl:TestSubject ] 
#   [ a earl:TestCase ] 
#   [ a earl:TestResult ] } a earl:Assertion .

# To give the Assertion an ID, I suggest you say it's equiv to some URI

earl:TestSubject a rdfs:Class .

earl:TestCase a rdfs:Class; rdfs:subClassOf rdf:Property .
# e.g. { :altTag a earl:TestCase } log:implies { :altTag a rdf:Property } .

earl:TestResult a rdfs:Class .
# To give the TestResult an ID, just make it non-anonymous.

# Overall we have:-
#  { [ a earl:Assertor ] 
#      earl:asserts 
#    { [ a earl:TestSubject ] 
#      [ a earl:TestCase ] 
#      [ a earl:TestResult ] } } a earl:Evaluation .

# earl:Assertor terms

earl:Person a rdfs:Class; rdfs:subClassOf earl:Assertor .
earl:hasEmail a rdf:Property; rdfs:domain earl:Person; rdfs:range earl:Email .
earl:hasName a rdf:Property; rdfs:domain earl:Assertor; rdfs:range earl:Name .
earl:hasAddress a rdf:Property; rdfs:domain earl:Assertor; rdfs:range earl:Address .
earl:hasPlatform a rdf:Property; rdfs:domain earl:Assertor; rdfs:range earl:Platform .

# earl:TestSubject terms

earl:TestSubject a rdfs:Class .
earl:testSubject a rdf:Property .
earl:WebContent rdfs:subClassOf earl:TestSubject .
earl:Tool rdfs:subClassOf earl:TestSubject .

earl:lastModified rdfs:domain earl:TestSubject; rdfs:range earl:Date .
earl:hasSnapshot rdfs:domain earl:TestSubject .
earl:testResult rdfs:domain earl:TestSubject .
earl:released rdfs:domain earl:TestSubject .
earl:version rdfs:domain earl:TestSubject .

# earl:TestCase terms

# { :x a earl:TestCase } 
#    log:implies 
# { :x rdfs:domain earl:TestSubject; rdfs:range earl:TestResult } .

# e.g.
# :myTest a earl:TestCase; 
# earl:mode earl:Auto .

earl:testMode rdfs:domain earl:TestCase; rdfs:range earl:TestMode .
earl:Manual a earl:TestMode .
earl:Auto a earl:TestMode .
earl:Heuristic a earl:TestMode .
earl:expectedResult rdfs:domain earl:TestCase; rdfs:range rdf:Literal .
earl:operatorInstructions rdfs:domain earl:TestCase; rdfs:range rdf:Literal .
earl:reproducableStep rdfs:domain earl:TestCase; rdfs:range rdf:Literal .
earl:purpose rdfs:domain earl:TestCase; rdfs:range rdf:Literal .
earl:suite rdfs:domain earl:TestCase; rdfs:range earl:Suite .
# "individual id: URL, (checkpoint id, svg test suite assertion)" is difficult...
earl:id a rdf:Property .
# myns:checkpointId rdfs:subPropertyOf earl:id .

# earl:TestResult terms

earl:validity rdfs:range earl:ValidityState; rdfs:domain earl:TestResult .
# does this have to be enumerated? If so, all of the values must be URIs, which is 
# annoying because they have to be declared, thus:-
earl:ValidityState a rdfs:Class .
earl:Pass a earl:ValidityState .
earl:Fail a earl:ValidityState .
earl:NotTested a earl:ValidityState .
earl:NotApplicable a earl:ValidityState .
earl:CannotTell a earl:ValidityState .

earl:confidence rdfs:domain earl:TestResult; rdfs:range earl:ConfidenceLevel .
# see above for the "enumeration problem"
earl:High a earl:ConfidenceLevel .
earl:Medium a earl:ConfidenceLevel .
earl:Low a earl:ConfidenceLevel .
# But at least this mechanism is extensible!

earl:date rdfs:domain earl:TestResult; rdfs:range earl:Date; = dc:date .
earl:Date a rdfs:Class .

earl:comment = rdfs:comment .
earl:nature = rdf:type .
# @@ added because Daniel used the word "nature" for type.

# See some examples using this schema at:-
# <http://www.w3.org/2001/03/earl/0.9examples>
# 
# See the prose for all of this at:-
# <http://lists.w3.org/Archives/Public/w3c-wai-er-ig/2001Mar/0015>
#    dc:creator "Daniel Dardailler" .
# and
# <http://lists.w3.org/Archives/Public/w3c-wai-er-ig/2001Apr/0033>
#    dc:creator "Aaron Swartz" .

# <> :author [ :name "Sean B. Palmer"; :email <mailto:sean@mysterylights.com> ] .
