%%ontology
@uses: configOptions
%
%%namespace
dco http://denkbares.com/ConfigOptions/
%
!! Definitions Configuration Options
%%turtle
dco:ConfigOption a owl:Class .
dco:ChoiceConfigOption rdfs:subClassOf ConfigOption .
dco:NumConfigOption rdfs:subClassOf ConfigOption .
dco:ConfigOptionAssignment a owl:Class .
dco:option a owl:ObjectProperty .
dco:val a owl:ObjectProperty .
dco:ChoiceValue a owl:Class .
dco:availableChoice a owl:ObjectProperty .
%
!! Definitions Constraints
%%turtle
dco:Constraint a owl:Class .
dco:ContradictingConstraint rdfs:subClassOf Constraint .
dco:hasDisjointSet a owl:ObjectProperty .
dco:hasValueA a owl:ObjectProperty .
dco:hasValueB a owl:ObjectProperty .
dco:contradicts a owl:ObjectProperty .
%
!! Definitions Car configuration set
%%turtle
dco:CarConfigSet a owl:Class.
dco:hasConfigAssignment a owl:ObjectProperty .
%
! Option Engine
%%turtle
dco:Engine a dco:ChoiceConfigOption ;
dco:availableChoice dco:SmallEngine, dco:MediumEngine, dco:Turbo .
dco:SmallEngine a ChoiceValue .
dco:MediumEngine a ChoiceValue .
dco:Turbo a ChoiceValue .
%
! Option Hitch
%%turtle
dco:Hitch a dco:ChoiceConfigOption ;
dco:availableChoice WithHitch, WithoutHitch .
dco:WithHitch a ChoiceValue .
dco:WithoutHitch a ChoiceValue .
%
! Option Edition
%%turtle
dco:Edition a dco:ChoiceConfigOption ;
dco:availableChoice FamilyEdition, SportsEdition, OffroadEdition .
dco:FamilyEdition a ChoiceValue .
dco:SportsEdition a ChoiceValue .
dco:OffroadEdition a ChoiceValue .
%
! Option Number of Doors
%%turtle
dco:NumberOfDoors a dco:NumConfigOption .
%
! Constraint 1 : Hitch contradicts Small Engine
%%
%%turtle
dco:HitchConstradictsSmallEngine a ContradictingConstraint ;
hasValueA [ option Hitch; val WithHitch] ;
hasValueB [ option Engine; val SmallEngine ] .
%
!! Car 1
%%turtle
dco:Car1 a CarConfigSet ;
hasConfigAssignment
[ option Engine; val MediumEngine ] ,
[ option Hitch; val WithHitch] .
%
%%sparql
SELECT ?option ?value WHERE {
dco:Car1 dco:hasConfigAssignment ?assignment.
?assignment dco:option ?option .
?assignment dco:value ?value .
}
%
!! Car 2
%%turtle
dco:Car2 a CarConfigSet ;
hasConfigAssignment
[ option Engine; val SmallEngine ] ,
[ option Hitch; val WithHitch] .
%
%%sparql
SELECT ?option ?value WHERE {
dco:Car2 dco:hasConfigAssignment ?assignment.
?assignment dco:option ?option .
?assignment dco:value ?value .
}
%
! Ill-defined Car
%%turtle
dco:CarX a CarConfigSet ;
hasConfigAssignment
[ option Engine; val WithHitch ] ,
[ option Hitch; val SportsEdition] .
%
%%sparql
SELECT ?option ?value WHERE {
dco:CarX dco:hasConfigAssignment ?assignment.
?assignment dco:option ?option .
?assignment dco:value ?value .
}
%
!! Assignment Consistency Query
%%Sparql
SELECT ?car ?option ?value {
?car rdf:type dco:CarConfigSet .
?car dco:hasConfigAssignment ?assignment .
?assignment dco:value ?value .
?assignment dco:option ?option .
FILTER NOT EXISTS {
?option dco:availableChoice ?value .
}
}
%
!! Constraint Validation Query
%%sparql
SELECT ?car ?constraint WHERE {
?constraint rdf:type dco:Constraint .
?constraint dco:hasValueA ?constraintAssignmentA .
?constraintAssignmentA dco:option ?constraintAssignmentAOption .
?constraintAssignmentA dco:value ?valueA .
?constraint dco:hasValueB ?constraintAssignmentB .
?constraintAssignmentB dco:option ?constraintAssignmentBOption .
?constraintAssignmentB dco:value ?valueB .
?car rdf:type dco:CarConfigSet .
?car dco:hasConfigAssignment ?assignment1 .
?assignment1 dco:value ?valueA .
?car dco:hasConfigAssignment ?assignment2 .
?assignment2 dco:value ?valueB .
}
%
%%package configOptions