[{"data":1,"prerenderedAt":1518},["ShallowReactive",2],{"kgmanifest-search":3,"/kgmanifest/model":183,"kgmanifest-navigation":1506},[4,10,15,21,25,30,34,40,45,51,56,61,66,71,76,80,85,90,95,100,105,110,115,120,124,129,134,138,143,148,153,158,163,168,173,178],{"id":5,"title":6,"titles":7,"content":8,"level":9},"/kgmanifest","KG Manifest",[],"Manifests for describing catalogues & resources for use in Prez What is KG Manifest",1,{"id":11,"title":12,"titles":13,"content":14,"level":9},"/kgmanifest/quickstart","Quickstart",[],"",{"id":16,"title":17,"titles":18,"content":19,"level":20},"/kgmanifest/quickstart#installing","Installing",[12],"How to install KG Manifest",2,{"id":22,"title":23,"titles":24,"content":14,"level":20},"/kgmanifest/quickstart#example-manifest-usage","Example manifest usage",[12],{"id":26,"title":27,"titles":28,"content":29,"level":9},"/kgmanifest/model","KG Manifest Model",[],"A KG Manifest is an RDF file that describes and links to a set of resources that can be loaded into an RDF database for Prez to provide access to. This page defines the KG Manifest specification and links to relevant tools. The modelManifest Resource Roles VocabularyExamplesTools",{"id":31,"title":32,"titles":33,"content":14,"level":20},"/kgmanifest/model#model","Model",[27],{"id":35,"title":36,"titles":37,"content":38,"level":39},"/kgmanifest/model#overview","Overview",[27,32],"graph LR\n  style Manifest fill:#FF90BB,stroke:#666,stroke-width:2px\n  Manifest --1:1-N--> ResourceDescriptor;\n  style ResourceDescriptor fill:#FFC1DA,stroke:#666,stroke-width:2px\n  style artifact fill:#F8F8E1,stroke:#666,stroke-width:2px \n  ResourceDescriptor --1:1-N--> artifact;\n  ResourceDescriptor --1:1--> hasRole;\n  ResourceDescriptor --1:0-N--> conformsTo;\n  ResourceDescriptor --1:0-1--> additionalType;\n  ResourceDescriptor --1:0-1--> sync;\n  style artifact fill:#F8F8E1,stroke:#666,stroke-width:2px  \n  artifact --1:0-N--> conformsTo;\n  artifact --1:0-1--> additionalType;\n  artifact --1:0-1--> sync;\n  artifact --1:0-1--> mainEntity;\n  artifact --1:0-1--> contentLocation;\n  style artifact fill:#F8F8E1,stroke:#666,stroke-width:2px  \n  artifact --1:0-1--> dateModified;\n  artifact --1:0-1--> versionIRI;\n  artifact --1:0-1--> version; See Annex A: Diagram Breakdown below for a part-by-part explanation of this diagram.",3,{"id":41,"title":42,"titles":43,"content":44,"level":20},"/kgmanifest/model#rules","Rules",[27],"An instance of the Manifest class, prez:Manifest, MUST have 1 or more Resource Descriptors, prof:ResourceDescriptor instances, indicated by the prof:hasResource predicate. The Manifest instance can be identified by an IRI or a Blank Node.Each Resource Descriptor MUST have at least one prof:hasArtifact predicate indicating either an RDF literal resource (a string) containing the location of the artifact or a Blank Node containing the location of the artifacts indicated by the schema:contentLocation predicate and the main artifact IRI within that content location indicated by schema:mainEntity.See the Main Entity details belowWhere content location is indicated, it MUST be a file path or path pattern relative to the manifest or a URL.Each Resource Descriptor MUST also have exactly one prof:hasRole predicate indicating a Concept from the Manifest Resource Roles Vocabulary.Each Resource Descriptor MAY have a schema:name and/or a schema:description predicate indicating literal resources naming and describing it.A Resource, or an Artifact, MAY indicate that it (if an Artifact) or the Artifacts within it (if a Resource) conform to any number of defined Standards or Profiles of Standards, using the predicate dcterms:conformsTo.Validators can be indicated either by using \"well known\" validator IRIs or by directly indicating the validator RDF file\ncurrent \"well known\" are listed below and can be indicated using an IRI like this:dcterms:conformsTo \u003CWELL-KNONW-VALIDATOR-IRI> ;other validators, such as my-local-validator.ttl or http://online-validator.com/val.ttl should be indicated using a literal, like this:dcterms:conformsTo \"path/from/manifest/root/to/my-local-validator.ttl\" ;See the Known Validators list belowA Resource, or an Artifact, MAY indicate that it (if an Artifact) or the Artifacts within it (if a Resource) is of a specific class, using the predicate schema:additionalTypeSee the Known Classes list belowA Resource, or an Artifact, MAY indicate that it should not be ignored by synchronisation tooling by setting a predicate prez:sync to falseSee the Indicating no action section belowAn Artifact may have \"versioning information\" about it indicated by use of a number of known versioning predicatessee the Artifact Versioning section below",{"id":46,"title":47,"titles":48,"content":49,"level":50},"/kgmanifest/model#known-validators","Known Validators",[27,42],"The following validators can be referred to by IRI, as described above: ValidatorIRIScopeGeoSPARQL\u003Chttp://www.opengis.net/def/geosparql/validator>Spatial ObjectsIDN Catalogue Profile\u003Chttps://data.idnau.org/pid/cp/validator>Catalogued resources containing Indigenous metadataVocPub\u003Chttps://linked.data.gov.au/def/vocpub>Vocabularies",4,{"id":52,"title":53,"titles":54,"content":55,"level":50},"/kgmanifest/model#known-classes","Known Classes",[27,42],"Some classes of resource are commonly catalogued and, when they are, their class does not need to be indicated within a Manifest. These classes are: dcat:Resourcedcat:Datasetdcat:Catalogowl:Ontologyschema:CreativeWorkschema:Datasetschema:DataCatalogskos:ConceptScheme If an Artifact, or all the Artifacts within a Resource, are not one of these types, then they can be indicated as being so by use of schema:additionalType like this: []\n    a prez:Manifest ;\n    prof:hasResource\n        # ...\n        [\n            prof:hasArtifact \"resources/*.ttl\" ;\n            prof:hasRole mrr:ResourceData ;\n            schema:additionalType \u003C{A-CLASS-IRI}> ;\n        ] ,\n        # ...\n. This will allow the Manifest to communicate the class of the object software should be looking for within the resource.",{"id":57,"title":58,"titles":59,"content":60,"level":50},"/kgmanifest/model#main-entity","Main Entity",[27,42],"If, for some reason, a resource is neither of one of the Known Classes nore it its class able to be indicated with schema:additionalType, the specific IRI of the resource can be indicated using schema:mainEntity. This may be needed in situations where an RDF file containing a resource also contains multiple other instance of the same class. []\n    a prez:Manifest ;\n    prof:hasResource\n        # ...\n        [\n            prof:hasArtifact \"resources/file1.ttl\" ;\n            prof:hasRole mrr:ResourceData ;\n            schema:mainEntity \u003C{RESOURCE-IRI}> ;\n        ] ,\n        # ...\n.",{"id":62,"title":63,"titles":64,"content":65,"level":50},"/kgmanifest/model#indicating-no-action","Indicating no action",[27,42],"If a Manifest wishes to list a resource but indicate it not for automatic handling by manifest tooling - perhaps it's too large to synchronise with an RDF DB - then the predicate prez:sync with the value false should be set. Here is an example of a Manifest indicating 4 spatial datasets, one of which is too large to sync: []\n    a prez:Manifest ;\n    prof:hasResource\n        [\n            prof:hasArtifact \"resources/*.ttl\" ;  # datset1.ttl, dataset2.ttl & dataset3.ttl\n            prof:hasRole mrr:ResourceData ;\n        ] ,\n        [\n            prof:hasArtifact \"resources/large/dataset4.ttl\" ;\n            prof:hasRole mrr:ResourceData ;\n            prez:sync false ;\n        ] ;\n.",{"id":67,"title":68,"titles":69,"content":70,"level":39},"/kgmanifest/model#artifact-versioning","Artifact versioning",[27,42],"An Artifact's version may be indicated by use of any or all of the following predicates: owl:versionIRIschema:version or owl:versionInfoschema:dateModified or dcterms:modified If this is done, then tools, such as kgmanifest that load and sync Manifest-described data, can obtain versioning information from a Manifest file, rather than by inspecting Artifacts' contents.",{"id":72,"title":73,"titles":74,"content":75,"level":20},"/kgmanifest/model#validation","Validation",[27],"The validator - a file containing rules - for Manifests is given in Annex B: Manifest Validator below. A manifest and all its content can also be validated using the kgmanifest tool's validate function which both validates a Manifest file using the validator below and also any content for which a conformance claim is given. See the Tools section below for info on the kgmanifest tool. Additionally, any stand-alon SHACL validator can also be used to validate a Manifest. Again, see the tools section below.",{"id":77,"title":78,"titles":79,"content":14,"level":20},"/kgmanifest/model#examples","Examples",[27],{"id":81,"title":82,"titles":83,"content":84,"level":39},"/kgmanifest/model#valid","Valid",[27,78],"A simple, valid, Manifest. --8\u003C-- \"docs/assets/manifest.ttl\"",{"id":86,"title":87,"titles":88,"content":89,"level":39},"/kgmanifest/model#invalid-no-role","Invalid - no role",[27,78],"The second Resource Descriptor does not indicate a role as it is commented out. --8\u003C-- \"docs/assets/manifest-invalid-01.ttl\"",{"id":91,"title":92,"titles":93,"content":94,"level":39},"/kgmanifest/model#invalid-bad-location","Invalid - bad location",[27,78],"The third resource specifies an invalid location, the non-existent web address of https://github.com/RDFLib/prez/blob/main/prez/reference_data/profiles/ogc_records_profile.ttlx which has had an extra 'x' added at the end. --8\u003C-- \"docs/assets/manifest-invalid-03.ttl\"",{"id":96,"title":97,"titles":98,"content":99,"level":39},"/kgmanifest/model#mainentity-use","mainEntity use",[27,78],"A snippet of a Manifest - just one value for hasResource - showing use of mainEntity and contentLocation instead of just a literal file path. [\n        prof:hasArtifact\n            [\n                schema:contentLocation \"vocabs/image-test.ttl\" ;\n                schema:mainEntity \u003Chttps://example.com/demo-vocabs/image-test> ;\n            ] ,\n            \"vocabs/language-test.ttl\" ;\n        prof:hasRole mrr:ResourceData ;\n        schema:description \"skos:ConceptScheme objects in RDF (Turtle) files in the vocabs/ folder\" ;\n        schema:name \"Resource Data\"\n    ] ,",{"id":101,"title":102,"titles":103,"content":104,"level":39},"/kgmanifest/model#conformance-claim-single","conformance claim - single",[27,78],"A single artifact claiming conformance to the VocPub Profile of SKOS. prof:hasArtifact\n        [\n            schema:contentLocation \"vocabs/image-test.ttl\" ;\n            schema:mainEntity \u003Chttps://example.com/demo-vocabs/image-test> ;\n            dcterms:conformsTo \u003Chttps://linked.data.gov.au/def/vocpub> ;\n        ] ,",{"id":106,"title":107,"titles":108,"content":109,"level":39},"/kgmanifest/model#conformance-claim-all","conformance claim - all",[27,78],"A single Resource in a Manifest claiming conformance to the VocPub Profile of SKOS for all artifacts (there are 3 given). [\n        prof:hasArtifact\n            [\n                schema:contentLocation \"vocabs/image-test.ttl\" ;\n                schema:mainEntity \u003Chttps://example.com/demo-vocabs/image-test> ;\n            ] ,\n            \"vocabs/language-test.ttl\" ;\n            \"vocabs/other-vocab.ttl\" ;\n        prof:hasRole mrr:ResourceData ;\n        # ...\n        dcterms:conformsTo \u003Chttps://linked.data.gov.au/def/vocpub> ;\n    ] ,",{"id":111,"title":112,"titles":113,"content":114,"level":39},"/kgmanifest/model#conformance-claim-supplied-validator","conformance claim - supplied validator",[27,78],"To indicate a validator stored in a local file, my-local-validator.ttl: [\n        prof:hasArtifact\n            [\n                schema:contentLocation \"vocabs/image-test.ttl\" ;\n                schema:mainEntity \u003Chttps://example.com/demo-vocabs/image-test> ;\n            ] ,\n            \"vocabs/language-test.ttl\" ;\n            \"vocabs/other-vocab.ttl\" ;\n        prof:hasRole mrr:ResourceData ;\n        # ...\n        dcterms:conformsTo \"path/to/my-local-validator.ttl\" ;\n    ] ,",{"id":116,"title":117,"titles":118,"content":119,"level":39},"/kgmanifest/model#additionaltype","additionalType",[27,78],"Where a",{"id":121,"title":122,"titles":123,"content":14,"level":20},"/kgmanifest/model#tools","Tools",[27],{"id":125,"title":126,"titles":127,"content":128,"level":39},"/kgmanifest/model#kgmanifest-github-pypi","kgmanifest - GitHub, PyPI",[27,122],"The kgmanifest command line tool and Python package, available on GitHub and on PyPI, provides a number of functions to work with KG Manifests. The functions provided are: validate - validate a Manifest file and contentslabel - check Manifest contents for unlabelled elementsdocument - create certain forms of documentationload - load a Manifest's content into a file or DBsync - synchronise a Manifest's contents with a DB See the package's repository for installation and use details.",{"id":130,"title":131,"titles":132,"content":133,"level":39},"/kgmanifest/model#shacl-validation","SHACL validation",[27,122],"The preferred way to perform validation of a KG Manifest file is to use the kgmanifest tool's validate function, as listed above. Hoever, you can also perform validation of a manifest - the manifest file only, not the content it refers to, using any one of a number of SHACL validators. See these notes for a listing of general-purpose SHACL validation tools: ABIS standard's notes on SHACL tooling & validation",{"id":135,"title":136,"titles":137,"content":14,"level":20},"/kgmanifest/model#annex-a-diagram-breakdown","Annex A: Diagram Breakdown",[27],{"id":139,"title":140,"titles":141,"content":142,"level":39},"/kgmanifest/model#manifest-resourcedescriptor","Manifest & ResourceDescriptor",[27,136],"graph LR\n  style Manifest fill:#FF90BB,stroke:#666,stroke-width:2px\n  Manifest --1:1-N--> ResourceDescriptor;\n  style ResourceDescriptor fill:#FFC1DA,stroke:#666,stroke-width:2px\n  style artifact fill:#F8F8E1,stroke:#666,stroke-width:2px \n  ResourceDescriptor --1:1-N--> artifact;\n  subgraph main\n  ResourceDescriptor --1:1--> hasRole;\n  ResourceDescriptor --1:0-N--> conformsTo;\n  ResourceDescriptor --1:0-1--> additionalType;\n  ResourceDescriptor --1:0-1--> sync;\n  end A Manifest must indicate at least one ResourceDescriptor. ResourceDescriptor instances MUST have the predicates of: hasRole - exactly 1hasArtifact- at least 1 ResourceDescriptor instances MAY have the predicates of: conformsTo - at most 1additionalType - at most 1sync - at most 1. If present, value must be false, e.g. true is default",{"id":144,"title":145,"titles":146,"content":147,"level":39},"/kgmanifest/model#artifact-description","Artifact: description",[27,136],"graph LR\n  style artifact fill:#F8F8E1,stroke:#666,stroke-width:2px graph LR\n  style artifact fill:#F8F8E1,stroke:#666,stroke-width:2px  \n  subgraph main\n  artifact --1:0-N--> conformsTo;\n  artifact --1:0-1--> additionalType;\n  artifact --1:0-1--> sync;\n  end\n  subgraph artifact-only\n  artifact --1:0-1--> mainEntity;\n  artifact --1:0-1--> contentLocation;\n  end The value for the hasArtifact predicate can be either: a literal, with no further predicates of its owna node (likely a Blank Node) If a node, it MUST have: contentLocation - exactly 1mainEntity - exactly 1 If a node, it MAY have: conformsTo - at most 1additionalType - at most 1sync - at most 1. If present, value must be false, e.g. true is default",{"id":149,"title":150,"titles":151,"content":152,"level":39},"/kgmanifest/model#artifact-versioning-1","Artifact: versioning",[27,136],"If a node, an Artifact MAY have: dateModified - at most 1versionIRI - at most 1version - at most 1 graph LR\n  style artifact fill:#F8F8E1,stroke:#666,stroke-width:2px  \n  subgraph versioning\n  artifact --1:0-1--> dateModified;\n  artifact --1:0-1--> versionIRI;\n  artifact --1:0-1--> version;\n  end",{"id":154,"title":155,"titles":156,"content":157,"level":20},"/kgmanifest/model#annex-b-manifest-validator","Annex B: Manifest Validator",[27],"--8\u003C-- \"docs/assets/validator.ttl\" html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"id":159,"title":160,"titles":161,"content":162,"level":9},"/kgmanifest/mrr","Manifest Resource Roles Vocabulary",[],"This roles vocabulary contains the allowed Roles that a resource, described within a ResourceDescriptor, can play with respect to a Manifest.",{"id":164,"title":165,"titles":166,"content":167,"level":20},"/kgmanifest/mrr#identifier","Identifier",[160],"The IRI of this vocabulary is: https://prez.dev/ManifestResourceRoles The vocab namespace is https://prez.dev/ManifestResourceRoles/. The recommended namespace prefix is mrr.",{"id":169,"title":170,"titles":171,"content":172,"level":20},"/kgmanifest/mrr#human-readable","Human-readable",[160],"The human-readable form of this vocabulary is as follows: Concept IRILabelDefinitionParentmrr:CatalogueDataCatalogue DataData for the catalogue, usually a Catalogue, including the identity of it and each item fo resource-mrr:ResourceDataResource DataData for the resource of the catalogue-mrr:CatalogueAndResourceModelCatalogue & Resource ModelThe default model for the catalogue and the resource. Must be a set of SHACL Shapes-mrr:CatalogueModelCatalogue ModelThe default model for the catalogue. Must be a set of SHACL Shapesmrr:CatalogueAndResourceModelmrr:ResourceModelResource ModelThe default model for the resource. Must be a set of SHACL Shapesmrr:CatalogueAndResourceModelmrr:CompleteCatalogueAndResourceLabelsComplete Resource & Catalogue LabelsAll the labels - possibly including names, descriptions & seeAlso links - for the Catalogue and Resource objects-mrr:IncompleteCatalogueAndResourceLabelsIncomplete Resource & Catalogue LabelsSome of the labels - possibly including names, descriptions & seeAlso links - for the Catalogue and Resource objects-",{"id":174,"title":175,"titles":176,"content":177,"level":20},"/kgmanifest/mrr#machine-readable","Machine-readable",[160],"The machine-readable form of this vocabulary, in RDF's Turtle syntax, is: --8\u003C-- \"docs/assets/mrr.ttl\"",{"id":179,"title":180,"titles":181,"content":182,"level":9},"/kgmanifest/ont","Prez Ontology",[],"==Here will soon be the ontology!== You should probably look at the KG Manifest Model for now...",{"id":184,"title":27,"body":185,"code":1499,"date":1499,"description":1499,"editorContent":1499,"extension":1500,"icon":1499,"meta":1501,"navigation":1502,"path":26,"seo":1503,"source":1499,"stem":1504,"tags":1499,"__hash__":1505},"kgmanifest/kgmanifest/model.md",{"type":186,"value":187,"toc":1470},"minimark",[188,192,195,221,225,229,355,365,368,520,524,527,595,598,601,643,649,710,713,716,725,776,779,788,791,852,855,858,881,888,891,898,912,920,923,926,929,932,940,943,946,952,955,964,970,977,991,997,1000,1008,1014,1017,1024,1030,1033,1039,1045,1048,1050,1053,1068,1083,1115,1118,1121,1135,1138,1147,1150,1160,1215,1227,1232,1246,1251,1275,1282,1296,1346,1352,1360,1363,1373,1376,1394,1400,1406,1423,1457,1460,1466],[189,190,191],"p",{},"A KG Manifest is an RDF file that describes and links to a set of resources that can be loaded into an RDF database for Prez to provide access to.",[189,193,194],{},"This page defines the KG Manifest specification and links to relevant tools.",[196,197,198,206,211,216],"ol",{},[199,200,201],"li",{},[202,203,205],"a",{"href":204},"#model","The model",[199,207,208],{},[202,209,160],{"href":210},"#roles-vocabulary",[199,212,213],{},[202,214,78],{"href":215},"#examples",[199,217,218],{},[202,219,122],{"href":220},"#tools",[222,223,32],"h2",{"id":224},"model",[226,227,36],"h3",{"id":228},"overview",[230,231,235],"pre",{"className":232,"code":233,"language":234,"meta":14,"style":14},"language-mermaid shiki shiki-themes light-plus dark-plus","graph LR\n  style Manifest fill:#FF90BB,stroke:#666,stroke-width:2px\n  Manifest --1:1-N--> ResourceDescriptor;\n  style ResourceDescriptor fill:#FFC1DA,stroke:#666,stroke-width:2px\n  style artifact fill:#F8F8E1,stroke:#666,stroke-width:2px \n  ResourceDescriptor --1:1-N--> artifact;\n  ResourceDescriptor --1:1--> hasRole;\n  ResourceDescriptor --1:0-N--> conformsTo;\n  ResourceDescriptor --1:0-1--> additionalType;\n  ResourceDescriptor --1:0-1--> sync;\n  style artifact fill:#F8F8E1,stroke:#666,stroke-width:2px  \n  artifact --1:0-N--> conformsTo;\n  artifact --1:0-1--> additionalType;\n  artifact --1:0-1--> sync;\n  artifact --1:0-1--> mainEntity;\n  artifact --1:0-1--> contentLocation;\n  style artifact fill:#F8F8E1,stroke:#666,stroke-width:2px  \n  artifact --1:0-1--> dateModified;\n  artifact --1:0-1--> versionIRI;\n  artifact --1:0-1--> version;\n","mermaid",[236,237,238,245,250,255,260,266,272,278,284,290,296,302,308,314,320,326,332,337,343,349],"code",{"__ignoreMap":14},[239,240,242],"span",{"class":241,"line":9},"line",[239,243,244],{},"graph LR\n",[239,246,247],{"class":241,"line":20},[239,248,249],{},"  style Manifest fill:#FF90BB,stroke:#666,stroke-width:2px\n",[239,251,252],{"class":241,"line":39},[239,253,254],{},"  Manifest --1:1-N--> ResourceDescriptor;\n",[239,256,257],{"class":241,"line":50},[239,258,259],{},"  style ResourceDescriptor fill:#FFC1DA,stroke:#666,stroke-width:2px\n",[239,261,263],{"class":241,"line":262},5,[239,264,265],{},"  style artifact fill:#F8F8E1,stroke:#666,stroke-width:2px \n",[239,267,269],{"class":241,"line":268},6,[239,270,271],{},"  ResourceDescriptor --1:1-N--> artifact;\n",[239,273,275],{"class":241,"line":274},7,[239,276,277],{},"  ResourceDescriptor --1:1--> hasRole;\n",[239,279,281],{"class":241,"line":280},8,[239,282,283],{},"  ResourceDescriptor --1:0-N--> conformsTo;\n",[239,285,287],{"class":241,"line":286},9,[239,288,289],{},"  ResourceDescriptor --1:0-1--> additionalType;\n",[239,291,293],{"class":241,"line":292},10,[239,294,295],{},"  ResourceDescriptor --1:0-1--> sync;\n",[239,297,299],{"class":241,"line":298},11,[239,300,301],{},"  style artifact fill:#F8F8E1,stroke:#666,stroke-width:2px  \n",[239,303,305],{"class":241,"line":304},12,[239,306,307],{},"  artifact --1:0-N--> conformsTo;\n",[239,309,311],{"class":241,"line":310},13,[239,312,313],{},"  artifact --1:0-1--> additionalType;\n",[239,315,317],{"class":241,"line":316},14,[239,318,319],{},"  artifact --1:0-1--> sync;\n",[239,321,323],{"class":241,"line":322},15,[239,324,325],{},"  artifact --1:0-1--> mainEntity;\n",[239,327,329],{"class":241,"line":328},16,[239,330,331],{},"  artifact --1:0-1--> contentLocation;\n",[239,333,335],{"class":241,"line":334},17,[239,336,301],{},[239,338,340],{"class":241,"line":339},18,[239,341,342],{},"  artifact --1:0-1--> dateModified;\n",[239,344,346],{"class":241,"line":345},19,[239,347,348],{},"  artifact --1:0-1--> versionIRI;\n",[239,350,352],{"class":241,"line":351},20,[239,353,354],{},"  artifact --1:0-1--> version;\n",[189,356,357],{},[358,359,360,361,364],"em",{},"See ",[202,362,136],{"href":363},"#annex-a-diagram-breakdown"," below for a part-by-part explanation of this diagram.",[222,366,42],{"id":367},"rules",[196,369,370,385,410,413,423,434,477,490,508],{},[199,371,372,373,376,377,380,381,384],{},"An instance of the Manifest class, ",[236,374,375],{},"prez:Manifest",", MUST have 1 or more Resource Descriptors, ",[236,378,379],{},"prof:ResourceDescriptor"," instances, indicated by the ",[236,382,383],{},"prof:hasResource"," predicate. The Manifest instance can be identified by an IRI or a Blank Node.",[199,386,387,388,391,392,395,396,399,400],{},"Each Resource Descriptor MUST have at least one ",[236,389,390],{},"prof:hasArtifact"," predicate indicating either an RDF literal resource (a string) containing the location of the artifact or a Blank Node containing the location of the artifacts indicated by the ",[236,393,394],{},"schema:contentLocation"," predicate and the main artifact IRI within that content location indicated by ",[236,397,398],{},"schema:mainEntity",".",[401,402,403],"ul",{},[199,404,405,406,409],{},"See the ",[202,407,58],{"href":408},"#main-entity"," details below",[199,411,412],{},"Where content location is indicated, it MUST be a file path or path pattern relative to the manifest or a URL.",[199,414,415,416,419,420,399],{},"Each Resource Descriptor MUST also have exactly one ",[236,417,418],{},"prof:hasRole"," predicate indicating a Concept from the ",[202,421,160],{"href":422},"mrr",[199,424,425,426,429,430,433],{},"Each Resource Descriptor MAY have a ",[236,427,428],{},"schema:name"," and/or a ",[236,431,432],{},"schema:description"," predicate indicating literal resources naming and describing it.",[199,435,436,437,399,440],{},"A Resource, or an Artifact, MAY indicate that it (if an Artifact) or the Artifacts within it (if a Resource) conform to any number of defined Standards or Profiles of Standards, using the predicate ",[236,438,439],{},"dcterms:conformsTo",[401,441,442,471],{},[199,443,444,445],{},"Validators can be indicated either by using \"well known\" validator IRIs or by directly indicating the validator RDF file\n",[401,446,447,450,455,466],{},[199,448,449],{},"current \"well known\" are listed below and can be indicated using an IRI like this:",[199,451,452],{},[236,453,454],{},"dcterms:conformsTo \u003CWELL-KNONW-VALIDATOR-IRI> ;",[199,456,457,458,461,462,465],{},"other validators, such as ",[236,459,460],{},"my-local-validator.ttl"," or ",[236,463,464],{},"http://online-validator.com/val.ttl"," should be indicated using a literal, like this:",[199,467,468],{},[236,469,470],{},"dcterms:conformsTo \"path/from/manifest/root/to/my-local-validator.ttl\" ;",[199,472,405,473,476],{},[202,474,47],{"href":475},"#known-validators"," list below",[199,478,479,480,483],{},"A Resource, or an Artifact, MAY indicate that it (if an Artifact) or the Artifacts within it (if a Resource) is of a specific class, using the predicate ",[236,481,482],{},"schema:additionalType",[401,484,485],{},[199,486,405,487,476],{},[202,488,53],{"href":489},"#known-classes",[199,491,492,493,496,497,500],{},"A Resource, or an Artifact, MAY indicate that it should not be ignored by synchronisation tooling by setting a predicate ",[236,494,495],{},"prez:sync"," to ",[236,498,499],{},"false",[401,501,502],{},[199,503,405,504,507],{},[202,505,63],{"href":506},"#indicating-no-action"," section below",[199,509,510,511],{},"An Artifact may have \"versioning information\" about it indicated by use of a number of known versioning predicates",[401,512,513],{},[199,514,515,516,507],{},"see the ",[202,517,519],{"href":518},"#artifact-versioning","Artifact Versioning",[521,522,47],"h4",{"id":523},"known-validators",[189,525,526],{},"The following validators can be referred to by IRI, as described above:",[528,529,530,552],"table",{},[531,532,533],"thead",{},[534,535,536,542,547],"tr",{},[537,538,539],"th",{},[358,540,541],{},"Validator",[537,543,544],{},[358,545,546],{},"IRI",[537,548,549],{},[358,550,551],{},"Scope",[553,554,555,569,582],"tbody",{},[534,556,557,561,566],{},[558,559,560],"td",{},"GeoSPARQL",[558,562,563],{},[236,564,565],{},"\u003Chttp://www.opengis.net/def/geosparql/validator>",[558,567,568],{},"Spatial Objects",[534,570,571,574,579],{},[558,572,573],{},"IDN Catalogue Profile",[558,575,576],{},[236,577,578],{},"\u003Chttps://data.idnau.org/pid/cp/validator>",[558,580,581],{},"Catalogued resources containing Indigenous metadata",[534,583,584,587,592],{},[558,585,586],{},"VocPub",[558,588,589],{},[236,590,591],{},"\u003Chttps://linked.data.gov.au/def/vocpub>",[558,593,594],{},"Vocabularies",[521,596,53],{"id":597},"known-classes",[189,599,600],{},"Some classes of resource are commonly catalogued and, when they are, their class does not need to be indicated within a Manifest. These classes are:",[401,602,603,608,613,618,623,628,633,638],{},[199,604,605],{},[236,606,607],{},"dcat:Resource",[199,609,610],{},[236,611,612],{},"dcat:Dataset",[199,614,615],{},[236,616,617],{},"dcat:Catalog",[199,619,620],{},[236,621,622],{},"owl:Ontology",[199,624,625],{},[236,626,627],{},"schema:CreativeWork",[199,629,630],{},[236,631,632],{},"schema:Dataset",[199,634,635],{},[236,636,637],{},"schema:DataCatalog",[199,639,640],{},[236,641,642],{},"skos:ConceptScheme",[189,644,645,646,648],{},"If an Artifact, or all the Artifacts within a Resource, are not one of these types, then they can be indicated as being so by use of ",[236,647,482],{}," like this:",[230,650,654],{"className":651,"code":652,"language":653,"meta":14,"style":14},"language-turtle shiki shiki-themes light-plus dark-plus","[]\n    a prez:Manifest ;\n    prof:hasResource\n        # ...\n        [\n            prof:hasArtifact \"resources/*.ttl\" ;\n            prof:hasRole mrr:ResourceData ;\n            schema:additionalType \u003C{A-CLASS-IRI}> ;\n        ] ,\n        # ...\n.\n","turtle",[236,655,656,661,666,671,676,681,686,691,696,701,705],{"__ignoreMap":14},[239,657,658],{"class":241,"line":9},[239,659,660],{},"[]\n",[239,662,663],{"class":241,"line":20},[239,664,665],{},"    a prez:Manifest ;\n",[239,667,668],{"class":241,"line":39},[239,669,670],{},"    prof:hasResource\n",[239,672,673],{"class":241,"line":50},[239,674,675],{},"        # ...\n",[239,677,678],{"class":241,"line":262},[239,679,680],{},"        [\n",[239,682,683],{"class":241,"line":268},[239,684,685],{},"            prof:hasArtifact \"resources/*.ttl\" ;\n",[239,687,688],{"class":241,"line":274},[239,689,690],{},"            prof:hasRole mrr:ResourceData ;\n",[239,692,693],{"class":241,"line":280},[239,694,695],{},"            schema:additionalType \u003C{A-CLASS-IRI}> ;\n",[239,697,698],{"class":241,"line":286},[239,699,700],{},"        ] ,\n",[239,702,703],{"class":241,"line":292},[239,704,675],{},[239,706,707],{"class":241,"line":298},[239,708,709],{},".\n",[189,711,712],{},"This will allow the Manifest to communicate the class of the object software should be looking for within the resource.",[521,714,58],{"id":715},"main-entity",[189,717,718,719,721,722,724],{},"If, for some reason, a resource is neither of one of the Known Classes nore it its class able to be indicated with ",[236,720,482],{},", the specific IRI of the resource can be indicated using ",[236,723,398],{},". This may be needed in situations where an RDF file containing a resource also contains multiple other instance of the same class.",[230,726,728],{"className":651,"code":727,"language":653,"meta":14,"style":14},"[]\n    a prez:Manifest ;\n    prof:hasResource\n        # ...\n        [\n            prof:hasArtifact \"resources/file1.ttl\" ;\n            prof:hasRole mrr:ResourceData ;\n            schema:mainEntity \u003C{RESOURCE-IRI}> ;\n        ] ,\n        # ...\n.\n",[236,729,730,734,738,742,746,750,755,759,764,768,772],{"__ignoreMap":14},[239,731,732],{"class":241,"line":9},[239,733,660],{},[239,735,736],{"class":241,"line":20},[239,737,665],{},[239,739,740],{"class":241,"line":39},[239,741,670],{},[239,743,744],{"class":241,"line":50},[239,745,675],{},[239,747,748],{"class":241,"line":262},[239,749,680],{},[239,751,752],{"class":241,"line":268},[239,753,754],{},"            prof:hasArtifact \"resources/file1.ttl\" ;\n",[239,756,757],{"class":241,"line":274},[239,758,690],{},[239,760,761],{"class":241,"line":280},[239,762,763],{},"            schema:mainEntity \u003C{RESOURCE-IRI}> ;\n",[239,765,766],{"class":241,"line":286},[239,767,700],{},[239,769,770],{"class":241,"line":292},[239,771,675],{},[239,773,774],{"class":241,"line":298},[239,775,709],{},[521,777,63],{"id":778},"indicating-no-action",[189,780,781,782,784,785,787],{},"If a Manifest wishes to list a resource but indicate it not for automatic handling by manifest tooling - perhaps it's too large to synchronise with an RDF DB - then the predicate ",[236,783,495],{}," with the value ",[236,786,499],{}," should be set.",[189,789,790],{},"Here is an example of a Manifest indicating 4 spatial datasets, one of which is too large to sync:",[230,792,794],{"className":651,"code":793,"language":653,"meta":14,"style":14},"[]\n    a prez:Manifest ;\n    prof:hasResource\n        [\n            prof:hasArtifact \"resources/*.ttl\" ;  # datset1.ttl, dataset2.ttl & dataset3.ttl\n            prof:hasRole mrr:ResourceData ;\n        ] ,\n        [\n            prof:hasArtifact \"resources/large/dataset4.ttl\" ;\n            prof:hasRole mrr:ResourceData ;\n            prez:sync false ;\n        ] ;\n.        \n",[236,795,796,800,804,808,812,817,821,825,829,834,838,843,848],{"__ignoreMap":14},[239,797,798],{"class":241,"line":9},[239,799,660],{},[239,801,802],{"class":241,"line":20},[239,803,665],{},[239,805,806],{"class":241,"line":39},[239,807,670],{},[239,809,810],{"class":241,"line":50},[239,811,680],{},[239,813,814],{"class":241,"line":262},[239,815,816],{},"            prof:hasArtifact \"resources/*.ttl\" ;  # datset1.ttl, dataset2.ttl & dataset3.ttl\n",[239,818,819],{"class":241,"line":268},[239,820,690],{},[239,822,823],{"class":241,"line":274},[239,824,700],{},[239,826,827],{"class":241,"line":280},[239,828,680],{},[239,830,831],{"class":241,"line":286},[239,832,833],{},"            prof:hasArtifact \"resources/large/dataset4.ttl\" ;\n",[239,835,836],{"class":241,"line":292},[239,837,690],{},[239,839,840],{"class":241,"line":298},[239,841,842],{},"            prez:sync false ;\n",[239,844,845],{"class":241,"line":304},[239,846,847],{},"        ] ;\n",[239,849,850],{"class":241,"line":310},[239,851,709],{},[226,853,68],{"id":854},"artifact-versioning",[189,856,857],{},"An Artifact's version may be indicated by use of any or all of the following predicates:",[401,859,860,865,873],{},[199,861,862],{},[236,863,864],{},"owl:versionIRI",[199,866,867,461,870],{},[236,868,869],{},"schema:version",[236,871,872],{},"owl:versionInfo",[199,874,875,461,878],{},[236,876,877],{},"schema:dateModified",[236,879,880],{},"dcterms:modified",[189,882,883,884,887],{},"If this is done, then tools, such as ",[358,885,886],{},"kgmanifest"," that load and sync Manifest-described data, can obtain versioning information from a Manifest file, rather than by inspecting Artifacts' contents.",[222,889,73],{"id":890},"validation",[189,892,893,894,897],{},"The validator - a file containing rules - for Manifests is given in ",[202,895,155],{"href":896},"#annex-b-manifest-validator"," below.",[189,899,900,901,903,904,907,908,911],{},"A manifest and all its content can also be validated using the ",[358,902,886],{}," tool's ",[358,905,906],{},"validate"," function which both validates a Manifest file using the validator below and also any content for which a ",[358,909,910],{},"conformance claim"," is given.",[189,913,405,914,916,917,919],{},[202,915,122],{"href":220}," section below for info on the ",[358,918,886],{}," tool.",[189,921,922],{},"Additionally, any stand-alon SHACL validator can also be used to validate a Manifest. Again, see the tools section below.",[222,924,78],{"id":925},"examples",[226,927,82],{"id":928},"valid",[189,930,931],{},"A simple, valid, Manifest.",[230,933,938],{"className":934,"code":936,"language":937},[935],"language-text","--8\u003C-- \"docs/assets/manifest.ttl\"\n","text",[236,939,936],{"__ignoreMap":14},[226,941,87],{"id":942},"invalid-no-role",[189,944,945],{},"The second Resource Descriptor does not indicate a role as it is commented out.",[230,947,950],{"className":948,"code":949,"language":937},[935],"--8\u003C-- \"docs/assets/manifest-invalid-01.ttl\"\n",[236,951,949],{"__ignoreMap":14},[226,953,92],{"id":954},"invalid-bad-location",[189,956,957,958,963],{},"The third resource specifies an invalid location, the non-existent web address of ",[202,959,960],{"href":960,"rel":961},"https://github.com/RDFLib/prez/blob/main/prez/reference_data/profiles/ogc_records_profile.ttlx",[962],"nofollow"," which has had an extra 'x' added at the end.",[230,965,968],{"className":966,"code":967,"language":937},[935],"--8\u003C-- \"docs/assets/manifest-invalid-03.ttl\"\n",[236,969,967],{"__ignoreMap":14},[226,971,973,976],{"id":972},"mainentity-use",[236,974,975],{},"mainEntity"," use",[189,978,979,980,983,984,986,987,990],{},"A snippet of a Manifest - just one value for ",[236,981,982],{},"hasResource"," - showing use of ",[236,985,975],{}," and ",[236,988,989],{},"contentLocation"," instead of just a literal file path.",[230,992,995],{"className":993,"code":994,"language":937},[935],"    [\n        prof:hasArtifact\n            [\n                schema:contentLocation \"vocabs/image-test.ttl\" ;\n                schema:mainEntity \u003Chttps://example.com/demo-vocabs/image-test> ;\n            ] ,\n            \"vocabs/language-test.ttl\" ;\n        prof:hasRole mrr:ResourceData ;\n        schema:description \"skos:ConceptScheme objects in RDF (Turtle) files in the vocabs/ folder\" ;\n        schema:name \"Resource Data\"\n    ] ,\n",[236,996,994],{"__ignoreMap":14},[226,998,102],{"id":999},"conformance-claim-single",[189,1001,1002,1003,399],{},"A single artifact claiming conformance to the ",[202,1004,1007],{"href":1005,"rel":1006},"https://linked.data.gov.au/def/vocpub",[962],"VocPub Profile of SKOS",[230,1009,1012],{"className":1010,"code":1011,"language":937},[935],"    prof:hasArtifact\n        [\n            schema:contentLocation \"vocabs/image-test.ttl\" ;\n            schema:mainEntity \u003Chttps://example.com/demo-vocabs/image-test> ;\n            dcterms:conformsTo \u003Chttps://linked.data.gov.au/def/vocpub> ;\n        ] ,\n",[236,1013,1011],{"__ignoreMap":14},[226,1015,107],{"id":1016},"conformance-claim-all",[189,1018,1019,1020,1023],{},"A single Resource in a Manifest claiming conformance to the ",[202,1021,1007],{"href":1005,"rel":1022},[962]," for all artifacts (there are 3 given).",[230,1025,1028],{"className":1026,"code":1027,"language":937},[935],"    [\n        prof:hasArtifact\n            [\n                schema:contentLocation \"vocabs/image-test.ttl\" ;\n                schema:mainEntity \u003Chttps://example.com/demo-vocabs/image-test> ;\n            ] ,\n            \"vocabs/language-test.ttl\" ;\n            \"vocabs/other-vocab.ttl\" ;\n        prof:hasRole mrr:ResourceData ;\n        # ...\n        dcterms:conformsTo \u003Chttps://linked.data.gov.au/def/vocpub> ;\n    ] ,\n",[236,1029,1027],{"__ignoreMap":14},[226,1031,112],{"id":1032},"conformance-claim-supplied-validator",[189,1034,1035,1036,1038],{},"To indicate a validator stored in a local file, ",[236,1037,460],{},":",[230,1040,1043],{"className":1041,"code":1042,"language":937},[935],"    [\n        prof:hasArtifact\n            [\n                schema:contentLocation \"vocabs/image-test.ttl\" ;\n                schema:mainEntity \u003Chttps://example.com/demo-vocabs/image-test> ;\n            ] ,\n            \"vocabs/language-test.ttl\" ;\n            \"vocabs/other-vocab.ttl\" ;\n        prof:hasRole mrr:ResourceData ;\n        # ...\n        dcterms:conformsTo \"path/to/my-local-validator.ttl\" ;\n    ] ,\n",[236,1044,1042],{"__ignoreMap":14},[226,1046,117],{"id":1047},"additionaltype",[189,1049,119],{},[222,1051,122],{"id":1052},"tools",[226,1054,1056,1057,1062,1063],{"id":1055},"kgmanifest-github-pypi","kgmanifest - ",[202,1058,1061],{"href":1059,"rel":1060},"https://github.com/Kurrawong/kg-manifest",[962],"GitHub",", ",[202,1064,1067],{"href":1065,"rel":1066},"https://pypi.org/project/kgmanifest/",[962],"PyPI",[189,1069,1070,1071,1073,1074,1078,1079,1082],{},"The ",[358,1072,886],{}," command line tool and Python package, available on ",[202,1075,1061],{"href":1076,"rel":1077},"https://github.com/Kurrawong/prez-manifest",[962]," and on ",[202,1080,1067],{"href":1065,"rel":1081},[962],", provides a number of functions to work with KG Manifests. The functions provided are:",[401,1084,1085,1091,1097,1103,1109],{},[199,1086,1087,1090],{},[1088,1089,906],"strong",{}," - validate a Manifest file and contents",[199,1092,1093,1096],{},[1088,1094,1095],{},"label"," - check Manifest contents for unlabelled elements",[199,1098,1099,1102],{},[1088,1100,1101],{},"document"," - create certain forms of documentation",[199,1104,1105,1108],{},[1088,1106,1107],{},"load"," - load a Manifest's content into a file or DB",[199,1110,1111,1114],{},[1088,1112,1113],{},"sync"," - synchronise a Manifest's contents with a DB",[189,1116,1117],{},"See the package's repository for installation and use details.",[226,1119,131],{"id":1120},"shacl-validation",[189,1122,1123,1124,903,1126,1128,1129,1134],{},"The preferred way to perform validation of a KG Manifest file is to use the ",[358,1125,886],{},[358,1127,906],{}," function, as listed above. Hoever, you can also perform validation of a manifest - the manifest file only, not the content it refers to, using any one of a number of ",[202,1130,1133],{"href":1131,"rel":1132},"https://www.w3.org/TR/shacl/",[962],"SHACL"," validators.",[189,1136,1137],{},"See these notes for a listing of general-purpose SHACL validation tools:",[401,1139,1140],{},[199,1141,1142],{},[202,1143,1146],{"href":1144,"rel":1145},"https://linked.data.gov.au/def/abis#_performing_validation",[962],"ABIS standard's notes on SHACL tooling & validation",[222,1148,136],{"id":1149},"annex-a-diagram-breakdown",[226,1151,1153,1156,1157],{"id":1152},"manifest-resourcedescriptor",[236,1154,1155],{},"Manifest"," & ",[236,1158,1159],{},"ResourceDescriptor",[230,1161,1163],{"className":232,"code":1162,"language":234,"meta":14,"style":14},"graph LR\n  style Manifest fill:#FF90BB,stroke:#666,stroke-width:2px\n  Manifest --1:1-N--> ResourceDescriptor;\n  style ResourceDescriptor fill:#FFC1DA,stroke:#666,stroke-width:2px\n  style artifact fill:#F8F8E1,stroke:#666,stroke-width:2px \n  ResourceDescriptor --1:1-N--> artifact;\n  subgraph main\n  ResourceDescriptor --1:1--> hasRole;\n  ResourceDescriptor --1:0-N--> conformsTo;\n  ResourceDescriptor --1:0-1--> additionalType;\n  ResourceDescriptor --1:0-1--> sync;\n  end\n",[236,1164,1165,1169,1173,1177,1181,1185,1189,1194,1198,1202,1206,1210],{"__ignoreMap":14},[239,1166,1167],{"class":241,"line":9},[239,1168,244],{},[239,1170,1171],{"class":241,"line":20},[239,1172,249],{},[239,1174,1175],{"class":241,"line":39},[239,1176,254],{},[239,1178,1179],{"class":241,"line":50},[239,1180,259],{},[239,1182,1183],{"class":241,"line":262},[239,1184,265],{},[239,1186,1187],{"class":241,"line":268},[239,1188,271],{},[239,1190,1191],{"class":241,"line":274},[239,1192,1193],{},"  subgraph main\n",[239,1195,1196],{"class":241,"line":280},[239,1197,277],{},[239,1199,1200],{"class":241,"line":286},[239,1201,283],{},[239,1203,1204],{"class":241,"line":292},[239,1205,289],{},[239,1207,1208],{"class":241,"line":298},[239,1209,295],{},[239,1211,1212],{"class":241,"line":304},[239,1213,1214],{},"  end\n",[189,1216,1217,1218,1220,1221,1224,1225,399],{},"A ",[236,1219,1155],{}," must indicate ",[358,1222,1223],{},"at least one"," ",[236,1226,1159],{},[189,1228,1229,1231],{},[236,1230,1159],{}," instances MUST have the predicates of:",[401,1233,1234,1240],{},[199,1235,1236,1239],{},[236,1237,1238],{},"hasRole"," - exactly 1",[199,1241,1242,1245],{},[236,1243,1244],{},"hasArtifact","- at least 1",[189,1247,1248,1250],{},[236,1249,1159],{}," instances MAY have the predicates of:",[401,1252,1253,1259,1263],{},[199,1254,1255,1258],{},[236,1256,1257],{},"conformsTo"," - at most 1",[199,1260,1261,1258],{},[236,1262,117],{},[199,1264,1265,1267,1268,1270,1271,1274],{},[236,1266,1113],{}," - at most 1. If present, value must be ",[236,1269,499],{},", e.g. ",[236,1272,1273],{},"true"," is default",[226,1276,1278,1281],{"id":1277},"artifact-description",[236,1279,1280],{},"Artifact",": description",[230,1283,1285],{"className":232,"code":1284,"language":234,"meta":14,"style":14},"graph LR\n  style artifact fill:#F8F8E1,stroke:#666,stroke-width:2px  \n",[236,1286,1287,1291],{"__ignoreMap":14},[239,1288,1289],{"class":241,"line":9},[239,1290,244],{},[239,1292,1293],{"class":241,"line":20},[239,1294,1295],{},"  style artifact fill:#F8F8E1,stroke:#666,stroke-width:2px\n",[230,1297,1299],{"className":232,"code":1298,"language":234,"meta":14,"style":14},"graph LR\n  style artifact fill:#F8F8E1,stroke:#666,stroke-width:2px  \n  subgraph main\n  artifact --1:0-N--> conformsTo;\n  artifact --1:0-1--> additionalType;\n  artifact --1:0-1--> sync;\n  end\n  subgraph artifact-only\n  artifact --1:0-1--> mainEntity;\n  artifact --1:0-1--> contentLocation;\n  end\n",[236,1300,1301,1305,1309,1313,1317,1321,1325,1329,1334,1338,1342],{"__ignoreMap":14},[239,1302,1303],{"class":241,"line":9},[239,1304,244],{},[239,1306,1307],{"class":241,"line":20},[239,1308,301],{},[239,1310,1311],{"class":241,"line":39},[239,1312,1193],{},[239,1314,1315],{"class":241,"line":50},[239,1316,307],{},[239,1318,1319],{"class":241,"line":262},[239,1320,313],{},[239,1322,1323],{"class":241,"line":268},[239,1324,319],{},[239,1326,1327],{"class":241,"line":274},[239,1328,1214],{},[239,1330,1331],{"class":241,"line":280},[239,1332,1333],{},"  subgraph artifact-only\n",[239,1335,1336],{"class":241,"line":286},[239,1337,325],{},[239,1339,1340],{"class":241,"line":292},[239,1341,331],{},[239,1343,1344],{"class":241,"line":298},[239,1345,1214],{},[189,1347,1348,1349,1351],{},"The value for the ",[236,1350,1244],{}," predicate can be either:",[401,1353,1354,1357],{},[199,1355,1356],{},"a literal, with no further predicates of its own",[199,1358,1359],{},"a node (likely a Blank Node)",[189,1361,1362],{},"If a node, it MUST have:",[401,1364,1365,1369],{},[199,1366,1367,1239],{},[236,1368,989],{},[199,1370,1371,1239],{},[236,1372,975],{},[189,1374,1375],{},"If a node, it MAY have:",[401,1377,1378,1382,1386],{},[199,1379,1380,1258],{},[236,1381,1257],{},[199,1383,1384,1258],{},[236,1385,117],{},[199,1387,1388,1267,1390,1270,1392,1274],{},[236,1389,1113],{},[236,1391,499],{},[236,1393,1273],{},[226,1395,1397,1399],{"id":1396},"artifact-versioning-1",[236,1398,1280],{},": versioning",[189,1401,1402,1403,1405],{},"If a node, an ",[236,1404,1280],{}," MAY have:",[401,1407,1408,1413,1418],{},[199,1409,1410,1258],{},[236,1411,1412],{},"dateModified",[199,1414,1415,1258],{},[236,1416,1417],{},"versionIRI",[199,1419,1420,1258],{},[236,1421,1422],{},"version",[230,1424,1426],{"className":232,"code":1425,"language":234,"meta":14,"style":14},"graph LR\n  style artifact fill:#F8F8E1,stroke:#666,stroke-width:2px  \n  subgraph versioning\n  artifact --1:0-1--> dateModified;\n  artifact --1:0-1--> versionIRI;\n  artifact --1:0-1--> version;\n  end\n",[236,1427,1428,1432,1436,1441,1445,1449,1453],{"__ignoreMap":14},[239,1429,1430],{"class":241,"line":9},[239,1431,244],{},[239,1433,1434],{"class":241,"line":20},[239,1435,301],{},[239,1437,1438],{"class":241,"line":39},[239,1439,1440],{},"  subgraph versioning\n",[239,1442,1443],{"class":241,"line":50},[239,1444,342],{},[239,1446,1447],{"class":241,"line":262},[239,1448,348],{},[239,1450,1451],{"class":241,"line":268},[239,1452,354],{},[239,1454,1455],{"class":241,"line":274},[239,1456,1214],{},[222,1458,155],{"id":1459},"annex-b-manifest-validator",[230,1461,1464],{"className":1462,"code":1463,"language":937},[935],"--8\u003C-- \"docs/assets/validator.ttl\"\n",[236,1465,1463],{"__ignoreMap":14},[1467,1468,1469],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":14,"searchDepth":20,"depth":20,"links":1471},[1472,1475,1478,1479,1489,1493,1498],{"id":224,"depth":20,"text":32,"children":1473},[1474],{"id":228,"depth":39,"text":36},{"id":367,"depth":20,"text":42,"children":1476},[1477],{"id":854,"depth":39,"text":68},{"id":890,"depth":20,"text":73},{"id":925,"depth":20,"text":78,"children":1480},[1481,1482,1483,1484,1485,1486,1487,1488],{"id":928,"depth":39,"text":82},{"id":942,"depth":39,"text":87},{"id":954,"depth":39,"text":92},{"id":972,"depth":39,"text":97},{"id":999,"depth":39,"text":102},{"id":1016,"depth":39,"text":107},{"id":1032,"depth":39,"text":112},{"id":1047,"depth":39,"text":117},{"id":1052,"depth":20,"text":122,"children":1490},[1491,1492],{"id":1055,"depth":39,"text":126},{"id":1120,"depth":39,"text":131},{"id":1149,"depth":20,"text":136,"children":1494},[1495,1496,1497],{"id":1152,"depth":39,"text":140},{"id":1277,"depth":39,"text":145},{"id":1396,"depth":39,"text":150},{"id":1459,"depth":20,"text":155},null,"md",{},true,{"title":27,"description":1499},"kgmanifest/model","xKsOxV1QIvQ7jtRuSIFmlhoQQwMtTMQdXv1FH_0Ehgw",[1507],{"title":6,"path":5,"stem":1508,"children":1509,"tags":1499},"kgmanifest/1.index",[1510,1511,1513,1514,1516],{"title":6,"path":5,"stem":1508,"tags":1499},{"title":12,"path":11,"stem":1512,"tags":1499},"kgmanifest/2.quickstart",{"title":27,"path":26,"stem":1504,"tags":1499},{"title":160,"path":159,"stem":1515,"tags":1499},"kgmanifest/mrr",{"title":180,"path":179,"stem":1517,"tags":1499},"kgmanifest/ont",1774621042750]