UNPKG

@stencila/schema

Version:

Extensions to schema.org to support semantic, composable, parameterize-able and executable documents

316 lines (315 loc) 9.41 kB
{ "title": "CodeChunk", "@id": "stencila:CodeChunk", "extends": "CodeBlock", "category": "code", "role": "secondary", "status": "unstable", "description": "A executable chunk of code.", "$comment": "A `CodeChunk` has two 'source' properties, `text` and `programmingLanguage`, from which it's other properties\nare derived during compilation (e.g. `import`, `declares`) or execution (e.g. `outputs`).\n\nAll `CodeChunk`s are required to have a `text` property, containing the actual code,\nand most will also specify the `programmingLanguage`. If `programmingLanguage` is not specified\nthen it defaults to the language of the previous `CodeChunk` or `CodeExpression` in the document.\n\nThe `imports` property lists the packages that a `CodeChunk` imports into the execution context.\nIt is used by the compiler to populate the `requires` property of the document containing the\nchunk so that it can build an execution environment for it (e.g. a Docker container).\n\nThe `declares` property lists the variables that a `CodeChunk` declares.\nIt is used by the compiler to build a graph of the dependencies among `CodeChunk`s and `CodeExpressions`.\nThis in turn allows for reactivity. When a user changes a chunk containing a declaration,\nall of the other chunks or expressions that use that variable will be re-executed.\n", "properties": { "type": { "@id": "schema:type", "description": "The name of the type.", "type": "string", "enum": [ "CodeChunk" ], "default": "CodeChunk", "from": "Entity" }, "id": { "@id": "schema:id", "description": "The identifier for this item.", "type": "string", "from": "Entity" }, "meta": { "@id": "stencila:meta", "description": "Metadata associated with this item.", "type": "object", "from": "Entity" }, "programmingLanguage": { "@id": "schema:programmingLanguage", "description": "The programming language of the code.", "type": "string", "from": "Code" }, "format": { "@id": "schema:encodingFormat", "aliases": [ "encoding", "encodingFormat" ], "description": "Media type, typically expressed using a MIME format, of the code.", "$comment": "This property allows the differentiation of formats using the same programming language\nor variants of a programming language. An example is using `programmingLanguage` \"json\" and\n`encodingFormat` \"application/ld+json\" for JSON-LD code examples.\n", "type": "string", "from": "Code" }, "text": { "@id": "schema:text", "description": "The text of the code.", "type": "string", "from": "Code" }, "exportFrom": { "@id": "stencila:exportFrom", "aliases": [ "export" ], "description": "A compilation directive giving the name of the variable to export\ninto the content of the code block.\n", "type": "string", "from": "CodeBlock" }, "importTo": { "@id": "stencila:importTo", "aliases": [ "export" ], "description": "A compilation directive giving the name of the variable to import\nthe content of the code block as.\n", "type": "string", "from": "CodeBlock" }, "caption": { "@id": "schema:caption", "description": "A caption for the CodeChunk.", "$comment": "An array of nodes or, to be compatible with https://schema.org/caption,\na string.\n", "anyOf": [ { "type": "array", "items": { "$ref": "BlockContent.schema.json" } }, { "type": "string" } ], "from": "CodeChunk" }, "label": { "@id": "stencila:label", "description": "A short label for the CodeChunk.", "type": "string", "from": "CodeChunk" }, "imports": { "@id": "stencila:imports", "description": "Software packages that the code chunk imports", "type": "array", "items": { "anyOf": [ { "$ref": "SoftwareSourceCode.schema.json" }, { "$ref": "SoftwareApplication.schema.json" }, { "type": "string" } ] }, "from": "CodeChunk", "isArray": true, "isPlural": true, "aliases": [ "import" ] }, "declares": { "@id": "stencila:declares", "description": "Variables that the code chunk declares.", "type": "array", "items": { "anyOf": [ { "$ref": "Variable.schema.json" }, { "$ref": "Function.schema.json" }, { "type": "string" } ] }, "from": "CodeChunk", "isArray": true, "isPlural": true, "aliases": [ "declare" ] }, "assigns": { "@id": "stencila:assigns", "description": "Variables that the code chunk assigns to.", "type": "array", "items": { "anyOf": [ { "$ref": "Variable.schema.json" }, { "type": "string" } ] }, "$comment": "In languages such as Python and R we are unable\nto differentiate between an assignment that\nis a declaration and an assignment that is an alteration\n(a re-assignment).\nThe \"primary\" compiler keeps a track of the variables\ndeclared in code chunks prior to the current chunk in the\ndocument and may treat an assignment as a declaration.\n", "from": "CodeChunk", "isArray": true, "isPlural": true, "aliases": [ "assign" ] }, "alters": { "@id": "stencila:alters", "description": "Names of variables that the code chunk alters.", "type": "array", "items": { "type": "string" }, "$comment": "This property allows users to add undetected\nalterations (i.e. not assignments) to this list. Chunks that alter a variable\nneed to be inserted into the dependency graph between `declares` and `uses`\n", "from": "CodeChunk", "isArray": true, "isPlural": true, "aliases": [ "alter" ] }, "uses": { "@id": "stencila:uses", "description": "Names of variables that the code chunk uses (but does not alter).", "type": "array", "items": { "anyOf": [ { "$ref": "Variable.schema.json" }, { "type": "string" } ] }, "from": "CodeChunk", "isArray": true, "isPlural": true, "aliases": [ "use" ] }, "reads": { "@id": "stencila:reads", "description": "Filesystem paths that this code chunk reads from.", "type": "array", "items": { "type": "string" }, "from": "CodeChunk", "isArray": true, "isPlural": true, "aliases": [ "read" ] }, "outputs": { "@id": "stencila:outputs", "description": "Outputs from executing the chunk.", "type": "array", "items": { "$ref": "Node.schema.json" }, "from": "CodeChunk", "isArray": true, "isPlural": true, "aliases": [ "output" ] }, "errors": { "@id": "stencila:errors", "description": "Errors when compiling or executing the chunk.", "type": "array", "items": { "$ref": "CodeError.schema.json" }, "from": "CodeChunk", "isArray": true, "isPlural": true, "aliases": [ "error" ] }, "duration": { "@id": "stencila:duration", "description": "Duration in seconds of the last execution of the chunk.", "type": "number", "minimum": 0, "from": "CodeChunk" } }, "examples": [ { "type": "CodeChunk", "language": "python", "text": "print('Hello world')" }, { "type": "CodeChunk", "language": "r", "text": "superdoopa::func(\"beep\", \"boop\")\n", "imports": [ "superdoopa" ] }, { "type": "CodeChunk", "language": "python", "text": "def greet(who: str):\n return 'Hello %s!' % who\n", "declares": [ { "type": "Function", "name": "greet", "parameters": [ { "type": "Parameter", "name": "who", "schema": [ { "type": "StringValidator" } ] } ] } ] } ], "file": "CodeChunk.schema.yaml", "children": [], "descendants": [], "$schema": "http://json-schema.org/draft-07/schema#", "$id": "https://schema.stenci.la/v1/CodeChunk.schema.json", "source": "https://github.com/stencila/schema/blob/master/schema/CodeChunk.schema.yaml", "type": "object", "propertyAliases": { "encoding": "format", "encodingFormat": "format", "export": "importTo", "import": "imports", "declare": "declares", "assign": "assigns", "alter": "alters", "use": "uses", "read": "reads", "output": "outputs", "error": "errors" }, "additionalProperties": false, "required": [ "type", "text" ] }