@prefix ex: <https://example.com/versioning/> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix ver: <https://ontology.inferal.com/modules/versioning/> .

ex:numeric-core
    a ver:NumericComponentOrdering ;
    rdfs:label "Numeric component ordering with ignored suffixes" .

ex:v1-0
    a ver:ComponentVersionIdentifier ;
    ver:versionText "1.0" ;
    ver:versionMajor 1 ;
    ver:versionMinor 0 ;
    ver:versionPatch 0 ;
    ver:inVersionOrdering ex:numeric-core .

ex:v1-5-alpha
    a ver:ComponentVersionIdentifier ;
    ver:versionText "1.5-alpha" ;
    ver:versionMajor 1 ;
    ver:versionMinor 5 ;
    ver:versionPatch 0 ;
    ver:versionSuffix "alpha" ;
    ver:inVersionOrdering ex:numeric-core ;
    ver:greaterThanVersion ex:v1-0 .

ex:v2-0-0
    a ver:ComponentVersionIdentifier ;
    ver:versionText "2.0.0" ;
    ver:versionMajor 2 ;
    ver:versionMinor 0 ;
    ver:versionPatch 0 ;
    ver:inVersionOrdering ex:numeric-core ;
    ver:greaterThanVersion ex:v1-5-alpha .

ex:range-1-x
    a ver:VersionRange ;
    ver:lowerBound ex:v1-0 ;
    ver:lowerInclusive true ;
    ver:upperBound ex:v2-0-0 ;
    ver:upperInclusive false .

################################################################################
# Transitive dependency solvability
#
# The Versioning Ontology does not define package or dependency terms. This
# example uses local ex: terms for a package graph and uses ver:VersionRange plus
# ver:includesVersion to select candidate dependency versions that satisfy every
# applicable direct and transitive requirement.
################################################################################

ex:api-order
    a ver:NumericComponentOrdering ;
    rdfs:label "Example API package ordering" .

ex:runtime-order
    a ver:NumericComponentOrdering ;
    rdfs:label "Example runtime package ordering" .

ex:adapter-order
    a ver:NumericComponentOrdering ;
    rdfs:label "Example adapter package ordering" .

ex:plugin-order
    a ver:NumericComponentOrdering ;
    rdfs:label "Example plugin package ordering" .

ex:api-v2-0
    a ver:ComponentVersionIdentifier ;
    ver:versionText "2.0.0" ;
    ver:versionMajor 2 ;
    ver:versionMinor 0 ;
    ver:versionPatch 0 ;
    ver:inVersionOrdering ex:api-order .

ex:api-v2-5
    a ver:ComponentVersionIdentifier ;
    ver:versionText "2.5.0" ;
    ver:versionMajor 2 ;
    ver:versionMinor 5 ;
    ver:versionPatch 0 ;
    ver:inVersionOrdering ex:api-order ;
    ver:greaterThanVersion ex:api-v2-0 .

ex:api-v3-0
    a ver:ComponentVersionIdentifier ;
    ver:versionText "3.0.0" ;
    ver:versionMajor 3 ;
    ver:versionMinor 0 ;
    ver:versionPatch 0 ;
    ver:inVersionOrdering ex:api-order ;
    ver:greaterThanVersion ex:api-v2-5 .

ex:runtime-v11
    a ver:ComponentVersionIdentifier ;
    ver:versionText "11.0.0" ;
    ver:versionMajor 11 ;
    ver:versionMinor 0 ;
    ver:versionPatch 0 ;
    ver:inVersionOrdering ex:runtime-order .

ex:runtime-v12
    a ver:ComponentVersionIdentifier ;
    ver:versionText "12.0.0" ;
    ver:versionMajor 12 ;
    ver:versionMinor 0 ;
    ver:versionPatch 0 ;
    ver:inVersionOrdering ex:runtime-order ;
    ver:greaterThanVersion ex:runtime-v11 .

ex:range-api-2-x
    a ver:VersionRange ;
    ver:lowerBound ex:api-v2-0 ;
    ver:lowerInclusive true ;
    ver:upperBound ex:api-v3-0 ;
    ver:upperInclusive false .

ex:range-core-1-x
    a ver:VersionRange ;
    ver:lowerBound ex:v1-0 ;
    ver:lowerInclusive true ;
    ver:upperBound ex:v2-0-0 ;
    ver:upperInclusive false .

ex:range-runtime-11-x
    a ver:VersionRange ;
    ver:lowerBound ex:runtime-v11 ;
    ver:lowerInclusive true ;
    ver:upperBound ex:runtime-v12 ;
    ver:upperInclusive false .

ex:range-api-at-least-2-5
    a ver:VersionRange ;
    ver:lowerBound ex:api-v2-5 ;
    ver:lowerInclusive true .

ex:adapter-v1-0
    a ver:ComponentVersionIdentifier ;
    ver:versionText "1.0.0" ;
    ver:versionMajor 1 ;
    ver:versionMinor 0 ;
    ver:versionPatch 0 ;
    ver:inVersionOrdering ex:adapter-order .

ex:adapter-v1-2
    a ver:ComponentVersionIdentifier ;
    ver:versionText "1.2.0" ;
    ver:versionMajor 1 ;
    ver:versionMinor 2 ;
    ver:versionPatch 0 ;
    ver:inVersionOrdering ex:adapter-order ;
    ver:greaterThanVersion ex:adapter-v1-0 .

ex:adapter-v2-0
    a ver:ComponentVersionIdentifier ;
    ver:versionText "2.0.0" ;
    ver:versionMajor 2 ;
    ver:versionMinor 0 ;
    ver:versionPatch 0 ;
    ver:inVersionOrdering ex:adapter-order ;
    ver:greaterThanVersion ex:adapter-v1-2 .

ex:range-adapter-1-x
    a ver:VersionRange ;
    ver:lowerBound ex:adapter-v1-0 ;
    ver:lowerInclusive true ;
    ver:upperBound ex:adapter-v2-0 ;
    ver:upperInclusive false .

ex:plugin-v1-0
    a ver:ComponentVersionIdentifier ;
    ver:versionText "1.0.0" ;
    ver:versionMajor 1 ;
    ver:versionMinor 0 ;
    ver:versionPatch 0 ;
    ver:inVersionOrdering ex:plugin-order .

ex:plugin-v2-0
    a ver:ComponentVersionIdentifier ;
    ver:versionText "2.0.0" ;
    ver:versionMajor 2 ;
    ver:versionMinor 0 ;
    ver:versionPatch 0 ;
    ver:inVersionOrdering ex:plugin-order ;
    ver:greaterThanVersion ex:plugin-v1-0 .

ex:range-plugin-1-x
    a ver:VersionRange ;
    ver:lowerBound ex:plugin-v1-0 ;
    ver:lowerInclusive true ;
    ver:upperBound ex:plugin-v2-0 ;
    ver:upperInclusive false .

ex:range-plugin-2-x
    a ver:VersionRange ;
    ver:lowerBound ex:plugin-v2-0 ;
    ver:lowerInclusive true .

ex:application
    a ex:Package ;
    rdfs:label "Example application" ;
    ex:hasDependency ex:application-api-dependency ;
    ex:hasDependency ex:application-adapter-dependency ;
    ex:hasDependency ex:application-plugin-dependency .

ex:api
    a ex:Package ;
    rdfs:label "Example API package" ;
    ex:hasCandidateVersion ex:api-v2-0 ;
    ex:hasCandidateVersion ex:api-v2-5 ;
    ex:hasCandidateVersion ex:api-v3-0 ;
    ex:hasDependency ex:api-core-dependency .

ex:adapter
    a ex:Package ;
    rdfs:label "Example adapter package" ;
    ex:hasCandidateVersion ex:adapter-v1-0 ;
    ex:hasCandidateVersion ex:adapter-v1-2 ;
    ex:hasCandidateVersion ex:adapter-v2-0 ;
    ex:hasDependency ex:adapter-api-floor ;
    ex:hasDependency ex:adapter-plugin-conflict .

ex:core
    a ex:Package ;
    rdfs:label "Example core package" ;
    ex:hasCandidateVersion ex:v1-0 ;
    ex:hasCandidateVersion ex:v1-5-alpha ;
    ex:hasCandidateVersion ex:v2-0-0 ;
    ex:hasDependency ex:core-runtime-dependency .

ex:runtime
    a ex:Package ;
    rdfs:label "Example runtime package" ;
    ex:hasCandidateVersion ex:runtime-v11 ;
    ex:hasCandidateVersion ex:runtime-v12 .

ex:plugin
    a ex:Package ;
    rdfs:label "Example plugin package" ;
    ex:hasCandidateVersion ex:plugin-v1-0 ;
    ex:hasCandidateVersion ex:plugin-v2-0 .

ex:application-api-dependency
    a ex:DependencyRequirement ;
    ex:dependencyPackage ex:api ;
    ex:dependencyRange ex:range-api-2-x .

ex:application-adapter-dependency
    a ex:DependencyRequirement ;
    ex:dependencyPackage ex:adapter ;
    ex:dependencyRange ex:range-adapter-1-x .

ex:adapter-api-floor
    a ex:DependencyRequirement ;
    ex:dependencyPackage ex:api ;
    ex:dependencyRange ex:range-api-at-least-2-5 .

ex:api-core-dependency
    a ex:DependencyRequirement ;
    ex:dependencyPackage ex:core ;
    ex:dependencyRange ex:range-core-1-x .

ex:core-runtime-dependency
    a ex:DependencyRequirement ;
    ex:dependencyPackage ex:runtime ;
    ex:dependencyRange ex:range-runtime-11-x .

ex:application-plugin-dependency
    a ex:DependencyRequirement ;
    ex:dependencyPackage ex:plugin ;
    ex:dependencyRange ex:range-plugin-1-x .

ex:adapter-plugin-conflict
    a ex:DependencyRequirement ;
    ex:dependencyPackage ex:plugin ;
    ex:dependencyRange ex:range-plugin-2-x .
