@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix : <https://solid.ti.rw.fau.de/public/ns/arena#> .
@prefix ldp: <http://www.w3.org/ns/ldp#> .
@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#> .

ldp:BasicContainer
    a owl:Class .

<https://solid.ti.rw.fau.de/public/ns/arena#>
    a owl:Ontology ;
    rdfs:label "ARENA Vocabulary"@en .

:Artifact
    a owl:Class ;
    rdfs:label "Artifact"@en .

:Event
    a owl:Class ;
    rdfs:label "Event"@en .

:EventContainer
    a owl:Class ;
    rdfs:label "Event Container"@en ;
    rdfs:subClassOf ldp:BasicContainer .

:Information
    a owl:Class ;
    rdfs:label "Information"@en .

:InformationContainer
    a owl:Class ;
    rdfs:label "Information Container"@en ;
    rdfs:subClassOf ldp:BasicContainer .

:Order
    a owl:Class ;
    rdfs:label "Order"@en .

:OrderContainer
    a owl:Class ;
    rdfs:label "Order Container"@en ;
    rdfs:subClassOf ldp:BasicContainer .

:Port
    a owl:Class ;
    rdfs:label "Port"@en .

:PortTask
    a owl:Class ;
    rdfs:label "Port Task"@en ;
    rdfs:subClassOf :Task .

:Product
    a owl:Class ;
    rdfs:label "Product"@en .

:ProductAttribute
    a owl:Class ;
    rdfs:label "Product Attribute"@en .

:ProductAttributeContainer
    a owl:Class ;
    rdfs:label "Product Attribute Container"@en ;
    rdfs:subClassOf ldp:BasicContainer .

:ProductAttributeKind
    a owl:Class ;
    rdfs:label "Product Attribute Kind"@en .

:ProductAttributeKindContainer
    a owl:Class ;
    rdfs:label "Product Attribute Kind Container"@en ;
    rdfs:subClassOf ldp:BasicContainer .

:ProductContainer
    a owl:Class ;
    rdfs:label "Product Container"@en ;
    rdfs:subClassOf ldp:BasicContainer .

:ProductFamily
    a owl:Class ;
    rdfs:label "Product Family"@en .

:ProductFamilyContainer
    a owl:Class ;
    rdfs:label "Product Family Container"@en ;
    rdfs:subClassOf ldp:BasicContainer .

:ProductInterface
    a owl:Class ;
    rdfs:label "Product Interface"@en .

:ProductInterfaceContainer
    a owl:Class ;
    rdfs:label "Product Interface Container"@en ;
    rdfs:subClassOf ldp:BasicContainer .

:ProductKind
    a owl:Class ;
    rdfs:label "Product Kind"@en .

:ProductKindContainer
    a owl:Class ;
    rdfs:label "Product Kind Container"@en ;
    rdfs:subClassOf ldp:BasicContainer .

:PropertyContainer
    a owl:Class ;
    rdfs:label "Property Container"@en ;
    rdfs:subClassOf ldp:BasicContainer .

:Recipe
    a owl:Class ;
    rdfs:label "Recipe"@en .

:RecipeContainer
    a owl:Class ;
    rdfs:label "Recipe Container"@en ;
    rdfs:subClassOf ldp:BasicContainer .

:RootContainer
    a owl:Class ;
    rdfs:label "Root Container"@en ;
    rdfs:subClassOf ldp:BasicContainer .

:Shopfloor
    a owl:Class ;
    rdfs:label "Shopfloor"@en ;
    rdfs:subClassOf [
        a owl:Restriction ;
        owl:onDataRange xsd:integer ;
        owl:onProperty :sizeX ;
        owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger
    ], [
        a owl:Restriction ;
        owl:onDataRange xsd:integer ;
        owl:onProperty :sizeY ;
        owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger
    ] .

:Skill
    a owl:Class ;
    rdfs:label "Skill"@en .

:SkillContainer
    a owl:Class ;
    rdfs:label "Skill Container"@en ;
    rdfs:subClassOf ldp:BasicContainer .

:Status
    a owl:Class ;
    rdfs:label "State"@en ;
    owl:equivalentClass [
        a owl:Class ;
        owl:oneOf (:busy
            :error
            :idle
        )
    ] .

:Task
    a owl:Class ;
    rdfs:label "Task"@en .

:TaskContainer
    a owl:Class ;
    rdfs:label "Task Container"@en ;
    rdfs:subClassOf ldp:BasicContainer .

:TaskStatus
    a owl:Class ;
    rdfs:label "Task Status"@en ;
    owl:equivalentClass [
        a owl:Class ;
        owl:oneOf (:active
            :done
            :failed
            :waiting
        )
    ] .

:Tool
    a owl:Class ;
    rdfs:label "Tool"@en .

:ToolKind
    a owl:Class ;
    rdfs:label "Tool Kind"@en .

:Transporter
    a owl:Class ;
    rdfs:label "Transporter"@en ;
    rdfs:subClassOf :Artifact .

:TransporterContainer
    a owl:Class ;
    rdfs:label "Transporter Container"@en ;
    rdfs:subClassOf ldp:BasicContainer .

:TransporterTask
    a owl:Class ;
    rdfs:label "Transporter Task"@en ;
    rdfs:subClassOf :Task .

:Workstation
    a owl:Class ;
    rdfs:label "Workstation"@en ;
    rdfs:subClassOf :Artifact .

:WorkstationContainer
    a owl:Class ;
    rdfs:label "Workstation Container"@en ;
    rdfs:subClassOf ldp:BasicContainer .

:WorkstationTask
    a owl:Class ;
    rdfs:label "Workstation Task"@en ;
    rdfs:subClassOf :Task .

:active
    a owl:NamedIndividual .

:activeTask
    a owl:ObjectProperty ;
    rdfs:domain :Artifact ;
    rdfs:label "Active Task"@en ;
    rdfs:range :Task .

:assembly
    a owl:ObjectProperty ;
    rdfs:domain :Product ;
    rdfs:label "Assembly"@en ;
    rdfs:range :Product .

:attributes
    a owl:ObjectProperty ;
    rdfs:domain [
        a owl:Class ;
        owl:unionOf (:Order
            :ProductKind
        )
    ] ;
    rdfs:label "Attributes"@en ;
    rdfs:range :ProductAttribute .

:baseProcessingTime
    a owl:DatatypeProperty ;
    rdfs:domain :Recipe ;
    rdfs:label "Base Processing Time"@en ;
    rdfs:range xsd:integer .

:busy
    a owl:NamedIndividual .

:capacity
    a owl:DatatypeProperty ;
    rdfs:domain [
        a owl:Class ;
        owl:unionOf (:Port
            :Transporter
        )
    ] ;
    rdfs:label "Capacity"@en ;
    rdfs:range xsd:integer .

:deadline
    a owl:DatatypeProperty ;
    rdfs:domain :Order ;
    rdfs:range xsd:dateTimeStamp .

:done
    a owl:NamedIndividual .

:endTime
    a owl:DatatypeProperty ;
    rdfs:domain :Task ;
    rdfs:label "End Time"@en ;
    rdfs:range xsd:dateTimeStamp .

:error
    a owl:NamedIndividual .

:events
    a owl:ObjectProperty ;
    rdfs:domain :Artifact ;
    rdfs:label "events"@en ;
    rdfs:range :EventContainer .

:failed
    a owl:NamedIndividual .

:family
    a owl:ObjectProperty ;
    rdfs:domain :ProductKind ;
    rdfs:label "Product Family"@en ;
    rdfs:range :ProductFamily .

:fittingProductKinds
    a owl:ObjectProperty ;
    rdfs:domain :ProductInterface ;
    rdfs:label "Fitting Product Kinds"@en ;
    rdfs:range :ProductKind .

:idle
    a owl:NamedIndividual .

:information
    a owl:ObjectProperty ;
    rdfs:domain :Artifact ;
    rdfs:label "information"@en ;
    rdfs:range :InformationContainer .

:inputPort
    a owl:ObjectProperty ;
    rdfs:domain :Workstation ;
    rdfs:label "Input Port"@en ;
    rdfs:range :Port .

:inputProduct
    a owl:ObjectProperty ;
    rdfs:domain :Task ;
    rdfs:label "Input Product"@en ;
    rdfs:range :Product .

:interfaces
    a owl:ObjectProperty ;
    rdfs:domain :ProductKind ;
    rdfs:label "Interfaces"@en ;
    rdfs:range :ProductInterface .

:locationX
    a owl:DatatypeProperty ;
    rdfs:domain [
        a owl:Class ;
        owl:unionOf (:Artifact
            :Port
            :Product
            :Tool
        )
    ] ;
    rdfs:label "Location X"@en ;
    rdfs:range xsd:integer .

:locationY
    a owl:DatatypeProperty ;
    rdfs:domain [
        a owl:Class ;
        owl:unionOf (:Artifact
            :Port
            :Product
            :Tool
        )
    ] ;
    rdfs:label "Location Y"@en ;
    rdfs:range xsd:integer .

:name
    a owl:DatatypeProperty ;
    rdfs:domain :ProductAttribute ;
    rdfs:label "Name"@en ;
    rdfs:range xsd:string .

:order
    a owl:ObjectProperty ;
    rdfs:domain :WorkstationTask ;
    rdfs:label "Order"@en ;
    rdfs:range :Order .

:orders
    a owl:FunctionalProperty, owl:ObjectProperty ;
    rdfs:domain :RootContainer ;
    rdfs:label "orders"@en ;
    rdfs:range :OrderContainer .

:outputPort
    a owl:ObjectProperty ;
    rdfs:domain :Workstation ;
    rdfs:range :Port .

:output_Product
    a owl:ObjectProperty ;
    rdfs:domain :Task ;
    rdfs:label "Output Product"@en ;
    rdfs:range :Product .

:parts
    a owl:ObjectProperty ;
    rdfs:domain :Order ;
    rdfs:label "Parts"@en ;
    rdfs:range :ProductKind .

:priority
    a owl:DatatypeProperty, owl:FunctionalProperty ;
    rdfs:comment "priority" ;
    rdfs:domain :Task ;
    rdfs:range xsd:int .

:product
    a owl:ObjectProperty ;
    rdfs:domain [
        a owl:Class ;
        owl:unionOf (:Port
            :Transporter
        )
    ] ;
    rdfs:label "product"@en ;
    rdfs:range :Product .

:productAttributeKind
    a owl:ObjectProperty ;
    rdfs:domain :ProductAttribute ;
    rdfs:range :ProductAttributeKind .

:productAttributeKinds
    a owl:FunctionalProperty, owl:ObjectProperty ;
    rdfs:domain :RootContainer ;
    rdfs:label "Product Attribute Kinds"@en ;
    rdfs:range :ProductAttributeKindContainer .

:productAttributes
    a owl:ObjectProperty ;
    rdfs:domain :RootContainer ;
    rdfs:label "Product Attributes"@en ;
    rdfs:range :ProductAttributeContainer .

:productFamilies
    a owl:ObjectProperty ;
    rdfs:domain :RootContainer ;
    rdfs:label "Product Families"@en ;
    rdfs:range :ProductFamilyContainer .

:productInterfaces
    a owl:ObjectProperty ;
    rdfs:domain :RootContainer ;
    rdfs:label "Product Interfaces"@en ;
    rdfs:range :ProductInterfaceContainer .

:productKind
    a owl:ObjectProperty ;
    rdfs:domain [
        a owl:Class ;
        owl:unionOf (:Order
            :Product
        )
    ] ;
    rdfs:label "Product Kind"@en ;
    rdfs:range :ProductKind .

:productKinds
    a owl:ObjectProperty ;
    rdfs:domain :RootContainer ;
    rdfs:label "Product Kinds"@en ;
    rdfs:range :ProductKindContainer .

:products
    a owl:FunctionalProperty, owl:ObjectProperty ;
    rdfs:domain :RootContainer ;
    rdfs:label "products"@en ;
    rdfs:range :ProductContainer .

:properties
    a owl:FunctionalProperty, owl:ObjectProperty ;
    rdfs:domain :Artifact ;
    rdfs:label "properties"@en ;
    rdfs:range :PropertyContainer .

:recipe
    a owl:ObjectProperty ;
    rdfs:domain :WorkstationTask ;
    rdfs:label "Recipe"@en ;
    rdfs:range :Recipe .

:recipes
    a owl:FunctionalProperty, owl:ObjectProperty ;
    rdfs:domain :RootContainer ;
    rdfs:label "recipes"@en ;
    rdfs:range :RecipeContainer .

:requiredAttributes
    a owl:ObjectProperty ;
    rdfs:domain :Order ;
    rdfs:label "required Attributes"@en ;
    rdfs:range :ProductAttribute .

:requiredParts
    a owl:ObjectProperty ;
    rdfs:domain :Order ;
    rdfs:label "required Parts"@en ;
    rdfs:range :ProductKind .

:requiredProductKind
    a owl:FunctionalProperty, owl:ObjectProperty ;
    rdfs:domain :Order ;
    rdfs:label "required Product Kinds"@en ;
    rdfs:range :ProductKind .

:requiresProduct
    a owl:ObjectProperty ;
    rdfs:domain :Recipe ;
    rdfs:label "Requires Product"@en ;
    rdfs:range :ProductKind .

:requiresSkill
    a owl:ObjectProperty ;
    rdfs:domain :Recipe ;
    rdfs:label "Requires Skill"@en ;
    rdfs:range :Skill .

:requiresTool
    a owl:ObjectProperty ;
    rdfs:domain :Recipe ;
    rdfs:label "Requires Tool"@en ;
    rdfs:range :ToolKind .

:shopfloor
    a owl:FunctionalProperty, owl:ObjectProperty ;
    rdfs:domain :RootContainer ;
    rdfs:label "Shopfloor"@en ;
    rdfs:range :Shopfloor .

:sizeX
    a owl:DatatypeProperty ;
    rdfs:domain :Shopfloor ;
    rdfs:label "Size X"@en ;
    rdfs:range xsd:integer .

:sizeY
    a owl:DatatypeProperty ;
    rdfs:domain :Shopfloor ;
    rdfs:label "Size Y"@en ;
    rdfs:range xsd:integer .

:skill
    a owl:ObjectProperty ;
    rdfs:domain :Workstation ;
    rdfs:label "Skill"@en ;
    rdfs:range :Skill .

:skills
    a owl:FunctionalProperty, owl:ObjectProperty ;
    rdfs:domain :RootContainer ;
    rdfs:label "Skills"@en ;
    rdfs:range :SkillContainer .

:speed
    a owl:DatatypeProperty ;
    rdfs:domain :Transporter ;
    rdfs:range xsd:integer .

:stackable
    a owl:DatatypeProperty ;
    rdfs:domain :ProductAttribute ;
    rdfs:label "Stackable"@en ;
    rdfs:range xsd:boolean .

:startTime
    a owl:DatatypeProperty ;
    rdfs:domain :Task ;
    rdfs:label "Start Time"@en ;
    rdfs:range xsd:dateTimeStamp .

:status
    a owl:ObjectProperty ;
    rdfs:domain :Artifact ;
    rdfs:label "Status"@en ;
    rdfs:range :Status .

:taskStatus
    a owl:FunctionalProperty, owl:ObjectProperty ;
    rdfs:domain :Task .

:tasks
    a owl:ObjectProperty ;
    rdfs:domain :Artifact ;
    rdfs:label "Tasks"@en ;
    rdfs:range :TaskContainer .

:toLocationX
    a owl:DatatypeProperty ;
    rdfs:domain :TransporterTask ;
    rdfs:label "To Location X"@en ;
    rdfs:range xsd:integer .

:toLocationY
    a owl:DatatypeProperty ;
    rdfs:domain :TransporterTask ;
    rdfs:label "To Location Y"@en ;
    rdfs:range xsd:integer .

:toolKind
    a owl:ObjectProperty ;
    rdfs:domain :Tool ;
    rdfs:label "Tool Kind"@en ;
    rdfs:range :ToolKind .

:transporters
    a owl:FunctionalProperty, owl:ObjectProperty ;
    rdfs:domain :RootContainer ;
    rdfs:label "Transporters"@en ;
    rdfs:range :TransporterContainer .

:value
    a owl:DatatypeProperty ;
    rdfs:domain :ProductAttribute ;
    rdfs:label "Value"@en .

:waiting
    a owl:NamedIndividual .

:workstations
    a owl:FunctionalProperty, owl:ObjectProperty ;
    rdfs:domain :RootContainer ;
    rdfs:label "Workstations"@en ;
    rdfs:range :WorkstationContainer .

:yieldsProduct
    a owl:ObjectProperty ;
    rdfs:domain :Recipe ;
    rdfs:label "Yields Product"@en ;
    rdfs:range :ProductKind .

