@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix : <https://w3id.org/dio#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix xml: <http://www.w3.org/XML/1998/namespace> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .

dc:creator
    a owl:AnnotationProperty .

dc:date
    a owl:AnnotationProperty .

dc:description
    a owl:AnnotationProperty .

dc:title
    a owl:AnnotationProperty .

<http://www.w3.org/ns/prov#Agent>
    a owl:Class .

<http://www.w3.org/ns/prov#generatedAtTime>
    a owl:DatatypeProperty .

<http://www.w3.org/ns/prov#wasAttributedTo>
    a owl:ObjectProperty .

<https://w3id.org/dio#>
    dc:creator "Monika Solanki (monika.solanki@cs.ox.ac.uk)"@en ;
    dc:date "04-01-2016" ;
    dc:description """The Design Intent Ontology (DIO) is a generic ontology that provides the conceptualisation needed to capture the knowledge generated during various phases of the overall design lifecycle. 

It provides definitions for design artifacts such as requirements, designs, design issues, solutions, justifications and evidence and relationships between them to represent the design process and how these things lead to design outcomes.  It draws upon the paradigms of IBIS(Interactive Intent-Based Illustration), argumentation and design rationale. It is linked to W3C PROV by defining the actors in the design process as PROV agents and the design artifacts themselves are PROV entities. However DIO uses a modualrised version of PROV-O, based on Syntactic locality.

DIO makes few assumptions about the design process used as the definitions of these activities properly belongs in the software lifecycle and data lifecycle models. The Figure below illustrates the conceptual entities in DIO and their relationships."""^^xsd:string ;
    dc:title "The Design Intent Ontology - A content ontology design pattern" ;
    a owl:Ontology ;
    rdfs:seeAlso "http://ceur-ws.org/Vol-1461/WOP2015_pattern_abstract_6.pdf"^^xsd:anyURI ;
    owl:versionInfo "1.1.000"^^xsd:string .

:Active
    a owl:NamedIndividual, :Status ;
    rdfs:comment "The status of an issue when it is active." ;
    rdfs:label "Active" .

:AlternativeSolution
    a owl:Class ;
    rdfs:comment "An entity representing the proposed solution." ;
    rdfs:label "Alternative Solution" ;
    rdfs:subClassOf :Solution .

:Argument
    a owl:Class ;
    rdfs:comment "A reason presented against a proposed solution." ;
    rdfs:label "Argument" ;
    rdfs:subClassOf :DesignIntentArtifact .

:Assumption
    a owl:Class ;
    rdfs:comment "The assumption on which a proposed solution is based." ;
    rdfs:label "Assumption" ;
    rdfs:subClassOf :DesignIntentArtifact .

:Comment
    a owl:Class ;
    rdfs:comment "A comment made by an agent in response to an argument, a justification or another comment" ;
    rdfs:label "Comment" ;
    rdfs:subClassOf :DesignIntentArtifact .

:Constraint
    a owl:Class ;
    rdfs:comment "A constraint that underlies the proposed solution." ;
    rdfs:label "Constraint" ;
    rdfs:subClassOf :DesignIntentArtifact .

:Design
    a owl:Class ;
    rdfs:comment "A design is a specification of an object, manifested by an agent, intended to accomplish goals, in a particular environment, using a set of  components, satisfying a set of requirements, subject to constraints." ;
    rdfs:label "Design" .

:DesignArtifact
    a owl:Class ;
    rdfs:comment "The concrete artifact that is implemented or developed following the design that emerges from the design decisions." ;
    rdfs:label "Design Artifact" .

:DesignDecision
    a owl:Class ;
    rdfs:comment "The final design decision made based on the various alternative solutions proposed. A design decision is driven by a mandated solution." ;
    rdfs:label "Design Decision" .

:DesignGoal
    a owl:Class ;
    rdfs:comment "An entity representing the problem, goal, question or issue the design intent aims to address." ;
    rdfs:label "Design Goal" ;
    rdfs:subClassOf [
        a owl:Class ;
        owl:intersectionOf (:DesignIntentArtifact
            [
                a owl:Restriction ;
                owl:allValuesFrom :AlternativeSolution ;
                owl:onProperty :hasAlternativeSolution
            ]
            [
                a owl:Restriction ;
                owl:allValuesFrom :MandatedSolution ;
                owl:onProperty :hasMandatedSolution
            ]
            [
                a owl:Restriction ;
                owl:maxQualifiedCardinality "1"^^xsd:nonNegativeInteger ;
                owl:onClass :MandatedSolution ;
                owl:onProperty :hasMandatedSolution
            ]
        )
    ] ;
    owl:equivalentClass :DesignIssue .

:DesignIntent
    a owl:Class ;
    rdfs:comment "A entity defining the notion of a design intent, i.e., the rationale underpinning the choices that are made from the alternatives available during various phases of the overall design lifecycle." ;
    rdfs:label "Design Intent" ;
    rdfs:subClassOf :DesignIntentArtifact .

:DesignIntentArtifact
    a owl:Class ;
    rdfs:comment "An entity representing any artifact that plays a part in capturing the design intent. The minimum ontological commitment required for this entity is a brief description of the artifact, the version info and the date." ;
    rdfs:label "Design Intent Artifact" ;
    rdfs:subClassOf [
        a owl:Class ;
        owl:intersectionOf ([
                a owl:Restriction ;
                owl:onClass <http://www.w3.org/ns/prov#Agent> ;
                owl:onProperty <http://www.w3.org/ns/prov#wasAttributedTo> ;
                owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger
            ]
            [
                a owl:Restriction ;
                owl:onDataRange xsd:dateTime ;
                owl:onProperty <http://www.w3.org/ns/prov#generatedAtTime> ;
                owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger
            ]
            [
                a owl:Restriction ;
                owl:onDataRange xsd:string ;
                owl:onProperty :version ;
                owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger
            ]
        )
    ] .

:DesignIssue
    a owl:Class ;
    rdfs:comment "An entity representing the problem, goal, question or issue the design intent aims to address." ;
    rdfs:label "Design Issue" ;
    rdfs:subClassOf :DesignIntentArtifact .

:DesignRequirement
    a owl:Class ;
    rdfs:comment "An entity capturing the requirements that result in the design intent" ;
    rdfs:label "Design Requirements" ;
    rdfs:subClassOf :DesignIntentArtifact .

:Evaluation
    a owl:Class ;
    rdfs:comment "An entity representing the evaluation that supports the solution." ;
    rdfs:label "Evaluation" ;
    rdfs:subClassOf :DesignIntentArtifact .

:Evidence
    a owl:Class ;
    rdfs:comment "An entity representing an evidence that supports a proposed solution." ;
    rdfs:label "Evidence" ;
    rdfs:subClassOf :DesignIntentArtifact .

:Heuristic
    a owl:Class ;
    rdfs:comment "An entity representing the requirements to be fulfilled for realising the solution" ;
    rdfs:label "Heuristic" ;
    rdfs:subClassOf :DesignIntentArtifact .

:Justification
    a owl:Class ;
    rdfs:comment "A reason supporting the proposed solution." ;
    rdfs:label "Justification" ;
    rdfs:subClassOf :DesignIntentArtifact .

:MandatedSolution
    a owl:Class ;
    rdfs:comment "An entity representing the solution accepted as a result of the design deliberation process." ;
    rdfs:label "Mandated Solution" ;
    rdfs:subClassOf :Solution .

:OnHold
    a owl:NamedIndividual, :Status ;
    rdfs:comment "The status of an issue when it is onHold" ;
    rdfs:label "onHold" .

:RationaleCaptureMethod
    a owl:Class ;
    rdfs:comment "An entity representing the methodology used to capture the design intent artifact" ;
    rdfs:label "Rationale Capture Methodology" .

:Resolved
    a owl:NamedIndividual, :Status ;
    rdfs:comment "The status of an issue when it is resolved." .

:Solution
    a owl:Class ;
    rdfs:label "Solution" ;
    rdfs:subClassOf :DesignIntentArtifact .

:Status
    a owl:Class ;
    rdfs:comment "An entity representing the status of a design issue." ;
    rdfs:label "Status" .

:Terminated
    a owl:NamedIndividual, :Status ;
    rdfs:comment "The status of an issue when it is terminated." .

:addressedBy
    a owl:ObjectProperty ;
    rdfs:comment "A relationship stating the design intent addressing a requirement." ;
    rdfs:label "addressedBy" .

:captureMethodology
    a owl:ObjectProperty ;
    rdfs:comment "A relationship identifying the capture methodology for a design issue" ;
    rdfs:label "captureMethodology" .

:contradicts
    a owl:ObjectProperty ;
    rdfs:comment "A relationship indicating contradictory issues." ;
    rdfs:domain :Solution ;
    rdfs:label "contradicts" ;
    rdfs:range :Solution .

:fulfillsRequirement
    a owl:ObjectProperty ;
    rdfs:comment "A relationship between the design and its requirement." ;
    rdfs:domain :Design, :DesignIntentArtifact ;
    rdfs:label "fullfillsRequirements" ;
    rdfs:range :DesignRequirement ;
    owl:inverseOf :requirementFulfilledBy .

:generatedByIntent
    a owl:ObjectProperty ;
    rdfs:comment "A relationship between the design issue and intent." ;
    rdfs:label "generatedByIntent" ;
    owl:inverseOf :generatesIssue .

:generatesIssue
    a owl:ObjectProperty ;
    rdfs:comment "A relationship between the design intent and issue." ;
    rdfs:label "generatesIssue" .

:governsDesign
    a owl:ObjectProperty ;
    rdfs:comment "The design decision governing the design." ;
    rdfs:domain :DesignDecision ;
    rdfs:label "governsDesign" ;
    rdfs:range :Design .

:hasAlternativeSolution
    a owl:ObjectProperty ;
    rdfs:comment "The realtionship between the issue and an alternative solution for it." ;
    rdfs:label "hasAlternativeSolution" ;
    rdfs:range :AlternativeSolution ;
    rdfs:subPropertyOf owl:topObjectProperty ;
    owl:inverseOf :providesAlternativeSolution .

:hasArgument
    a owl:ObjectProperty ;
    rdfs:comment "The relationship between a solution and an argument made against it." ;
    rdfs:label "hasArgument" ;
    rdfs:range :Argument .

:hasComment
    a owl:ObjectProperty ;
    rdfs:comment "The relationship between a comment and a design intent artifact for which the comment is made." ;
    rdfs:label "hasComment" .

:hasConstraint
    a owl:ObjectProperty ;
    rdfs:comment "A relationship between a solution and a constarint on it." ;
    rdfs:domain :Solution ;
    rdfs:label "hasConstraint" ;
    rdfs:range :Constraint .

:hasEvidence
    a owl:ObjectProperty ;
    rdfs:comment "A relationship between a solution and an evidence for it." ;
    rdfs:domain :Argument, :Justification ;
    rdfs:label "hasEvidence" ;
    rdfs:range :Evidence .

:hasJustification
    a owl:ObjectProperty ;
    rdfs:comment "A relationship between a solution and the justification for it." ;
    rdfs:label "hasJustification" ;
    rdfs:range :Justification .

:hasMandatedSolution
    a owl:ObjectProperty ;
    rdfs:comment "A relationship between the issue and its mandated solution." ;
    rdfs:label "hasMandatedSolution" ;
    rdfs:range :MandatedSolution ;
    rdfs:subPropertyOf owl:topObjectProperty ;
    owl:inverseOf :providesMandatedSolution .

:hasStatus
    a owl:ObjectProperty ;
    rdfs:comment "The relationship between an issue and its status." ;
    rdfs:domain :DesignIssue ;
    rdfs:label "hasStatus" ;
    rdfs:range :Status .

:identifiedByRequirement
    a owl:ObjectProperty ;
    rdfs:comment "The relationship between an issue and the requirement that identifies it." ;
    rdfs:label "identifiedByRequirement" ;
    owl:inverseOf :identifies .

:identifies
    a owl:ObjectProperty ;
    rdfs:comment "A relationship between the requirement and the issue it identifies." .

:implementedBy
    a owl:ObjectProperty .

:leadsTo
    a owl:ObjectProperty ;
    rdfs:comment "A relationship between a mandated solution and design decision made based on it." ;
    rdfs:domain :MandatedSolution ;
    rdfs:label "leadsTo" ;
    rdfs:range :DesignDecision ;
    rdfs:subPropertyOf owl:topObjectProperty .

:providesAlternativeSolution
    a owl:ObjectProperty ;
    rdfs:comment "A relationship between an alternative solution and the issue." ;
    rdfs:label "providesAlternativeSolution" .

:providesMandatedSolution
    a owl:ObjectProperty ;
    rdfs:comment "A relationship between a mandated solution and the issue." ;
    rdfs:label "providesMandatedSolution" .

:rationaleCapturedUsing
    a owl:ObjectProperty ;
    rdfs:comment "A relationship between the design rationale and its capture methodology." ;
    rdfs:label "rationaleCapturedUsing" .

:refines
    a owl:ObjectProperty ;
    rdfs:comment "A relationship between two requirememts when one refines the other." ;
    rdfs:domain :Solution ;
    rdfs:label "refines" ;
    rdfs:range :Solution .

:requirementFulfilledBy
    a owl:ObjectProperty ;
    rdfs:comment "A relationship between the design and its originating requirements" ;
    rdfs:label "requirementFulfilledBy" .

:supports
    a owl:ObjectProperty ;
    rdfs:comment "A relationship between an agent and a design solution argument or justification." ;
    rdfs:label "supports" ;
    rdfs:range :Argument, :Justification .

:usesAssumption
    a owl:ObjectProperty ;
    rdfs:comment "A relationship between a solution and the Assumption it makes." ;
    rdfs:domain :Solution ;
    rdfs:label "usesAssumption" ;
    rdfs:range :Assumption .

:usesHeuristic
    a owl:ObjectProperty ;
    rdfs:comment "A relationship between a solution and the heuristic iy uses." ;
    rdfs:domain :Solution ;
    rdfs:label "usesHeuristic" ;
    rdfs:range :Heuristic .

:version
    a owl:DatatypeProperty, owl:FunctionalProperty .

