# baseURI: http://www.workingontologist.org/Examples/Chapter12/questionnaire

@prefix xsd:     <http://www.w3.org/2001/XMLSchema#> .
@prefix q:       <http://www.workingontologist.org/Examples/Chapter12/questionnaire#> .
@prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
@prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix owl:     <http://www.w3.org/2002/07/owl#> .

<http://www.workingontologist.org/Examples/Chapter12/questionnaire>
      a       owl:Ontology .

q:Answer rdfs:label "Answer" ;
      a       owl:Class .

q:AnsweredQuestion rdfs:label "AnsweredQuestion" ;
      a       owl:Class ;
      rdfs:subClassOf owl:Thing ;
      owl:equivalentClass
              [ a       owl:Restriction ; rdfs:label "hasSelectedOption some Answer" ;
                owl:onProperty q:hasSelectedOption ;
                owl:someValuesFrom q:Answer
              ] .

q:EnabledQuestion rdfs:label "EnabledQuestion" ;
      a       owl:Class .


[ a owl:Restriction ;
  owl:onProperty q:hasPrerequisite ;
  owl:allValuesFrom q:SelectedAnswer ]
    rdfs:subClassOf q:EnabledQuestion .

q:High rdfs:label "High" ;
      a       q:PriorityLevel .

q:HighPriorityItem rdfs:label "HighPriorityItem" ;
      a       owl:Class ;
      rdfs:subClassOf owl:Thing ;
      owl:equivalentClass
              [ a       owl:Restriction ;
                owl:hasValue q:High ;
                owl:onProperty q:hasPriority
              ] .

q:Low rdfs:label "Low" ;
      a       q:PriorityLevel .

q:LowPriorityItem rdfs:label "LowPriorityItem" ;
      a       owl:Class ;
      rdfs:subClassOf owl:Thing ;
      owl:equivalentClass
              [ a       owl:Restriction ;
                owl:hasValue q:Low ;
                owl:onProperty q:hasPriority
              ] .

q:Medium rdfs:label "Medium" ;
      a       q:PriorityLevel .

q:MediumPriorityItem rdfs:label "MediumPriorityItem" ;
      a       owl:Class ;
      rdfs:subClassOf owl:Thing ;
      owl:equivalentClass
              [ a       owl:Restriction ;
                owl:hasValue q:Medium ;
                owl:onProperty q:hasPriority
              ] .

q:PriorityItem rdfs:label "PriorityItem" ;
      a       owl:Class ;
      rdfs:subClassOf q:Question .

q:PriorityLevel rdfs:label "PriorityLevel" ;
      a       owl:Class .

q:Question rdfs:label "Question" ;
      a       owl:Class .

q:SelectedAnswer rdfs:label "SelectedAnswer" ;
      a       owl:Class ;
      rdfs:subClassOf q:Answer ;
      rdfs:subClassOf
              [ a       owl:Restriction ;
                owl:allValuesFrom q:EnabledQuestion ;
                owl:onProperty q:enablesCandidate
              ] .

q:answerText rdfs:label "answerText" ;
      a       owl:DatatypeProperty ;
      rdfs:domain q:Answer ;
      rdfs:range xsd:string .

q:enablesCandidate rdfs:label "enablesCandidate" ;
      a       owl:ObjectPropery ;
      rdfs:domain q:Answer ;
      rdfs:range q:Question .

q:hasOption rdfs:label "hasOption" ;
      a       owl:ObjectProperty .

q:hasPrerequisite rdfs:label "hasPrerequisite" ;
      a       owl:ObjectProperty .

q:hasPriority rdfs:label "hasPriority" ;
      a       owl:ObjectProperty ;
      rdfs:domain q:PriorityItem .

q:hasSelectedOption rdfs:label "hasSelectedOption" ;
      a       owl:ObjectProperty ;
      rdfs:range q:SelectedAnswer ;
      rdfs:subPropertyOf q:hasOption .

q:optionOf rdfs:label "optionOf" ;
      a       owl:ObjectProperty ;
      rdfs:domain q:Answer ;
      rdfs:range q:Question ;
      owl:inverseOf q:hasOption .

q:questionText rdfs:label "questionText" ;
      a       owl:DatatypeProperty , owl:FunctionalProperty ;
      rdfs:domain q:Question ;
      rdfs:range xsd:string .
