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

opkg:autoload a owl:DatatypeProperty ;
    rdfs:label "autoload"@en ;
    IAO:0000115 "Kernel module autoload configuration (which modules to load on boot and in what order)."@en ;
    rdfs:domain opkg:KernelModule ;
    rdfs:isDefinedBy opkg: ;
    rdfs:range xsd:string .

opkg:category a owl:DatatypeProperty ;
    rdfs:label "category"@en ;
    IAO:0000115 "The package category within the feed (e.g., 'Network', 'Utilities', 'Libraries', 'Administration'). Uppercase first letter per OpenWRT convention."@en ;
    rdfs:domain opkg:OpkgPackage ;
    rdfs:isDefinedBy opkg: ;
    rdfs:range xsd:string .

opkg:defaultEnabled a owl:DatatypeProperty ;
    rdfs:label "default enabled"@en ;
    IAO:0000115 "Whether the package is selected by default in the build configuration."@en ;
    rdfs:domain opkg:OpkgPackage ;
    rdfs:isDefinedBy opkg: ;
    rdfs:range xsd:boolean .

opkg:defaultPackages a owl:ObjectProperty ;
    rdfs:label "default packages"@en ;
    IAO:0000115 "Associates a device profile with packages included by default. Defines the baseline package set for a device."@en ;
    rdfs:domain opkg:DeviceProfile ;
    rdfs:isDefinedBy opkg: ;
    rdfs:range opkg:OpkgPackage .

opkg:feed a owl:DatatypeProperty ;
    rdfs:label "feed"@en ;
    IAO:0000115 "The feed containing this package (e.g., 'packages', 'luci', 'routing', 'telephony')."@en ;
    rdfs:domain opkg:OpkgPackage ;
    rdfs:isDefinedBy opkg: ;
    rdfs:range xsd:string .

opkg:flashSize a owl:DatatypeProperty ;
    rdfs:label "flash size"@en ;
    IAO:0000115 "The flash storage size in bytes for this device. Critical constraint for image size — packages must fit within this limit."@en ;
    rdfs:domain opkg:DeviceProfile ;
    rdfs:isDefinedBy opkg: ;
    rdfs:range xsd:integer .

opkg:forTarget a owl:ObjectProperty ;
    rdfs:label "for target"@en ;
    IAO:0000115 "Associates a package with the target platform(s) it is available for."@en ;
    rdfs:domain opkg:OpkgPackage ;
    rdfs:isDefinedBy opkg: ;
    rdfs:range opkg:Target .

opkg:hasProfile a owl:ObjectProperty ;
    rdfs:label "has profile"@en ;
    IAO:0000115 "Associates a subtarget with its device profiles."@en ;
    rdfs:domain opkg:Subtarget ;
    rdfs:isDefinedBy opkg: ;
    rdfs:range opkg:DeviceProfile .

opkg:hasSubtarget a owl:ObjectProperty ;
    rdfs:label "has subtarget"@en ;
    IAO:0000115 "Associates a target with its subtargets."@en ;
    rdfs:domain opkg:Target ;
    rdfs:isDefinedBy opkg: ;
    rdfs:range opkg:Subtarget .

opkg:hasUciConfig a owl:ObjectProperty ;
    rdfs:label "has UCI config"@en ;
    IAO:0000115 "Associates a package with UCI configuration sections it provides. Enables queries like 'what packages are configurable via LuCI'."@en ;
    rdfs:domain opkg:OpkgPackage ;
    rdfs:isDefinedBy opkg: ;
    rdfs:range opkg:UciConfig .

opkg:hidden a owl:DatatypeProperty ;
    rdfs:label "hidden"@en ;
    IAO:0000115 "Whether the package is hidden from menuconfig (selected only as a dependency, never directly by the user)."@en ;
    rdfs:domain opkg:OpkgPackage ;
    rdfs:isDefinedBy opkg: ;
    rdfs:range xsd:boolean .

opkg:inFeed a owl:ObjectProperty ;
    rdfs:label "in feed"@en ;
    IAO:0000115 "Associates a package with the feed repository it belongs to."@en ;
    rdfs:domain opkg:OpkgPackage ;
    rdfs:isDefinedBy opkg: ;
    rdfs:range opkg:Feed .

opkg:maintainer a owl:DatatypeProperty ;
    rdfs:label "maintainer"@en ;
    IAO:0000115 "The package maintainer from PKG_MAINTAINER variable (name and email)."@en ;
    rdfs:comment "Maintainer from control file (semantically prov:wasAttributedTo)"@en ;
    rdfs:domain opkg:OpkgPackage ;
    rdfs:isDefinedBy opkg: ;
    rdfs:range xsd:string .

opkg:menu a owl:DatatypeProperty ;
    rdfs:label "menu"@en ;
    IAO:0000115 "The Kconfig menu path where this package appears in menuconfig."@en ;
    rdfs:domain opkg:OpkgPackage ;
    rdfs:isDefinedBy opkg: ;
    rdfs:range xsd:string .

opkg:parentPackage a owl:ObjectProperty ;
    rdfs:label "parent package"@en ;
    IAO:0000115 "Links a sub-package to the primary package defined in the same Makefile. Multiple 'define Package/<name>' blocks in one Makefile share upstream source but produce separate .ipk binaries."@en ;
    rdfs:domain opkg:OpkgPackage ;
    rdfs:isDefinedBy opkg: ;
    rdfs:range opkg:OpkgPackage .

opkg:pkgRelease a owl:DatatypeProperty ;
    rdfs:label "PKG_RELEASE"@en ;
    IAO:0000115 "The package release number (PKG_RELEASE variable), incremented when the Makefile changes but upstream version doesn't."@en ;
    rdfs:domain opkg:OpkgPackage ;
    rdfs:isDefinedBy opkg: ;
    rdfs:range xsd:string .

opkg:profileDevice a owl:DatatypeProperty ;
    rdfs:label "profile device"@en ;
    IAO:0000115 "The human-readable device name for this profile."@en ;
    rdfs:domain opkg:DeviceProfile ;
    rdfs:isDefinedBy opkg: ;
    rdfs:range xsd:string .

opkg:profileName a owl:DatatypeProperty ;
    rdfs:label "profile name"@en ;
    IAO:0000115 "The device profile identifier (e.g., 'linksys_wrt1900acs', 'tplink_archer-c7-v5')."@en ;
    rdfs:domain opkg:DeviceProfile ;
    rdfs:isDefinedBy opkg: ;
    rdfs:range xsd:string .

opkg:providesKmod a owl:ObjectProperty ;
    rdfs:label "provides kernel module"@en ;
    IAO:0000115 "Associates a package with kernel modules it provides."@en ;
    rdfs:domain opkg:OpkgPackage ;
    rdfs:isDefinedBy opkg: ;
    rdfs:range opkg:KernelModule .

opkg:ramSize a owl:DatatypeProperty ;
    rdfs:label "RAM size"@en ;
    IAO:0000115 "The RAM size in bytes for this device. Constrains which packages can run simultaneously."@en ;
    rdfs:domain opkg:DeviceProfile ;
    rdfs:isDefinedBy opkg: ;
    rdfs:range xsd:integer .

opkg:section a owl:DatatypeProperty ;
    rdfs:label "section"@en ;
    IAO:0000115 "The package section (lowercase categorization used in some feed definitions, e.g., 'net', 'utils', 'libs')."@en ;
    rdfs:domain opkg:OpkgPackage ;
    rdfs:isDefinedBy opkg: ;
    rdfs:range xsd:string .

opkg:sourceMirrorHash a owl:DatatypeProperty ;
    rdfs:label "source mirror hash"@en ;
    IAO:0000115 "The PKG_MIRROR_HASH or PKG_HASH value used to verify the source archive integrity."@en ;
    rdfs:domain opkg:OpkgPackage ;
    rdfs:isDefinedBy opkg: ;
    rdfs:range xsd:string .

opkg:sourceProto a owl:DatatypeProperty ;
    rdfs:label "source protocol"@en ;
    IAO:0000115 "The source fetch protocol from PKG_SOURCE_PROTO variable (e.g., 'git', 'svn'). When absent, HTTP/FTP download is assumed."@en ;
    rdfs:domain opkg:OpkgPackage ;
    rdfs:isDefinedBy opkg: ;
    rdfs:range xsd:string .

opkg:sourceUrl a owl:DatatypeProperty ;
    rdfs:label "source URL"@en ;
    IAO:0000115 "The source download URL from PKG_SOURCE_URL variable. Identifies the upstream source origin."@en ;
    rdfs:domain opkg:OpkgPackage ;
    rdfs:isDefinedBy opkg: ;
    rdfs:range xsd:string .

opkg:subtargetName a owl:DatatypeProperty ;
    rdfs:label "subtarget name"@en ;
    IAO:0000115 "The subtarget identifier within a target (e.g., 'generic', 'nand', 'tiny')."@en ;
    rdfs:domain opkg:Subtarget ;
    rdfs:isDefinedBy opkg: ;
    rdfs:range xsd:string .

opkg:targetName a owl:DatatypeProperty ;
    rdfs:label "target name"@en ;
    IAO:0000115 "The target platform identifier (e.g., 'ath79', 'ramips', 'x86')."@en ;
    rdfs:domain opkg:Target ;
    rdfs:isDefinedBy opkg: ;
    rdfs:range xsd:string .

opkg:title a owl:DatatypeProperty ;
    rdfs:label "title"@en ;
    IAO:0000115 "The package title from the 'define Package/<name>' block — a short one-line description for package managers."@en ;
    rdfs:domain opkg:OpkgPackage ;
    rdfs:isDefinedBy opkg: ;
    rdfs:range xsd:string .

opkg:url a owl:DatatypeProperty ;
    rdfs:label "URL"@en ;
    IAO:0000115 "The upstream project URL from the URL field in the 'define Package' block."@en ;
    rdfs:domain opkg:OpkgPackage ;
    rdfs:isDefinedBy opkg: ;
    rdfs:range xsd:anyURI .

opkg:Feed a owl:Class ;
    rdfs:label "Package Feed"@en ;
    IAO:0000115 "A package feed repository containing OpenWRT packages, organized by category (e.g., packages, luci, routing, telephony). Feeds are git repositories that are compiled into an opkg-compatible package index."@en ;
    rdfs:comment "An OpenWRT package feed repository"@en ;
    rdfs:isDefinedBy opkg: ;
    rdfs:subClassOf pkg:Repository .

opkg:UciConfig a owl:Class ;
    rdfs:label "UCI Configuration"@en ;
    IAO:0000115 "A UCI (Unified Configuration Interface) configuration section integrated with this package, allowing web-based (LuCI) or CLI (uci) management. UCI provides a uniform configuration abstraction across OpenWRT packages."@en ;
    rdfs:comment "A Unified Configuration Interface definition"@en ;
    rdfs:isDefinedBy opkg: ;
    rdfs:subClassOf owl:Thing .

opkg:KernelModule a owl:Class ;
    rdfs:label "Kernel Module Package"@en ;
    IAO:0000115 "A package providing a Linux kernel module (kmod-* prefix), with autoload configuration and dependency tracking. Kernel modules are version-locked to the running kernel and rebuilt on each kernel update."@en ;
    rdfs:comment "An OpenWRT kernel module package (kmod-*)"@en ;
    rdfs:isDefinedBy opkg: ;
    rdfs:subClassOf opkg:OpkgPackage .

opkg:Subtarget a owl:Class ;
    rdfs:label "Subtarget"@en ;
    IAO:0000115 "A subtarget within a target platform, specifying the exact SoC variant (e.g., 'generic', 'nand', 'tiny'). Subtargets determine kernel configuration and available device profiles."@en ;
    rdfs:comment "An OpenWRT subtarget within a target platform"@en ;
    rdfs:isDefinedBy opkg: ;
    rdfs:subClassOf opkg:Target .

opkg:Target a owl:Class ;
    rdfs:label "Target"@en ;
    IAO:0000115 "A target platform defining the SoC family and board support (e.g., 'ath79' for Atheros/Qualcomm AR7xxx/AR9xxx, 'ramips' for MediaTek/Ralink). Targets contain subtargets for specific chip variants."@en ;
    rdfs:comment "An OpenWRT target platform"@en ;
    rdfs:isDefinedBy opkg: ;
    rdfs:subClassOf pkg:Architecture .

opkg:DeviceProfile a owl:Class ;
    rdfs:label "Device Profile"@en ;
    IAO:0000115 "A device-specific build profile defining the hardware model (e.g., 'linksys_wrt1900acs'), default packages, flash layout, and device tree. Device profiles are the most specific hardware target."@en ;
    rdfs:comment "An OpenWRT device-specific build profile"@en ;
    rdfs:isDefinedBy opkg: ;
    rdfs:subClassOf prov:Entity .

opkg:OpkgPackage a owl:Class ;
    rdfs:label "OpenWRT Package"@en ;
    IAO:0000115 "A package defined in an OpenWRT feed repository via a Makefile, compiled as an opkg (.ipk) binary for router/IoT targets. A single Makefile can define multiple sub-packages via separate 'define Package/<name>' blocks, all sharing the same upstream source."@en ;
    rdfs:comment "An OpenWRT package from a feed repository"@en ;
    rdfs:isDefinedBy opkg: ;
    rdfs:subClassOf pkg:BinaryPackage .

opkg: a owl:Ontology ;
    rdfs:label "OpenWRT Package Ontology"@en ;
    dcterms:abstract "Models the OpenWRT/LEDE embedded Linux distribution for routers and IoT devices, including package feeds (packages, luci, routing, telephony), Makefile-based package definitions, kernel modules (kmod-*), UCI configuration integration, targets/subtargets for hardware, and opkg package format. OpenWRT Makefiles can define multiple sub-packages from a single source." ;
    dcterms:created "2026-04-17"^^xsd:date ;
    dcterms:license <https://creativecommons.org/publicdomain/zero/1.0/> ;
    dcterms:modified "2026-04-21"^^xsd:date ;
    rdfs:comment "Ontology for representing OpenWRT packages and feed repositories"@en ;
    rdfs:isDefinedBy opkg: ;
    rdfs:seeAlso <https://purl.org/packagegraph/ontology/opkg/shapes> ;
    owl:imports pkg: ;
    owl:priorVersion <https://purl.org/packagegraph/ontology/opkg/0.6.0> ;
    owl:versionIRI <https://purl.org/packagegraph/ontology/opkg/0.7.0> ;
    owl:versionInfo "0.7.0" .

