@base <https://w3id.org/usability> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix : <#> .
@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#> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix terms: <http://purl.org/dc/terms/> .

<>
    dc:creator "Danilov Nikita" ;
    dc:description "Ontology 'Usability' created to describe and store information about interactions of user with a software user interface"@en, "Онтология \"Удобство испльзования\" предназначена для фиксации данных о взаимодействии пользователя с программной системой посредством графического пользовательского интерфейса"@ru ;
    dc:publisher "Denis Palashevskiy" ;
    dc:title "Usability"@en, "Удобство использования"@ru ;
    a owl:Ontology .

:ActionEvent
    a owl:Class ;
    rdfs:comment "The base class for events which are user actions related to user interation with the interface (clicks, mouse movements, etc.)"@en, "Базовый класс, предназначенный для событий, которые представляют собой действия пользователя, относящиеся к взаимодействию пользователя с интерфейсом (клики, перемещения мыши и др.)"@ru ;
    rdfs:label "ActionEvent"@en, "ДействиеСобытие"@ru ;
    rdfs:subClassOf :Event .

:ClickMouseActionEvent
    a owl:Class ;
    rdfs:comment "The class that represents any mouse click"@en, "Клик (click) — щелчок по кнопке мыши."@ru ;
    rdfs:label "ClickMouseActionEvent"@en, "КликМышьДействиеСобытие"@ru ;
    rdfs:subClassOf :MouseActionEvent, [
        a owl:Restriction ;
        owl:onDataRange [
            a rdfs:Datatype ;
            owl:onDatatype xsd:double ;
            owl:withRestrictions ([
                    xsd:minInclusive 0.0
                ]
            )
        ] ;
        owl:onProperty :hasInRegionX ;
        owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger
    ], [
        a owl:Restriction ;
        owl:onDataRange [
            a rdfs:Datatype ;
            owl:onDatatype xsd:double ;
            owl:withRestrictions ([
                    xsd:minInclusive 0.0
                ]
            )
        ] ;
        owl:onProperty :hasInRegionY ;
        owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger
    ] .

:Command
    a owl:Class ;
    rdfs:comment "Базовый класс команды, вызываемой пользователем."@ru ;
    rdfs:label "Command"@en, "The base class for the command called by user"@en, "Команда"@ru ;
    rdfs:subClassOf [
        a owl:Restriction ;
        owl:onProperty :isContainedIn ;
        owl:someValuesFrom :CommandEvent
    ], [
        a owl:Restriction ;
        owl:onProperty :wasInvokedIn ;
        owl:someValuesFrom :CommandEvent
    ], [
        a owl:Restriction ;
        owl:onDataRange [
            a rdfs:Datatype ;
            owl:onDatatype xsd:string ;
            owl:withRestrictions ([
                    xsd:minLength "1"^^xsd:int
                ]
            )
        ] ;
        owl:onProperty :hasName ;
        owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger
    ] .

:CommandA
    a owl:NamedIndividual, :Command ;
    :hasName "CommandA"^^xsd:string .

:CommandB
    a owl:NamedIndividual, :Command ;
    :hasName "CommandB"^^xsd:string ;
    :isContainedIn :RegionVariation211 ;
    :wasInvokedIn :RegionVariation211 .

:CommandEvent
    a owl:Class ;
    rdfs:comment "The class that represents events, related with the fact of calling a certain command (function) by the user"@en, "Класс, который описывает события команд. Они служат для фиксации факта вызова определенной команды (функции) пользователем."@ru ;
    rdfs:label "CommandEvent"@en, "КомандаСобытие"@ru ;
    rdfs:subClassOf :Event, [
        a owl:Restriction ;
        owl:onProperty :contains ;
        owl:someValuesFrom :Command
    ], [
        a owl:Restriction ;
        owl:onClass :Command ;
        owl:onProperty :wasAssociatedWith ;
        owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger
    ] .

:CommandEvent1113
    a owl:NamedIndividual, :CommandEvent ;
    :contains :CommandA ;
    :isContainedIn :RegionVariation111 ;
    :wasAssociatedWith :CommandA .

:CommandEvent1114
    a owl:NamedIndividual, :CommandEvent ;
    :contains :CommandA ;
    :isContainedIn :RegionVariation111 ;
    :wasAssociatedWith :CommandA .

:CommandEvent2112
    a owl:NamedIndividual, :CommandEvent ;
    :contains :CommandB ;
    :wasAssociatedWith :CommandB .

:Device
    a owl:Class ;
    rdfs:comment "Устройство, на котором выполнялись(ются) сессии."@ru ;
    rdfs:label "Device"@en, "The device on which the sessions were performed."@en, "Устройство"@ru ;
    rdfs:subClassOf [
        a owl:Restriction ;
        owl:onProperty :wasUsedIn ;
        owl:someValuesFrom :Session
    ], [
        a owl:Restriction ;
        owl:maxQualifiedCardinality "1"^^xsd:nonNegativeInteger ;
        owl:onDataRange [
            a rdfs:Datatype ;
            owl:onDatatype xsd:string ;
            owl:withRestrictions ([
                    xsd:minLength "1"^^xsd:int
                ]
            )
        ] ;
        owl:onProperty :hasName
    ], [
        a owl:Restriction ;
        owl:maxQualifiedCardinality "1"^^xsd:nonNegativeInteger ;
        owl:onDataRange [
            a rdfs:Datatype ;
            owl:onDatatype xsd:string ;
            owl:withRestrictions ([
                    xsd:minLength "1"^^xsd:int
                ]
            )
        ] ;
        owl:onProperty :hasUid
    ] .

:Device1
    a owl:NamedIndividual, :Device ;
    :wasUsedIn :Session1, :Session2 .

:DoubleClickMouseEvent
    a owl:Class ;
    rdfs:comment "The class that represents a double mouse click"@en, "Дабл-клик, двойной клик (double click) — два быстрых щелчка по кнопке мыши."@ru ;
    rdfs:label "DoubleClickMouseEvent"@en, "ДвойнойКликМышьДействиеСобытие"@ru ;
    rdfs:subClassOf :ClickMouseActionEvent .

:DoubleTapTouchActionEvent
    a owl:Class ;
    rdfs:comment "The class that represents double tap - two short taps on the screen"@en, "Дабл-тап, дабл-тэп (double tap) — два коротких нажатия пальцем, сродни дабл-клику."@ru ;
    rdfs:label "DoubleTapTouchActionEvent"@en ;
    rdfs:subClassOf :TapTouchActionEvent .

:Event
    a owl:Class ;
    rdfs:comment "The base class for all different kinds of event that may be occured while the user is interacting with the software"@en, "Базовый класс для событий, которые могут происходить при взаимодействии пользователя с программной системой"@ru ;
    rdfs:label "Event"@en, "Событие"@ru ;
    rdfs:subClassOf [
        a owl:Restriction ;
        owl:onProperty :isContainedIn ;
        owl:someValuesFrom :Variation
    ], [
        a owl:Restriction ;
        owl:onDataRange xsd:dateTimeStamp ;
        owl:onProperty :hasDateTime ;
        owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger
    ] .

:Event1111
    a owl:NamedIndividual, :Event ;
    :hasInRegionX 27.0 ;
    :hasInRegionY 625.0 .

:Event1112
    a owl:NamedIndividual, :Event .

:Event1121
    a owl:NamedIndividual, :Event .

:Event1122
    a owl:NamedIndividual, :Event .

:Event2111
    a owl:NamedIndividual, :Event .

:HoldTapTouchActionEvent
    a owl:Class ;
    rdfs:comment "The class that represents touch-and-hold action - continuous touch with a single finger"@en, "Тач-энд-холд (touch and hold) — нажать и держать."@ru ;
    rdfs:label "HoldTapTouchActionEvent"@en ;
    rdfs:subClassOf :TapTouchActionEvent .

:Image
    a owl:Class ;
    rdfs:comment "Class that describes an image of the region variation"@ru, "Класс, описывающий изображение, хранящее внешний вид вариации региона"@ru ;
    rdfs:label "Image"@en, "Изображение"@ru ;
    rdfs:subClassOf [
        a owl:Restriction ;
        owl:onProperty :hasBinaryData ;
        owl:someValuesFrom xsd:base64Binary
    ], [
        a owl:Restriction ;
        owl:onDataRange [
            a rdfs:Datatype ;
            owl:onDatatype xsd:int ;
            owl:withRestrictions ([
                    xsd:minExclusive "0"^^xsd:int
                ]
            )
        ] ;
        owl:onProperty :hasDpiX ;
        owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger
    ], [
        a owl:Restriction ;
        owl:onDataRange [
            a rdfs:Datatype ;
            owl:onDatatype xsd:int ;
            owl:withRestrictions ([
                    xsd:minExclusive "0"^^xsd:int
                ]
            )
        ] ;
        owl:onProperty :hasDpiY ;
        owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger
    ], [
        a owl:Restriction ;
        owl:onDataRange [
            a rdfs:Datatype ;
            owl:onDatatype xsd:double ;
            owl:withRestrictions ([
                    xsd:minInclusive 0.0
                ]
            )
        ] ;
        owl:onProperty :hasHeight ;
        owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger
    ], [
        a owl:Restriction ;
        owl:onDataRange [
            a rdfs:Datatype ;
            owl:onDatatype xsd:double ;
            owl:withRestrictions ([
                    xsd:minInclusive 0.0
                ]
            )
        ] ;
        owl:onProperty :hasWidth ;
        owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger
    ] .

:Image111
    a owl:NamedIndividual, :Image .

:Image112
    a owl:NamedIndividual, :Image .

:Image211
    a owl:NamedIndividual, :Image .

:KeyboardActionEvent
    a owl:Class ;
    rdfs:comment "The class that represents actions related to user's manipulations with a keyboard"@en, "Класс, который описывает событий действий, связанных с манипуляцией пользователя с клавиатурой"@ru ;
    rdfs:label "KeyboardActionEvent"@en, "КлавиатураДействиеСобытие"@ru ;
    rdfs:subClassOf :ActionEvent .

:LongTapTouchActionEvent
    a owl:Class ;
    rdfs:comment "The class that represents touch - a touch that is slightly longer then tap"@en, "Тач (touch) — нажатие длиннее, чем Тап."@ru ;
    rdfs:label "LongTapTouchActionEvent"@en ;
    rdfs:subClassOf :TapTouchActionEvent .

:MouseActionEvent
    a owl:Class ;
    rdfs:comment "The class that represents actions related to user's manipulations with a mouse"@en, "Класс, который описывает события действий, связанных с манипуляцией пользователя с мышью"@ru ;
    rdfs:label "MouseActionEvent"@en, "МышьДействиеСобытие"@ru ;
    rdfs:subClassOf :ActionEvent .

:MoveMouseActionEvent
    a owl:Class ;
    rdfs:comment "The class that represents movements of cursor. hasInRegionX and hasInRegionY properties store information about the new cursor coordinates after the movement"@en, "Класс, который соответствует событию движения курсора мыши. Свойства hasInRegionX и hasInRegionY позволяют указать новые координаты курсора мыши после перемещения"@ru ;
    rdfs:label "MoveMouseAcitonEvent"@en, "ДвижениеМышьДействиеСобытие"@ru ;
    rdfs:subClassOf :MouseActionEvent, [
        a owl:Restriction ;
        owl:onDataRange [
            a rdfs:Datatype ;
            owl:onDatatype xsd:double ;
            owl:withRestrictions ([
                    xsd:minInclusive 0.0
                ]
            )
        ] ;
        owl:onProperty :hasInRegionX ;
        owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger
    ], [
        a owl:Restriction ;
        owl:onDataRange [
            a rdfs:Datatype ;
            owl:onDatatype xsd:double ;
            owl:withRestrictions ([
                    xsd:minInclusive 0.0
                ]
            )
        ] ;
        owl:onProperty :hasInRegionY ;
        owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger
    ] .

:PinchTouchActionEvent
    a owl:Class ;
    rdfs:comment "The class that represents pinch - a contractive movement with two fingers on the screen to scale down the image."@en, "Пинч (pinch) — сжимающее движение одновременно двумя пальцами по экрану для уменьшения изображения."@ru ;
    rdfs:label "PinchTouchActionEvent"@en ;
    rdfs:subClassOf :TouchActionEvent .

:Region
    a owl:Class ;
    rdfs:comment "A fragment of GUI, for example, the whole window, or a part of it"@en, "Область пользовательского интерфейса, например, окно целиком, либо его отдельная часть"@ru ;
    rdfs:label "Region"@en, "Регион"@ru ;
    rdfs:subClassOf [
        a owl:Restriction ;
        owl:onProperty :hasMinHeight ;
        owl:someValuesFrom [
            a rdfs:Datatype ;
            owl:onDatatype xsd:double ;
            owl:withRestrictions ([
                    xsd:minInclusive 0.0
                ]
            )
        ]
    ], [
        a owl:Restriction ;
        owl:onProperty :hasMinWidth ;
        owl:someValuesFrom [
            a rdfs:Datatype ;
            owl:onDatatype xsd:double ;
            owl:withRestrictions ([
                    xsd:minInclusive 0.0
                ]
            )
        ]
    ], [
        a owl:Restriction ;
        owl:onDataRange [
            a rdfs:Datatype ;
            owl:onDatatype xsd:string ;
            owl:withRestrictions ([
                    xsd:minLength "1"^^xsd:int
                ]
            )
        ] ;
        owl:onProperty :hasName ;
        owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger
    ], [
        a owl:Restriction ;
        owl:onProperty :contains ;
        owl:someValuesFrom :Variation
    ], [
        a owl:Restriction ;
        owl:onProperty :isContainedIn ;
        owl:someValuesFrom :Session
    ], [
        a owl:Restriction ;
        owl:onProperty :hasMaxHeight ;
        owl:someValuesFrom [
            a rdfs:Datatype ;
            owl:onDatatype xsd:double ;
            owl:withRestrictions ([
                    xsd:minInclusive 0.0
                ]
            )
        ]
    ], [
        a owl:Restriction ;
        owl:onProperty :hasMaxWidth ;
        owl:someValuesFrom [
            a rdfs:Datatype ;
            owl:onDatatype xsd:double ;
            owl:withRestrictions ([
                    xsd:minInclusive 0.0
                ]
            )
        ]
    ] .

:Region11
    a owl:NamedIndividual, :Region ;
    :contains :RegionVariation111, :RegionVariation112 ;
    :hasName "Region11"^^xsd:string .

:Region21
    a owl:NamedIndividual, :Region ;
    :contains :RegionVariation211 ;
    :hasName "Region21"^^xsd:string .

:RegionVariation111
    a owl:NamedIndividual, :Variation ;
    :contains :CommandEvent1113, :CommandEvent1114, :Event1111, :Event1112 ;
    :hasImage :Image111 ;
    :hasName "RegionVariation111"^^xsd:string .

:RegionVariation112
    a owl:NamedIndividual, :Variation ;
    :hasImage :Image112 .

:RegionVariation211
    a owl:NamedIndividual, :Variation ;
    :contains :CommandEvent2112 ;
    :hasImage :Image211 .

:ScrollMouseActionEvent
    a owl:Class ;
    rdfs:comment "The class that represents a mouse wheel scroll"@en, "Класс, который соответствует событию прокрутки колесика мыши"@ru ;
    rdfs:label "ScrollMouseActionEvent"@en, "ПрокруткаМышьДействиеСобытие"@ru ;
    rdfs:subClassOf :MouseActionEvent .

:Session
    a owl:Class ;
    rdfs:comment "A period of time when a user interacts with the software"@en, "Временной промежуток, в течение которого пользователь взаимодействует с программной системой"@ru ;
    rdfs:label "Session"@en, "Сессия"@ru ;
    rdfs:subClassOf [
        a owl:Restriction ;
        owl:onProperty :contains ;
        owl:someValuesFrom :Region
    ], [
        a owl:Restriction ;
        owl:onClass :User ;
        owl:onProperty :wasPerformedBy ;
        owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger
    ], [
        a owl:Restriction ;
        owl:onClass :Device ;
        owl:onProperty :wasPerformedOn ;
        owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger
    ], [
        a owl:Restriction ;
        owl:onDataRange xsd:dateTimeStamp ;
        owl:onProperty :hasEndDateTime ;
        owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger
    ], [
        a owl:Restriction ;
        owl:onDataRange xsd:dateTimeStamp ;
        owl:onProperty :hasStartDateTime ;
        owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger
    ], [
        a owl:Restriction ;
        owl:maxQualifiedCardinality "1"^^xsd:nonNegativeInteger ;
        owl:onDataRange [
            a rdfs:Datatype ;
            owl:onDatatype xsd:string ;
            owl:withRestrictions ([
                    xsd:minLength "1"^^xsd:int
                ]
            )
        ] ;
        owl:onProperty :hasUid
    ] .

:Session1
    a owl:NamedIndividual, :Session ;
    :contains :Region11 .

:Session2
    a owl:NamedIndividual, :Session ;
    :contains :Region21 .

:SingleClickMouseEvent
    a owl:Class ;
    rdfs:comment "The class that represents a single mouse click"@en, "Клик (click) — одинарный щелчок по кнопке мыши, короткое нажатие."@ru ;
    rdfs:label "SingleClickMouseEvent"@en, "ОдинарныйКликМышьДействиеСобытие"@ru ;
    rdfs:subClassOf :ClickMouseActionEvent .

:SingleTapTouchActionEvent
    a owl:Class ;
    rdfs:comment "The class that represents tap action - single short touch with one finger"@en, "Тап, тэп (tap) — короткое нажатие пальцем, сродни клику."@ru ;
    rdfs:label "SingleTapTouchActionEvent"@en ;
    rdfs:subClassOf :TapTouchActionEvent .

:StretchTouchActionEvent
    a owl:Class ;
    rdfs:comment "The class that represents stretch (pinch it open) - tensile movement with two fingers on the screen to enlarge the image."@en, "Стретч (stretch: для Microsoft), Пинч-ит-опен (pinch it open: для Apple) — растягивающее движение одновременно двумя пальцами по экрану для увеличения изображения."@ru ;
    rdfs:label "StretchTouchActionEvent"@en ;
    rdfs:subClassOf :TouchActionEvent .

:SwipeTouchActionEvent
    a owl:Class ;
    rdfs:comment "The class the represents swipe (slide) - a continuous movement of the finger across the screen"@en, "Свайп (swipe), Слайд (slide) — продолжительное скольжение пальцем по экрану."@ru ;
    rdfs:label "SwipeTouchActionEvent"@en ;
    rdfs:subClassOf :TouchActionEvent, [
        a owl:Restriction ;
        owl:onDataRange [
            a rdfs:Datatype ;
            owl:onDatatype xsd:double ;
            owl:withRestrictions ([
                    xsd:minInclusive 0.0
                ]
            )
        ] ;
        owl:onProperty :hasInRegionX ;
        owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger
    ], [
        a owl:Restriction ;
        owl:onDataRange [
            a rdfs:Datatype ;
            owl:onDatatype xsd:double ;
            owl:withRestrictions ([
                    xsd:minInclusive 0.0
                ]
            )
        ] ;
        owl:onProperty :hasInRegionY ;
        owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger
    ] .

:TapTouchActionEvent
    a owl:Class ;
    rdfs:comment "The class that represents differend kinds events related to user's tap on the touch screen"@en, "Класс, предназначенный для описания различных видов тапов - прикосновений пользователя к экрану одним пальцем без движения"@ru ;
    rdfs:label "TapTouchActionEvent"@en ;
    rdfs:subClassOf :TouchActionEvent, [
        a owl:Restriction ;
        owl:onDataRange [
            a rdfs:Datatype ;
            owl:onDatatype xsd:double ;
            owl:withRestrictions ([
                    xsd:minInclusive 0.0
                ]
            )
        ] ;
        owl:onProperty :hasInRegionX ;
        owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger
    ], [
        a owl:Restriction ;
        owl:onDataRange [
            a rdfs:Datatype ;
            owl:onDatatype xsd:double ;
            owl:withRestrictions ([
                    xsd:minInclusive 0.0
                ]
            )
        ] ;
        owl:onProperty :hasInRegionY ;
        owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger
    ] .

:TouchActionEvent
    a owl:Class ;
    rdfs:comment "The class that represents events related to user interations with touchscreen, like smartphone or tablet PC"@en, "Класс, который описывает события действий, связанных с взаимодействием пользователя с сенсорным экраном (тачскрин, англ. touchscreen), например, дисплеем телефона или планшетного компьютера"@ru ;
    rdfs:label "TouchActionEvent"@en, "КасаниеДействиеСобытие"@ru ;
    rdfs:subClassOf :ActionEvent .

:TypeKeyboardActionEvent
    a owl:Class ;
    rdfs:comment "The class that represents clicks on a keyboard"@en, "Класс, который описывает события нажатия клавиш клавиатуры"@ru ;
    rdfs:label "TypeKeyboardActionEvent"@en, "ВводКлавиатураДействиеСобытие"@ru ;
    rdfs:subClassOf :KeyboardActionEvent .

:User
    a owl:Class ;
    rdfs:comment "The user who runs sessions"@en, "Пользователь, который выполнял(ет) сессии."@ru ;
    rdfs:label "User"@en, "Пользователь"@ru ;
    rdfs:subClassOf [
        a owl:Restriction ;
        owl:onProperty :performed ;
        owl:someValuesFrom :Session
    ], [
        a owl:Restriction ;
        owl:maxQualifiedCardinality "1"^^xsd:nonNegativeInteger ;
        owl:onDataRange [
            a rdfs:Datatype ;
            owl:onDatatype xsd:string ;
            owl:withRestrictions ([
                    xsd:minLength "1"^^xsd:int
                ]
            )
        ] ;
        owl:onProperty :hasName
    ], [
        a owl:Restriction ;
        owl:maxQualifiedCardinality "1"^^xsd:nonNegativeInteger ;
        owl:onDataRange [
            a rdfs:Datatype ;
            owl:onDatatype xsd:string ;
            owl:withRestrictions ([
                    xsd:minLength "1"^^xsd:int
                ]
            )
        ] ;
        owl:onProperty :hasUid
    ] .

:User1
    a owl:NamedIndividual, :User ;
    :hasName "Ivan Ivanov"^^xsd:string ;
    :performed :Session1 .

:User2
    a owl:NamedIndividual, :User ;
    :hasName "Petr Petrov"^^xsd:string ;
    :performed :Session2 .

:Variation
    a owl:Class ;
    rdfs:comment "Class that describes a region variation, since a region may have one or more variations. Variation is a unique combination of region image's height and width, or their range"@en, "Класс предназначен для описания вариации региона, так как каждый регион, в свою очередь, может иметь одну или более вариаций. Под вариацией региона в общем случае может пониматься уникальное сочетание параметров высоты и ширины изображения региона, либо их диапазон"@ru ;
    rdfs:label "Variation"@en, "ВариацияРегиона"@ru ;
    rdfs:subClassOf [
        a owl:Restriction ;
        owl:onProperty :contains ;
        owl:someValuesFrom :Event
    ], [
        a owl:Restriction ;
        owl:onProperty :isContainedIn ;
        owl:someValuesFrom :Region
    ], [
        a owl:Restriction ;
        owl:onClass :Image ;
        owl:onProperty :hasImage ;
        owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger
    ], [
        a owl:Restriction ;
        owl:maxQualifiedCardinality "1"^^xsd:nonNegativeInteger ;
        owl:onDataRange [
            a rdfs:Datatype ;
            owl:onDatatype xsd:double ;
            owl:withRestrictions ([
                    xsd:minInclusive 0.0
                ]
            )
        ] ;
        owl:onProperty :hasMaxHeight
    ], [
        a owl:Restriction ;
        owl:maxQualifiedCardinality "1"^^xsd:nonNegativeInteger ;
        owl:onDataRange [
            a rdfs:Datatype ;
            owl:onDatatype xsd:double ;
            owl:withRestrictions ([
                    xsd:minInclusive 0.0
                ]
            )
        ] ;
        owl:onProperty :hasMaxWidth
    ], [
        a owl:Restriction ;
        owl:maxQualifiedCardinality "1"^^xsd:nonNegativeInteger ;
        owl:onDataRange [
            a rdfs:Datatype ;
            owl:onDatatype xsd:double ;
            owl:withRestrictions ([
                    xsd:minInclusive 0.0
                ]
            )
        ] ;
        owl:onProperty :hasMinHeight
    ], [
        a owl:Restriction ;
        owl:maxQualifiedCardinality "1"^^xsd:nonNegativeInteger ;
        owl:onDataRange [
            a rdfs:Datatype ;
            owl:onDatatype xsd:double ;
            owl:withRestrictions ([
                    xsd:minInclusive 0.0
                ]
            )
        ] ;
        owl:onProperty :hasMinWidth
    ], [
        a owl:Restriction ;
        owl:maxQualifiedCardinality "1"^^xsd:nonNegativeInteger ;
        owl:onDataRange [
            a rdfs:Datatype ;
            owl:onDatatype xsd:string ;
            owl:withRestrictions ([
                    xsd:minLength "1"^^xsd:int
                ]
            )
        ] ;
        owl:onProperty :hasName
    ] .

:contains
    a owl:ObjectProperty, owl:TransitiveProperty ;
    rdfs:comment "A transitive property which determines that some subject contains/stores some object inside of it. Inverse of isContainedIn"@en, "Транзитивное свойство, которое определят, что некий объект содержит/хранит внутря себя какой-либо другой объект"@ru ;
    rdfs:label "contains"@en, "cодержит"@ru ;
    owl:inverseOf :isContainedIn .

:hasBinaryData
    a owl:DatatypeProperty ;
    rdfs:range xsd:base64Binary .

:hasCommandName
    a owl:DatatypeProperty ;
    rdfs:domain :CommandEvent ;
    rdfs:range [
        a rdfs:Datatype ;
        owl:onDatatype xsd:string ;
        owl:withRestrictions ([
                xsd:minLength "1"^^xsd:int
            ]
        )
    ] .

:hasDateTime
    a owl:DatatypeProperty ;
    rdfs:domain :Event ;
    rdfs:range xsd:dateTimeStamp .

:hasDpiX
    a owl:DatatypeProperty ;
    rdfs:domain :Image ;
    rdfs:range [
        a rdfs:Datatype ;
        owl:onDatatype xsd:int ;
        owl:withRestrictions ([
                xsd:minExclusive "0"^^xsd:int
            ]
        )
    ] .

:hasDpiY
    a owl:DatatypeProperty ;
    rdfs:domain :Image ;
    rdfs:range [
        a rdfs:Datatype ;
        owl:onDatatype xsd:int ;
        owl:withRestrictions ([
                xsd:minExclusive "0"^^xsd:int
            ]
        )
    ] .

:hasEndDateTime
    a owl:DatatypeProperty ;
    rdfs:domain :Session ;
    rdfs:range xsd:dateTimeStamp .

:hasHeight
    a owl:DatatypeProperty ;
    rdfs:domain :Image ;
    rdfs:range [
        a rdfs:Datatype ;
        owl:onDatatype xsd:double ;
        owl:withRestrictions ([
                xsd:minInclusive 0.0
            ]
        )
    ] .

:hasImage
    a owl:ObjectProperty ;
    rdfs:comment "The property which associate some region variation with its image"@en, "Свойство которое связывает вариацию региона с его изображением"@ru ;
    rdfs:domain :Variation ;
    rdfs:label "hasImage"@en, "имеетИзображение"@ru ;
    rdfs:range :Image ;
    owl:inverseOf :wasImaged .

:hasInRegionX
    a owl:DatatypeProperty ;
    rdfs:range [
        a rdfs:Datatype ;
        owl:onDatatype xsd:double ;
        owl:withRestrictions ([
                xsd:minInclusive 0.0
            ]
        )
    ] .

:hasInRegionY
    a owl:DatatypeProperty ;
    rdfs:range [
        a rdfs:Datatype ;
        owl:onDatatype xsd:double ;
        owl:withRestrictions ([
                xsd:minInclusive 0.0
            ]
        )
    ] .

:hasMaxHeight
    a owl:DatatypeProperty ;
    rdfs:domain :Variation ;
    rdfs:range [
        a rdfs:Datatype ;
        owl:onDatatype xsd:double ;
        owl:withRestrictions ([
                xsd:minInclusive 0.0
            ]
        )
    ] .

:hasMaxWidth
    a owl:DatatypeProperty ;
    rdfs:domain :Variation ;
    rdfs:range [
        a rdfs:Datatype ;
        owl:onDatatype xsd:double ;
        owl:withRestrictions ([
                xsd:minInclusive 0.0
            ]
        )
    ] .

:hasMinHeight
    a owl:DatatypeProperty ;
    rdfs:domain :Variation ;
    rdfs:range [
        a rdfs:Datatype ;
        owl:onDatatype xsd:double ;
        owl:withRestrictions ([
                xsd:minInclusive 0.0
            ]
        )
    ] .

:hasMinWidth
    a owl:DatatypeProperty ;
    rdfs:domain :Variation ;
    rdfs:range [
        a rdfs:Datatype ;
        owl:onDatatype xsd:double ;
        owl:withRestrictions ([
                xsd:minInclusive 0.0
            ]
        )
    ] .

:hasName
    a owl:DatatypeProperty ;
    rdfs:range [
        a rdfs:Datatype ;
        owl:onDatatype xsd:string ;
        owl:withRestrictions ([
                xsd:minLength "1"^^xsd:int
            ]
        )
    ] .

:hasStartDateTime
    a owl:DatatypeProperty ;
    rdfs:domain :Session ;
    rdfs:range xsd:dateTimeStamp .

:hasUid
    a owl:DatatypeProperty ;
    rdfs:range [
        a rdfs:Datatype ;
        owl:onDatatype xsd:string ;
        owl:withRestrictions ([
                xsd:minLength "1"^^xsd:int
            ]
        )
    ] .

:hasWidth
    a owl:DatatypeProperty ;
    rdfs:domain :Image ;
    rdfs:range [
        a rdfs:Datatype ;
        owl:onDatatype xsd:double ;
        owl:withRestrictions ([
                xsd:minInclusive 0.0
            ]
        )
    ] .

:isContainedIn
    a owl:ObjectProperty, owl:TransitiveProperty ;
    rdfs:comment "A transitive property which determines that some object is contained/stored/located inside of some subject. Inverse of contains"@en, "Транзитивное свойство, которое определяет, что некоторый объект содержится/хранится/находится внутри какого-либо другого объекта"@ru ;
    rdfs:label "isContainedIn"@en, "содержитсяВ"@ru .

:performed
    a owl:ObjectProperty ;
    rdfs:comment "The property that associates a user with a session that he performed"@ru, "Связывает пользователя с сессией, которую он выполнил"@ru ;
    rdfs:domain :User ;
    rdfs:label "performed"@en, "выполнил"@ru ;
    rdfs:range :Session ;
    owl:inverseOf :wasPerformedBy .

:wasAssociatedWith
    a owl:ObjectProperty ;
    rdfs:comment "The property that associates command event with the specific command instance"@en, "Связывает командное событие с экземпляром команды"@ru ;
    rdfs:label "wasAssociatedWith"@en, "связанаС"@ru ;
    owl:inverseOf :wasInvokedIn .

:wasImaged
    a owl:ObjectProperty ;
    rdfs:comment "The property that associates an image with the corresponding region variation"@en, "Связывает изображение с соответствующей вариацией региона"@ru ;
    rdfs:domain :Image ;
    rdfs:label "wasImaged"@en, "изображает"@ru ;
    rdfs:range :Variation .

:wasInvokedIn
    a owl:ObjectProperty ;
    rdfs:comment "The property that associates specific command with the event in which the command was called"@en, "Связывает команду с командным событием, в котором команда была вызвана"@ru ;
    rdfs:label "wasInvokedIn"@en, "былоВызваноВ"@en .

:wasPerformedBy
    a owl:ObjectProperty ;
    rdfs:comment "The property that associates a session with the user who performed it"@en, "Связывает сессию с пользователем, который ее выполнял"@ru ;
    rdfs:domain :Session ;
    rdfs:label "wasPerformedBy"@en, "былаВыполненаПользователем"@ru ;
    rdfs:range :User .

:wasPerformedOn
    a owl:ObjectProperty ;
    rdfs:comment "The property that associates a session with the device on which the session was run"@en, "Связывает сессию с устройством, на котором она выполнялась"@ru ;
    rdfs:domain :Session ;
    rdfs:label "wasPerformedOn"@en, "былаВыполненаНа"@ru ;
    rdfs:range :Device ;
    owl:inverseOf :wasUsedIn .

:wasUsedIn
    a owl:ObjectProperty ;
    rdfs:comment "The property that associates a device with the sessions which were run on that device"@en, "Связывает устройство с сессиями, которые были на нем запущены"@ru ;
    rdfs:domain :Device ;
    rdfs:label "wasUsedIn"@en, "былоИспользованоВ"@ru ;
    rdfs:range :Session .

