# Knowledge Object Overview

Conceptually, a knowledge object represents computable knowledge as both a resource and a service. That is, it contains description of what it does, and the code to do it. Also, in order to make the object findable, accessible, interoperable, and reusable (FAIR), the KO has enough metadata to describe itself as both resource and service.

Here's a picture....


KO Layout


Let's take a look at what's inside a knowledge object ....

├── js-simple-v1.0
    ├── metadata.json
    ├── service.yaml
    ├── deployment.yaml
    └── src
        └── index.js

# Metadata

In the packaged object, metadata is kept in a json file.

Metadata includes an identifier, minimal description data, and required knowledge object properties from the Knowledge Object Implementation Ontology (KOIO)

js-simple-v1.0/metadata.json

{
  "@id": "js/simple/v1.0",
  "@type":"koio:KnowledgeObject",
  "identifier": "ark:/js/simple/v1.0",
  "version":"v1.0",
  "title": "Hello world",
  "description":"An example of simple Knowledge Object",
  "keywords":["Hello","example"],
  "hasServiceSpecification": "service.yaml",
  "hasDeploymentSpecification": "deployment.yaml",
  "hasPayload": "src/index.js",
  "@context" : ["http://kgrid.org/koio/contexts/knowledgeobject.jsonld" ]
}

Descriptive metadata elements like title or description, administrative metadata like identifier, and technical metadata like the koio:KnowledgeObject are described in the Metadata section in KGrid Common Object Package specifications (opens new window). We recommend using standard dcterms metadata elements, or similar. Some items may be required. You may add additional descriptive or domain specific metadata elements as needed. We recommend you use standard vocabularies and express them in the context element so as to enable metadata use in linked data scenarios.

Last Updated: 4/20/2021, 6:00:00 PM