@prefix IAO: <http://purl.obolibrary.org/obo/IAO_> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix met: <https://purl.org/packagegraph/ontology/metrics#> .
@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 xsd: <http://www.w3.org/2001/XMLSchema#> .

met:Assembly a owl:NamedIndividual,
        met:ProgrammingLanguage ;
    rdfs:label "Assembly"@en ;
    met:isGarbageCollected false ;
    met:isMemorySafe false ;
    met:languageName "Assembly" .

met:C a owl:NamedIndividual,
        met:ProgrammingLanguage ;
    rdfs:label "C"@en ;
    met:isGarbageCollected false ;
    met:isMemorySafe false ;
    met:languageName "C" .

met:CSharp a owl:NamedIndividual,
        met:ProgrammingLanguage ;
    rdfs:label "C#"@en ;
    met:isGarbageCollected true ;
    met:isMemorySafe true ;
    met:languageName "C#" .

met:Cpp a owl:NamedIndividual,
        met:ProgrammingLanguage ;
    rdfs:label "C++"@en ;
    met:isGarbageCollected false ;
    met:isMemorySafe false ;
    met:languageName "C++" .

met:Go a owl:NamedIndividual,
        met:ProgrammingLanguage ;
    rdfs:label "Go"@en ;
    met:isGarbageCollected true ;
    met:isMemorySafe true ;
    met:languageName "Go" .

met:Java a owl:NamedIndividual,
        met:ProgrammingLanguage ;
    rdfs:label "Java"@en ;
    met:isGarbageCollected true ;
    met:isMemorySafe true ;
    met:languageName "Java" .

met:JavaScript a owl:NamedIndividual,
        met:ProgrammingLanguage ;
    rdfs:label "JavaScript"@en ;
    met:isGarbageCollected true ;
    met:isMemorySafe true ;
    met:languageName "JavaScript" .

met:Perl a owl:NamedIndividual,
        met:ProgrammingLanguage ;
    rdfs:label "Perl"@en ;
    met:isGarbageCollected true ;
    met:isMemorySafe true ;
    met:languageName "Perl" .

met:Python a owl:NamedIndividual,
        met:ProgrammingLanguage ;
    rdfs:label "Python"@en ;
    met:isGarbageCollected true ;
    met:isMemorySafe true ;
    met:languageName "Python" .

met:Ruby a owl:NamedIndividual,
        met:ProgrammingLanguage ;
    rdfs:label "Ruby"@en ;
    met:isGarbageCollected true ;
    met:isMemorySafe true ;
    met:languageName "Ruby" .

met:Rust a owl:NamedIndividual,
        met:ProgrammingLanguage ;
    rdfs:label "Rust"@en ;
    met:isGarbageCollected false ;
    met:isMemorySafe true ;
    met:languageName "Rust" .

met:Shell a owl:NamedIndividual,
        met:ProgrammingLanguage ;
    rdfs:label "Shell"@en ;
    met:isGarbageCollected false ;
    met:isMemorySafe true ;
    met:languageName "Shell" .

met:TypeScript a owl:NamedIndividual,
        met:ProgrammingLanguage ;
    rdfs:label "TypeScript"@en ;
    met:isGarbageCollected true ;
    met:isMemorySafe true ;
    met:languageName "TypeScript" .

met:analysisDate a owl:DatatypeProperty ;
    rdfs:label "analysis date"@en ;
    IAO:0000115 "The date when the code metrics analysis was performed."@en ;
    rdfs:comment "The date when the code metrics analysis was performed"@en ;
    rdfs:domain met:CodeMetrics ;
    rdfs:isDefinedBy met: ;
    rdfs:range xsd:dateTime .

met:blankLines a owl:DatatypeProperty ;
    rdfs:label "blank lines"@en ;
    IAO:0000115 "Number of blank lines in files of this language."@en ;
    rdfs:comment "Number of blank lines in files of this language"@en ;
    rdfs:domain met:LanguageMetrics ;
    rdfs:isDefinedBy met: ;
    rdfs:range xsd:integer .

met:commentLines a owl:DatatypeProperty ;
    rdfs:label "comment lines"@en ;
    IAO:0000115 "Number of comment lines in files of this language."@en ;
    rdfs:comment "Number of comment lines in files of this language"@en ;
    rdfs:domain met:LanguageMetrics ;
    rdfs:isDefinedBy met: ;
    rdfs:range xsd:integer .

met:cyclomaticComplexity a owl:DatatypeProperty ;
    rdfs:label "cyclomatic complexity"@en ;
    IAO:0000115 "Average cyclomatic complexity per function in this language, measuring the number of independent paths through the code. Higher values indicate more complex branching logic."@en ;
    rdfs:comment "Average cyclomatic complexity of functions in this language"@en ;
    rdfs:domain met:LanguageMetrics ;
    rdfs:isDefinedBy met: ;
    rdfs:range xsd:float .

met:filesCount a owl:DatatypeProperty ;
    rdfs:label "files count"@en ;
    IAO:0000115 "Number of source files in this programming language."@en ;
    rdfs:comment "Number of source files in this programming language"@en ;
    rdfs:domain met:LanguageMetrics ;
    rdfs:isDefinedBy met: ;
    rdfs:range xsd:integer .

met:halsteadEffort a owl:DatatypeProperty ;
    rdfs:label "Halstead effort"@en ;
    IAO:0000115 "Average Halstead effort metric per function in this language, estimating the mental effort required to understand the code based on operator and operand counts."@en ;
    rdfs:comment "Average Halstead effort metric for functions in this language"@en ;
    rdfs:domain met:LanguageMetrics ;
    rdfs:isDefinedBy met: ;
    rdfs:range xsd:float .

met:hasCodeMetrics a owl:ObjectProperty ;
    rdfs:label "has code metrics"@en ;
    IAO:0000115 "Associates a package version with its code analysis results."@en ;
    rdfs:comment "Associates a package version with its code analysis results"@en ;
    rdfs:domain pkg:Version ;
    rdfs:isDefinedBy met: ;
    rdfs:range met:CodeMetrics .

met:implementedIn a owl:ObjectProperty ;
    rdfs:label "implemented in"@en ;
    IAO:0000115 "Associates a package with the programming languages it is implemented in."@en ;
    rdfs:comment "Associates a package with the programming languages it is implemented in"@en ;
    rdfs:domain pkg:Package ;
    rdfs:isDefinedBy met: ;
    rdfs:range met:ProgrammingLanguage .

met:isGarbageCollected a owl:DatatypeProperty,
        owl:FunctionalProperty ;
    rdfs:label "is garbage collected"@en ;
    IAO:0000115 "Whether the language uses automatic garbage collection for memory management."@en ;
    rdfs:comment "Whether the language uses automatic garbage collection"@en ;
    rdfs:domain met:ProgrammingLanguage ;
    rdfs:isDefinedBy met: ;
    rdfs:range xsd:boolean .

met:isMemorySafe a owl:DatatypeProperty,
        owl:FunctionalProperty ;
    rdfs:label "is memory safe"@en ;
    IAO:0000115 "Whether the language provides memory safety guarantees through its type system or runtime."@en ;
    rdfs:comment "Whether the language provides memory safety guarantees"@en ;
    rdfs:domain met:ProgrammingLanguage ;
    rdfs:isDefinedBy met: ;
    rdfs:range xsd:boolean .

met:language a owl:ObjectProperty ;
    rdfs:label "language"@en ;
    IAO:0000115 "Identifies the programming language for a set of language-specific metrics."@en ;
    rdfs:comment "Identifies the programming language for a set of language-specific metrics"@en ;
    rdfs:domain met:LanguageMetrics ;
    rdfs:isDefinedBy met: ;
    rdfs:range met:ProgrammingLanguage .

met:languageProportion a owl:DatatypeProperty ;
    rdfs:label "language proportion"@en ;
    IAO:0000115 "The fraction of the total codebase written in this language, measured by lines of code (not files or bytes), from 0.0 to 1.0."@en ;
    rdfs:comment "The fraction of the total codebase in this language, from 0.0 to 1.0"@en ;
    rdfs:domain met:LanguageMetrics ;
    rdfs:isDefinedBy met: ;
    rdfs:range xsd:float .

met:linesOfCode a owl:DatatypeProperty ;
    rdfs:label "lines of code"@en ;
    IAO:0000115 "Physical lines of code (LOC) in this specific programming language, as counted by cloc or similar tools. Includes all non-blank, non-comment lines. This is a physical line count, not logical SLOC."@en ;
    rdfs:comment "Lines of code in this specific programming language"@en ;
    rdfs:domain met:LanguageMetrics ;
    rdfs:isDefinedBy met: ;
    rdfs:range xsd:integer .

met:totalBlankLines a owl:DatatypeProperty ;
    rdfs:label "total blank lines"@en ;
    IAO:0000115 "Total blank lines across all source files."@en ;
    rdfs:comment "Total blank lines across all source files"@en ;
    rdfs:domain met:CodeMetrics ;
    rdfs:isDefinedBy met: ;
    rdfs:range xsd:integer .

met:totalCommentLines a owl:DatatypeProperty ;
    rdfs:label "total comment lines"@en ;
    IAO:0000115 "Total comment lines across all source files."@en ;
    rdfs:comment "Total comment lines across all source files"@en ;
    rdfs:domain met:CodeMetrics ;
    rdfs:isDefinedBy met: ;
    rdfs:range xsd:integer .

met:totalFiles a owl:DatatypeProperty ;
    rdfs:label "total files"@en ;
    IAO:0000115 "Total number of source files in the analyzed version."@en ;
    rdfs:comment "Total number of source files in the analyzed version"@en ;
    rdfs:domain met:CodeMetrics ;
    rdfs:isDefinedBy met: ;
    rdfs:range xsd:integer .

met:totalLinesOfCode a owl:DatatypeProperty ;
    rdfs:label "total lines of code"@en ;
    IAO:0000115 "Total physical lines of code (LOC) across all languages in the analyzed version. Sum of per-language linesOfCode values."@en ;
    rdfs:comment "Total lines of code across all languages in the analyzed version"@en ;
    rdfs:domain met:CodeMetrics ;
    rdfs:isDefinedBy met: ;
    rdfs:range xsd:integer .

met:hasLanguageMetrics a owl:ObjectProperty ;
    rdfs:label "has language metrics"@en ;
    IAO:0000115 "Links summary code metrics to per-language breakdowns."@en ;
    rdfs:comment "Links summary code metrics to per-language breakdowns"@en ;
    rdfs:domain met:CodeMetrics ;
    rdfs:isDefinedBy met: ;
    rdfs:range met:LanguageMetrics .

met:languageName a owl:DatatypeProperty,
        owl:FunctionalProperty ;
    rdfs:label "language name"@en ;
    IAO:0000115 "The canonical name of the programming language."@en ;
    rdfs:comment "The canonical name of the programming language"@en ;
    rdfs:domain met:ProgrammingLanguage ;
    rdfs:isDefinedBy met: ;
    rdfs:range xsd:string .

met:CodeMetrics a owl:Class ;
    rdfs:label "Code Metrics"@en ;
    IAO:0000115 "Summary code analysis results for a specific version of a software package."@en ;
    rdfs:comment "Summary code analysis results for a specific version of a software package"@en ;
    rdfs:isDefinedBy met: ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:minCardinality 1 ;
            owl:onProperty met:hasLanguageMetrics ],
        owl:Thing .

met:LanguageMetrics a owl:Class ;
    rdfs:label "Language Metrics"@en ;
    IAO:0000115 "Per-language code analysis breakdown within a set of code metrics, providing detailed statistics for a single programming language."@en ;
    rdfs:comment "Per-language code analysis breakdown within a set of code metrics"@en ;
    rdfs:isDefinedBy met: ;
    rdfs:subClassOf owl:Thing .

met:ProgrammingLanguage a owl:Class ;
    rdfs:label "Programming Language"@en ;
    IAO:0000115 "A programming language used in software development."@en ;
    rdfs:comment "A programming language used in software development"@en ;
    rdfs:isDefinedBy met: ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:cardinality 1 ;
            owl:onProperty met:languageName ],
        owl:Thing .

met: a owl:Ontology ;
    rdfs:label "Package Metrics Ontology"@en ;
    dcterms:abstract "The Metrics ontology captures quantitative code analysis data for packages, including lines of code, cyclomatic complexity, and per-language breakdowns. It enables queries that correlate package size and complexity with dependency counts, maintainer activity, or vulnerability exposure across distributions." ;
    dcterms:created "2025-09-05"^^xsd:date ;
    dcterms:creator <https://packagegraph.github.io/> ;
    dcterms:description "A comprehensive ontology for modeling programming languages, code analysis metrics, and per-language breakdowns including lines of code, complexity measures, and language characteristics." ;
    dcterms:license <https://creativecommons.org/publicdomain/zero/1.0/> ;
    dcterms:modified "2026-04-21"^^xsd:date ;
    dcterms:title "Package Metrics Ontology" ;
    rdfs:comment "Ontology for representing programming languages, code metrics, and per-language analysis breakdowns for software packages"@en ;
    rdfs:isDefinedBy met: ;
    rdfs:seeAlso <https://purl.org/packagegraph/ontology/metrics/shapes> ;
    owl:imports pkg: ;
    owl:priorVersion <https://purl.org/packagegraph/ontology/metrics/0.6.0> ;
    owl:versionIRI <https://purl.org/packagegraph/ontology/metrics/0.7.0> ;
    owl:versionInfo "0.7.0" .

