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

# Self-contained showcase for queries/transitive-dependency-resolution.rq.
#
# The query expects ver:includesVersion triples to be pre-materialized for every
# range (normally produced by running version-in-range.rq first). Here the
# inclusion edges are written directly so the query can resolve dependencies in
# a single pass.

# ----- Library candidates ----------------------------------------------------

ex:lib-ordering
    a ver:NumericComponentOrdering ;
    rdfs:label "Library version ordering" .

ex:lib
    a ex:Package ;
    rdfs:label "Library with three published versions" ;
    ex:hasCandidateVersion ex:lib-v1-0 ;
    ex:hasCandidateVersion ex:lib-v1-5 ;
    ex:hasCandidateVersion ex:lib-v2-0 .

ex:lib-v1-0
    a ver:VersionIdentifier ;
    ver:versionText "1.0.0" ;
    ver:inVersionOrdering ex:lib-ordering .

ex:lib-v1-5
    a ver:VersionIdentifier ;
    ver:versionText "1.5.0" ;
    ver:inVersionOrdering ex:lib-ordering .

ex:lib-v2-0
    a ver:VersionIdentifier ;
    ver:versionText "2.0.0" ;
    ver:inVersionOrdering ex:lib-ordering .

# Pre-materialized inclusion: range-1-x admits both 1.0.0 and 1.5.0, range-2-x
# admits 2.0.0, range-lib-legacy admits only 1.0.0.
ex:range-1-x a ver:VersionRange ;
    ver:includesVersion ex:lib-v1-0, ex:lib-v1-5 .
ex:range-2-x a ver:VersionRange ;
    ver:includesVersion ex:lib-v2-0 .
ex:range-lib-legacy a ver:VersionRange ;
    ver:includesVersion ex:lib-v1-0 .

# ----- Resolvable application -----------------------------------------------
#
# ex:app needs ex:lib in range-1-x. Both 1.0.0 and 1.5.0 qualify.

ex:app
    a ex:Package ;
    rdfs:label "Application with a single satisfiable requirement" ;
    ex:hasDependency ex:app-needs-lib .

ex:app-needs-lib
    a ex:DependencyRequirement ;
    ex:dependencyPackage ex:lib ;
    ex:dependencyRange ex:range-1-x .

# ----- Transitive resolution ------------------------------------------------
#
# ex:web depends on ex:framework, which transitively depends on ex:lib via
# range-1-x. The query must walk through ex:framework to confirm that ex:lib
# 1.0.0 and 1.5.0 remain solvable from ex:web's perspective.

ex:framework
    a ex:Package ;
    rdfs:label "Framework dependency" ;
    ex:hasDependency ex:framework-needs-lib .

ex:framework-needs-lib
    a ex:DependencyRequirement ;
    ex:dependencyPackage ex:lib ;
    ex:dependencyRange ex:range-1-x .

ex:web
    a ex:Package ;
    rdfs:label "Web app depending on the framework" ;
    ex:hasDependency ex:web-needs-framework .

ex:web-needs-framework
    a ex:DependencyRequirement ;
    ex:dependencyPackage ex:framework ;
    ex:dependencyRange ex:range-framework-legacy .

# Framework itself: only ex:framework-v1 is offered as a candidate, and its
# package-specific legacy range admits exactly that framework version.
ex:framework-ordering
    a ver:NumericComponentOrdering ;
    rdfs:label "Framework version ordering" .

ex:framework ex:hasCandidateVersion ex:framework-v1 .
ex:framework-v1
    a ver:VersionIdentifier ;
    ver:versionText "1.0.0" ;
    ver:inVersionOrdering ex:framework-ordering .

ex:range-framework-legacy
    a ver:VersionRange ;
    ver:includesVersion ex:framework-v1 .

# ----- Conflicting application ----------------------------------------------
#
# ex:legacy demands ex:lib in range-lib-legacy (1.0.0 only) while
# ex:legacy-extension demands range-2-x (2.0.0 only). No candidate satisfies
# both, so the query must emit ex:dependencyConflict.

ex:legacy
    a ex:Package ;
    rdfs:label "Legacy app with conflicting transitive requirements" ;
    ex:hasDependency ex:legacy-needs-lib ;
    ex:hasDependency ex:legacy-needs-extension .

ex:legacy-needs-lib
    a ex:DependencyRequirement ;
    ex:dependencyPackage ex:lib ;
    ex:dependencyRange ex:range-lib-legacy .

ex:legacy-needs-extension
    a ex:DependencyRequirement ;
    ex:dependencyPackage ex:extension ;
    ex:dependencyRange ex:range-extension-1 .

ex:extension
    a ex:Package ;
    rdfs:label "Extension that pins to lib 2.x" ;
    ex:hasCandidateVersion ex:extension-v1 ;
    ex:hasDependency ex:extension-needs-lib .

ex:extension-ordering
    a ver:NumericComponentOrdering ;
    rdfs:label "Extension version ordering" .

ex:extension-v1
    a ver:VersionIdentifier ;
    ver:versionText "1.0.0" ;
    ver:inVersionOrdering ex:extension-ordering .

ex:range-extension-1 a ver:VersionRange ;
    ver:includesVersion ex:extension-v1 .

ex:extension-needs-lib
    a ex:DependencyRequirement ;
    ex:dependencyPackage ex:lib ;
    ex:dependencyRange ex:range-2-x .
