@prefix IAO: <http://purl.obolibrary.org/obo/IAO_> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix pkg: <https://purl.org/packagegraph/ontology/core#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix snap: <https://purl.org/packagegraph/ontology/snap#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

snap:appCommand a owl:DatatypeProperty ;
    rdfs:label "app command"@en ;
    IAO:0000115 "The command executed when the snap application is launched."@en ;
    rdfs:domain snap:SnapApp ;
    rdfs:isDefinedBy snap: ;
    rdfs:range xsd:string .

snap:confinement a owl:DatatypeProperty ;
    rdfs:label "confinement"@en ;
    IAO:0000115 "The sandboxing level: 'strict' (full confinement), 'devmode' (non-enforcing), or 'classic' (traditional access)."@en ;
    rdfs:domain snap:SnapPackage ;
    rdfs:isDefinedBy snap: ;
    rdfs:range xsd:string .

snap:exposesApp a owl:ObjectProperty ;
    rdfs:label "exposes app"@en ;
    IAO:0000115 "Associates a snap with an application or daemon it exposes."@en ;
    rdfs:domain snap:SnapPackage ;
    rdfs:isDefinedBy snap: ;
    rdfs:range snap:SnapApp .

snap:grade a owl:DatatypeProperty ;
    rdfs:label "grade"@en ;
    IAO:0000115 "The quality grade: 'stable' (release-ready) or 'devel' (not for production channels)."@en ;
    rdfs:domain snap:SnapPackage ;
    rdfs:isDefinedBy snap: ;
    rdfs:range xsd:string .

snap:inChannel a owl:ObjectProperty ;
    rdfs:label "in channel"@en ;
    IAO:0000115 "Associates a snap with the channel it is published to."@en ;
    rdfs:domain snap:SnapPackage ;
    rdfs:isDefinedBy snap: ;
    rdfs:range snap:SnapChannel .

snap:interfaceName a owl:DatatypeProperty ;
    rdfs:label "interface name"@en ;
    IAO:0000115 "The name of the interface type (e.g., 'network', 'home', 'camera', 'x11')."@en ;
    rdfs:domain snap:Interface ;
    rdfs:isDefinedBy snap: ;
    rdfs:range xsd:string .

snap:isAutoConnect a owl:DatatypeProperty ;
    rdfs:label "auto-connect"@en ;
    IAO:0000115 "Whether the interface is automatically connected on install (vs requiring manual connection)."@en ;
    rdfs:domain snap:Interface ;
    rdfs:isDefinedBy snap: ;
    rdfs:range xsd:boolean .

snap:isDaemon a owl:DatatypeProperty ;
    rdfs:label "is daemon"@en ;
    IAO:0000115 "Whether the app runs as a system daemon (service) rather than a user-facing application."@en ;
    rdfs:domain snap:SnapApp ;
    rdfs:isDefinedBy snap: ;
    rdfs:range xsd:boolean .

snap:plugsInterface a owl:ObjectProperty ;
    rdfs:label "plugs interface"@en ;
    IAO:0000115 "The snap consumes (plugs) this interface, requesting access to a resource."@en ;
    rdfs:domain snap:SnapPackage ;
    rdfs:isDefinedBy snap: ;
    rdfs:range snap:Interface .

snap:revision a owl:DatatypeProperty ;
    rdfs:label "revision"@en ;
    IAO:0000115 "The store-assigned revision number, incremented on each upload. The snap revision is the store's notion of version identity."@en ;
    rdfs:domain snap:SnapPackage ;
    rdfs:isDefinedBy snap: ;
    rdfs:range xsd:integer .

snap:risk a owl:DatatypeProperty ;
    rdfs:label "risk"@en ;
    IAO:0000115 "The risk level: 'stable', 'candidate', 'beta', or 'edge'."@en ;
    rdfs:domain snap:SnapChannel ;
    rdfs:isDefinedBy snap: ;
    rdfs:range xsd:string .

snap:slotsInterface a owl:ObjectProperty ;
    rdfs:label "slots interface"@en ;
    IAO:0000115 "The snap provides (slots) this interface, offering a resource to other snaps."@en ;
    rdfs:domain snap:SnapPackage ;
    rdfs:isDefinedBy snap: ;
    rdfs:range snap:Interface .

snap:snapId a owl:DatatypeProperty,
        owl:FunctionalProperty ;
    rdfs:label "snap ID"@en ;
    IAO:0000115 "The globally unique identifier assigned by the Snap Store to this snap name."@en ;
    rdfs:domain snap:SnapPackage ;
    rdfs:isDefinedBy snap: ;
    rdfs:range xsd:string .

snap:track a owl:DatatypeProperty ;
    rdfs:label "track"@en ;
    IAO:0000115 "The track name (e.g., 'latest', '1.0', 'lts'), representing a major version or release line."@en ;
    rdfs:domain snap:SnapChannel ;
    rdfs:isDefinedBy snap: ;
    rdfs:range xsd:string .

snap:usesBase a owl:ObjectProperty ;
    rdfs:label "uses base"@en ;
    IAO:0000115 "Associates a snap with the base snap providing its root filesystem."@en ;
    rdfs:domain snap:SnapPackage ;
    rdfs:isDefinedBy snap: ;
    rdfs:range snap:SnapBase .

snap:SnapBase a owl:Class ;
    rdfs:label "Snap Base"@en ;
    IAO:0000115 "A special snap providing the root filesystem and core libraries for other snaps (e.g., core22 based on Ubuntu 22.04)."@en ;
    rdfs:comment "A base snap providing the root filesystem"@en ;
    rdfs:isDefinedBy snap: .

snap:SnapApp a owl:Class ;
    rdfs:label "Snap App"@en ;
    IAO:0000115 "A named application or daemon exposed by the snap, with its own command, environment, and interface connections."@en ;
    rdfs:comment "An application exposed by a snap"@en ;
    rdfs:isDefinedBy snap: .

snap:SnapChannel a owl:Class ;
    rdfs:label "Snap Channel"@en ;
    IAO:0000115 "A channel in the Snap Store's track/risk/branch hierarchy (e.g., 'latest/stable', '3.x/beta'), controlling which version users receive."@en ;
    rdfs:comment "A release channel (track/risk/branch)"@en ;
    rdfs:isDefinedBy snap: .

snap:Interface a owl:Class ;
    rdfs:label "Interface"@en ;
    IAO:0000115 "A security policy interface that mediates access between snaps, connecting a plug (consumer) to a slot (provider) for a specific resource (e.g., network, camera, home)."@en ;
    rdfs:comment "A snap interface connecting plugs and slots"@en ;
    rdfs:isDefinedBy snap: .

snap:SnapPackage a owl:Class ;
    rdfs:label "Snap Package"@en ;
    IAO:0000115 "A self-contained application package in Snap format, distributed through the Snap Store, with built-in sandboxing via AppArmor and seccomp."@en ;
    rdfs:comment "A snap package (.snap)"@en ;
    rdfs:isDefinedBy snap: ;
    rdfs:subClassOf pkg:BinaryPackage .

snap: a owl:Ontology ;
    rdfs:label "Snap Package Ontology"@en ;
    dcterms:abstract "Models the Snap ecosystem including confinement levels, interfaces (plugs and slots), channels/tracks, bases, and the Snap Store. Captures the security model and automatic update mechanism unique to Snaps." ;
    dcterms:created "2026-04-14"^^xsd:date ;
    dcterms:license <https://creativecommons.org/publicdomain/zero/1.0/> ;
    dcterms:modified "2026-04-21"^^xsd:date ;
    rdfs:comment "Ontology for representing Snap packages and the Snap Store"@en ;
    rdfs:isDefinedBy snap: ;
    rdfs:seeAlso <https://purl.org/packagegraph/ontology/snap/shapes> ;
    owl:imports pkg: ;
    owl:priorVersion <https://purl.org/packagegraph/ontology/snap/0.6.0> ;
    owl:versionIRI <https://purl.org/packagegraph/ontology/snap/0.7.0> ;
    owl:versionInfo "0.7.0" .

