# MRK vocabulary, https://machinereadyknowledge.com/ns#  (MRK-1.1 maturity layer)
# Defines every term the served mrk-1.1.context.jsonld and shapes.ttl use under this namespace.
# Terms from Dublin Core, SKOS, PROV and RDFS are reused as-is and not redefined here.
# Example IRIs under /kb/ in the docs are illustrative and not dereferenceable.

@prefix mrk:     <https://machinereadyknowledge.com/ns#> .
@prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl:     <http://www.w3.org/2002/07/owl#> .
@prefix xsd:     <http://www.w3.org/2001/XMLSchema#> .
@prefix skos:    <http://www.w3.org/2004/02/skos/core#> .
@prefix sh:      <http://www.w3.org/ns/shacl#> .
@prefix dcterms: <http://purl.org/dc/terms/> .

<https://machinereadyknowledge.com/ns#> a owl:Ontology ;
    dcterms:title "Machine-Ready Knowledge vocabulary"@en ;
    dcterms:description "The mrk: namespace used by the MRK-1.1 JSON-LD context and the SHACL shapes."@en ;
    rdfs:seeAlso <https://machinereadyknowledge.com/ns> .

mrk:Article a rdfs:Class ;
    rdfs:label "Article"@en ;
    rdfs:comment "A governed knowledge article: one MRK front-matter block and the sections it declares."@en ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:Section a rdfs:Class ;
    rdfs:label "Section"@en ;
    rdfs:comment "An addressable part of an article, typed by role, quotable and citable on its own by its id (article-id#anchor)."@en ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:mrkVersion a rdf:Property ;
    rdfs:label "MRK version"@en ;
    rdfs:comment "The MRK spec version the article declares conformance to (front-matter key mrk_version)."@en ;
    rdfs:domain mrk:Article ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:profile a rdf:Property ;
    rdfs:label "profile"@en ;
    rdfs:comment "The MRK profile the article follows (for example software-product)."@en ;
    rdfs:domain mrk:Article ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:articleType a rdf:Property ;
    rdfs:label "article type"@en ;
    rdfs:comment "The article's type from the closed MRK type list (front-matter key type), such as issue-resolution or concept."@en ;
    rdfs:domain mrk:Article ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:verified a rdf:Property ;
    rdfs:label "verified"@en ;
    rdfs:comment "The date the article was last verified accurate."@en ;
    rdfs:domain mrk:Article ;
    rdfs:range xsd:date ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:lifecycle a rdf:Property ;
    rdfs:label "lifecycle"@en ;
    rdfs:comment "Content state: draft, unreleased, current, superseded, retired or expired. Retrieval treats only current as answerable."@en ;
    rdfs:domain mrk:Article ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:visibility a rdf:Property ;
    rdfs:label "visibility"@en ;
    rdfs:comment "Audience boundary: public, internal or confidential. A safety gate for answer assembly."@en ;
    rdfs:domain mrk:Article ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:entitlement a rdf:Property ;
    rdfs:label "entitlement"@en ;
    rdfs:comment "An entitlement a reader must hold to see the article."@en ;
    rdfs:domain mrk:Article ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:localizedFrom a rdf:Property ;
    rdfs:label "localized from"@en ;
    rdfs:comment "The source-language article this article is a localization of."@en ;
    rdfs:domain mrk:Article ;
    rdfs:range mrk:Article ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:concept a rdf:Property ;
    rdfs:label "concept"@en ;
    rdfs:comment "A governed vocabulary concept the article or section is about; the IRI resolves under /vocab/ and is a skos:Concept."@en ;
    rdfs:range skos:Concept ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:appliesTo a rdf:Property ;
    rdfs:label "applies to"@en ;
    rdfs:comment "Applicability scope: who and what the article is true for. Its object is a node carrying the dimension properties below."@en ;
    rdfs:domain mrk:Article ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:plan a rdf:Property ;
    rdfs:label "plan"@en ;
    rdfs:comment "Applicability dimension: the commercial plan(s) the article applies to."@en ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:region a rdf:Property ;
    rdfs:label "region"@en ;
    rdfs:comment "Applicability dimension: the region(s) the article applies to."@en ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:product a rdf:Property ;
    rdfs:label "product"@en ;
    rdfs:comment "Applicability dimension: the product(s) the article applies to."@en ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:component a rdf:Property ;
    rdfs:label "component"@en ;
    rdfs:comment "Applicability dimension: the product component(s) the article applies to."@en ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:audience a rdf:Property ;
    rdfs:label "audience"@en ;
    rdfs:comment "Applicability dimension: the audience the article is written for."@en ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:appliesToRole a rdf:Property ;
    rdfs:label "applies to role"@en ;
    rdfs:comment "Applicability dimension: the user role(s) the article applies to (front-matter key role inside applies_to)."@en ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:jurisdiction a rdf:Property ;
    rdfs:label "jurisdiction"@en ;
    rdfs:comment "Applicability dimension: the legal jurisdiction(s) the article applies to."@en ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:versionRange a rdf:Property ;
    rdfs:label "version range"@en ;
    rdfs:comment "Applicability dimension: a product version range expression."@en ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:versionMin a rdf:Property ;
    rdfs:label "version minimum"@en ;
    rdfs:comment "Applicability dimension: lowest product version the article applies to."@en ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:versionMax a rdf:Property ;
    rdfs:label "version maximum"@en ;
    rdfs:comment "Applicability dimension: highest product version the article applies to."@en ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:versionExact a rdf:Property ;
    rdfs:label "version exact"@en ;
    rdfs:comment "Applicability dimension: the single product version the article applies to."@en ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:dimensions a rdf:Property ;
    rdfs:label "dimensions"@en ;
    rdfs:comment "Open applicability dimensions beyond the named ones, for adopter-defined scoping."@en ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:provenance a rdf:Property ;
    rdfs:label "provenance"@en ;
    rdfs:comment "Where the article came from and how it was checked. Its object carries derivedFrom, validatedBy, graduatedFrom and confidence."@en ;
    rdfs:domain mrk:Article ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:derivedFrom a rdf:Property ;
    rdfs:label "derived from"@en ;
    rdfs:comment "A source the article was derived from (ticket, document, incident)."@en ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:validatedBy a rdf:Property ;
    rdfs:label "validated by"@en ;
    rdfs:comment "Who or what validated the content."@en ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:graduatedFrom a rdf:Property ;
    rdfs:label "graduated from"@en ;
    rdfs:comment "The earlier content state this article graduated from, in the Content Graduation Model."@en ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:confidence a rdf:Property ;
    rdfs:label "confidence"@en ;
    rdfs:comment "Declared confidence in the content, as a provenance signal."@en ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:relation a rdf:Property ;
    rdfs:label "relation"@en ;
    rdfs:comment "A typed relation from this article to another. Its object carries relType and relTarget; the projector also expands it into the direct edges below."@en ;
    rdfs:domain mrk:Article ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:relType a rdf:Property ;
    rdfs:label "relation type"@en ;
    rdfs:comment "The kind of a relation (depends_on, prerequisite_of, references, part_of, see_also, applies_with, supersedes)."@en ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:relTarget a rdf:Property ;
    rdfs:label "relation target"@en ;
    rdfs:comment "The article a relation points at."@en ;
    rdfs:range mrk:Article ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:dependsOn a rdf:Property ;
    rdfs:label "depends on"@en ;
    rdfs:comment "Direct edge: this article cannot be applied correctly without the target. Basis of impact analysis; the target must be an Article (shape DependsOnIntegrityShape)."@en ;
    rdfs:domain mrk:Article ;
    rdfs:range mrk:Article ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:prerequisiteOf a rdf:Property ;
    rdfs:label "prerequisite of"@en ;
    rdfs:comment "Direct edge: this article must be done before the target."@en ;
    rdfs:domain mrk:Article ;
    rdfs:range mrk:Article ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:appliesWith a rdf:Property ;
    rdfs:label "applies with"@en ;
    rdfs:comment "Direct edge: this article is meant to be used together with the target."@en ;
    rdfs:domain mrk:Article ;
    rdfs:range mrk:Article ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:hasSection a rdf:Property ;
    rdfs:label "has section"@en ;
    rdfs:comment "Links an article to each of its declared sections. At least one is required (shape ArticleShape)."@en ;
    rdfs:domain mrk:Article ;
    rdfs:range mrk:Section ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:sectionRole a rdf:Property ;
    rdfs:label "section role"@en ;
    rdfs:comment "The section's role from a closed list: context, symptom, cause, resolution, procedure, verification, concept, reference, prerequisite, result, caveat, example."@en ;
    rdfs:domain mrk:Section ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:selfContained a rdf:Property ;
    rdfs:label "self-contained"@en ;
    rdfs:comment "Human attestation that the section can be lifted alone and still be understood: it restates its prerequisites rather than pointing above."@en ;
    rdfs:domain mrk:Section ;
    rdfs:range xsd:boolean ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:requires a rdf:Property ;
    rdfs:label "requires"@en ;
    rdfs:comment "Section-level edge: this section depends on the target section. Also the declaration a transclusion marker must agree with. The target must be a Section (shape RequiresIntegrityShape)."@en ;
    rdfs:domain mrk:Section ;
    rdfs:range mrk:Section ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:ArticleShape a sh:NodeShape ;
    rdfs:label "Article shape"@en ;
    rdfs:comment "SHACL node shape for Articles: title, verified date, lifecycle and visibility values, at least one Section."@en ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:SectionShape a sh:NodeShape ;
    rdfs:label "Section shape"@en ;
    rdfs:comment "SHACL node shape for Sections: exactly one role from the closed list, and a self-contained flag."@en ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:RequiresIntegrityShape a sh:NodeShape ;
    rdfs:label "requires integrity shape"@en ;
    rdfs:comment "Every object of mrk:requires must be a Section in the corpus graph; a dangling requires fails."@en ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:DependsOnIntegrityShape a sh:NodeShape ;
    rdfs:label "depends-on integrity shape"@en ;
    rdfs:comment "Every object of mrk:dependsOn must be an Article in the corpus graph."@en ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .

mrk:SupersedesIntegrityShape a sh:NodeShape ;
    rdfs:label "supersedes integrity shape"@en ;
    rdfs:comment "Every object of dcterms:replaces (front-matter supersedes) must be an Article in the corpus graph."@en ;
    rdfs:isDefinedBy <https://machinereadyknowledge.com/ns#> .
