{ "$schema": "http://json-schema.org/schema#", "$id": "https://raw.githubusercontent.com/myhumankit/myworkshop/master/schemas/project.json", "title": "JSON SCHEMA for My Workshop projects", "description": "This is a JSON SCHEMA for the documentation generator My Workshop", "definitions": { "url": { "title": "URL", "description": "Relative or absolute URL.", "type": "string" }, "color": { "title": "Color", "type": "string", "format": "color" }, "slug": { "title": "Slug", "description": "The file name of the JSON (without extension).", "type": "string" }, "github_organization": { "title": "GitHub organization", "type": "string" }, "github_repository": { "title": "GitHub repository", "type": "string" }, "image": { "title": "Image", "type": "object", "required": ["image"], "additionalProperties": false, "properties": { "image": { "title": "Image", "description": "Link to a picture.", "type": "object", "required": ["url", "caption"], "additionalProperties": false, "properties": { "url": { "$ref": "#/definitions/url" }, "caption": { "title": "Caption", "description": "Legend of the image.", "type": "string" } } } } }, "youtube": { "title": "Youtube", "type": "object", "required": ["youtube"], "additionalProperties": false, "properties": { "youtube": { "title": "Youtube", "description": "Embedded YouTube video.", "type": "object", "required": ["id", "caption"], "additionalProperties": false, "properties": { "id": { "title": "YouTube video Id", "description": "The end of the URL video", "type": "string" }, "caption": { "title": "Caption", "description": "Legend of the video.", "type": "string" } } } } }, "link": { "title": "Link", "description": "Link to a website, etc.", "type": "object", "required": ["url", "text"], "properties": { "url": { "$ref": "#/definitions/url" }, "text": { "title": "Text", "description": "Visible part of the link.", "type": "string" }, "fa5_icon": { "title": "Icon", "title": "Font Awesome 5 icon class.", "type": "string", "default": "fas fa-link" } } }, "user": { "title": "User", "description": "A physical person.", "type": "object", "required": ["full_name"], "properties": { "full_name": { "title": "Full name", "type": "string" }, "email": { "title": "email", "format": "email", "type": "string" }, "github_username": { "title": "GitHub username", "type": "string" }, "twitter_username": { "title": "Twitter username", "type": "string" }, "role": { "title": "Role", "description": "User's role in a project.", "type": "string", "enum": ["Porteur de projet", "Animateur", "Fabmanager référent", "Contributeur", "Responsable de la documentation"] } } }, "paragraph": { "title": "Paragraph", "description": "A textarea written in Markdown.", "type": "string", "format": "markdown" }, "alert": { "title": "Alert", "description": "An alert message!", "type": "object", "required": ["class", "message"], "additionalProperties": false, "properties": { "class": { "title": "Class", "description": "Class of the alert message.", "type": "string", "enum": ["success", "danger", "warning", "info"] }, "message": { "title": "Message", "description": "Content of the alert message.", "type": "string", "format": "textarea" } } }, "file": { "title": "File", "type": "object", "required": ["file"], "additionalProperties": false, "properties": { "file": { "title": "File", "description": "A required file, 3D model, source code, etc.", "type": "object", "required": ["name", "url"], "additionalProperties": false, "properties": { "name": { "title": "Name", "type": "string" }, "url": { "$ref": "#/definitions/url" } } } } }, "metal": { "title": "Metal", "type": "string", "enum": [ "steel", "stainless steel", "aluminum", "copper" ] }, "wood": { "title": "Wood", "type": "string", "enum": [ "fir", "pine", "cedar", "poplar", "oak", "redwood" ] }, "engineered_wood": { "title": "Engineered wood", "type": "string", "enum": [ "fir plywood", "pine plywood", "cedar plywood", "poplar plywood", "oak plywood", "redwood plywood", "MDF", "HDF", "OSB", "OSB 1", "OSB 2", "OSB 3", "OSB 4" ] }, "plastic": { "title": "Plastic", "type": "string", "enum": [ "PMMA", "PMMA opaque", "PMMA translucent", "PMMA transparent", "PMMA fluorescent", "PVC", "PE" ] }, "composite": { "title": "Composite", "type": "string", "enum": [ "Dibond" ] }, "generic_material": { "title": "Generic material", "type": "string", "enum": [ "glass", "foam", "cardboard" ] }, "sheet": { "title": "Sheet", "type": "object", "required": ["sheet"], "additionalProperties": false, "properties": { "sheet": { "title": "Sheet", "required": ["quantity", "material", "thickness", "length", "width"], "additionalProperties": false, "properties": { "quantity": { "title": "Quantity", "type": "number", "default": 1, "minimum": 0 }, "material": { "title": "Material", "anyOf": [ { "$ref": "#/definitions/metal" }, { "$ref": "#/definitions/wood" }, { "$ref": "#/definitions/engineered_wood" }, { "$ref": "#/definitions/plastic" }, { "$ref": "#/definitions/composite" }, { "$ref": "#/definitions/generic_material" } ] }, "thickness": { "title": "Thickness in mm", "type": "number" }, "length": { "title": "Length in mm", "type": "number" }, "width": { "title": "Width in mm", "type": "number" }, "color": { "$ref": "#/definitions/color" } } } } }, "cleat": { "title": "Cleat", "type": "object", "required": ["cleat"], "additionalProperties": false, "properties": { "cleat": { "title": "Cleat", "required": ["quantity", "material", "section", "length"], "additionalProperties": false, "properties": { "quantity": { "title": "Quantity", "type": "number", "default": 1, "minimum": 0 }, "material": { "title": "Material", "$ref": "#/definitions/wood" }, "length": { "title": "Length in mm", "type": "number" }, "section": { "title": "Section", "description": "Geometrical section of the profile.", "type": "object", "oneOf": [ { "title": "Round", "required": ["type", "diameter"], "additionalProperties": false, "properties": { "type": { "title": "Type", "type": "string", "enum": ["round"], "default": "round" }, "diameter": { "title": "Diameter in mm", "type": "number" } } }, { "title": "Square bar", "required": ["type", "width"], "additionalProperties": false, "properties": { "type": { "title": "Type", "type": "string", "enum": ["square_bar"], "default": "square_bar" }, "width": { "title": "Width in mm", "type": "number" } } }, { "title": "Rectangular bar", "required": ["type", "long_width", "short_width"], "additionalProperties": false, "properties": { "type": { "title": "Type", "type": "string", "enum": ["rectangular_bar"], "default": "rectangular_bar" }, "long_width": { "title": "Long width in mm", "type": "number" }, "short_width": { "title": "Short width in mm", "type": "number" } } } ] }, "color": { "$ref": "#/definitions/color" } } } } }, "profile": { "title": "Profile", "type": "object", "required": ["profile"], "additionalProperties": false, "properties": { "profile": { "title": "Profile", "required": ["quantity", "material", "section", "length"], "additionalProperties": false, "properties": { "quantity": { "title": "Quantity", "type": "number", "default": 1, "minimum": 0 }, "material": { "title": "Material", "anyOf": [ { "$ref": "#/definitions/metal" }, { "$ref": "#/definitions/plastic" } ] }, "length": { "title": "Length in mm", "type": "number" }, "section": { "title": "Section", "description": "Geometrical section of the profile.", "type": "object", "oneOf": [ { "title": "Round", "required": ["type", "diameter"], "additionalProperties": false, "properties": { "type": { "title": "Type", "type": "string", "enum": ["round"], "default": "round" }, "diameter": { "title": "Diameter in mm", "type": "number" } } }, { "title": "Pipe", "required": ["type", "diameter", "thickness"], "additionalProperties": false, "properties": { "type": { "title": "Type", "type": "string", "enum": ["pipe"], "default": "pipe" }, "diameter": { "title": "Diameter in mm", "type": "number" }, "thickness": { "title": "Thickness in mm", "type": "number" } } }, { "title": "Square bar", "required": ["type", "width"], "additionalProperties": false, "properties": { "type": { "title": "Type", "type": "string", "enum": ["square_bar"], "default": "square_bar" }, "width": { "title": "Width in mm", "type": "number" } } }, { "title": "Square tube", "required": ["type", "width", "thickness"], "additionalProperties": false, "properties": { "type": { "title": "Type", "type": "string", "enum": ["square_tube"], "default": "square_tube" }, "width": { "title": "Width in mm", "type": "number" }, "thickness": { "title": "Thickness in mm", "type": "number" } } }, { "title": "Rectangular bar", "required": ["type", "long_width", "short_width"], "additionalProperties": false, "properties": { "type": { "title": "Type", "type": "string", "enum": ["rectangular_bar"], "default": "rectangular_bar" }, "long_width": { "title": "Long width in mm", "type": "number" }, "short_width": { "title": "Short width in mm", "type": "number" } } }, { "title": "Rectangular tube", "required": ["type", "long_width", "short_width", "thickness"], "additionalProperties": false, "properties": { "type": { "title": "Type", "type": "string", "enum": ["rectangular_tube"], "default": "rectangular_tube" }, "long_width": { "title": "Long width in mm", "type": "number" }, "short_width": { "title": "Short width in mm", "type": "number" }, "thickness": { "title": "Thickness in mm", "type": "number" } } }, { "title": "Equal leg angle", "required": ["type", "leg_length", "thickness"], "additionalProperties": false, "properties": { "type": { "title": "Type", "type": "string", "enum": ["equal_leg_angle"], "default": "equal_leg_angle" }, "leg_length": { "title": "Leg length in mm", "type": "number" }, "thickness": { "title": "Thickness in mm", "type": "number" } } }, { "title": "Unequal leg angle", "required": ["type", "long_leg_length", "short_leg_length", "thickness"], "additionalProperties": false, "properties": { "type": { "title": "Type", "type": "string", "enum": ["unequal_leg_angle"], "default": "unequal_leg_angle" }, "long_leg_length": { "title": "Long leg length in mm", "type": "number" }, "short_leg_length": { "title": "Short leg length in mm", "type": "number" }, "thickness": { "title": "Thickness in mm", "type": "number" } } } ] }, "color": { "$ref": "#/definitions/color" } } } } }, "nominal_diameter": { "title": "Nominal diameter", "type": "number", "enum": [1.6, 2, 2.5, 3, 3.5, 4, 5, 6, 8, 10, 12, 16, 20, 24, 30, 36], "default": 4 }, "screw": { "title": "Screw", "type": "object", "required": ["screw"], "additionalProperties": false, "properties": { "screw": { "title": "Profile", "required": ["quantity", "material", "diameter", "head", "head_option", "driving", "threading", "length"], "additionalProperties": false, "properties": { "quantity": { "title": "Quantity", "type": "number", "default": 1, "minimum": 0 }, "material": { "title": "Material", "type": "string", "enum": ["steel", "stainless steel", "black stainless steel", "bronze", "nylon", "brass", "aluminum"], "default": "steel" }, "head": { "title": "Head type", "description": "Forme de la tête - A: sans tête ; C: cylindrique ; F: fraisée ; G: goutte de suif ; H: hexagonale ; J: Japy ; Q: carré ; R: ronde ; RL: poêlier", "type": "string", "enum": ["A", "C", "F", "G", "H", "J", "Q", "R", "RL"], "default": "H" }, "head_option": { "title": "Head type option", "description": "Forme complémenaire - false: aucune ; B: bombée ; BL: bombée large ; D: à embase ; F: à embase centrée ; K: à créneaux ; T: à collerette", "type": "string", "enum": ["", "B", "BL", "D", "F", "K", "T"], "default": "" }, "driving": { "title": "Driving", "description": "Entraînement - false: hexagonale ; HC: à six pans creux ; CC: à collet carré ; EG: à ergot ; S: fendue ; H: cruciforme « Phillips » ; Z: cruciforme « Pozidriv » ; X: à six lobes internes « Torx » ; DB: « Dombo be »", "type": "string", "enum": ["", "HC", "CC", "EG", "S", "H", "Z", "X", "DB"], "default": "" }, "threading": { "title": "Threading", "description": "Filetage - M: métrique ; MF: métrique pas fin ; ST: à tôle ; VB: à bois ; Tr: trapézoïdal ; Rd: rond", "type": "string", "enum": ["M", "MF", "ST", "VB", "Tr", "Rd"], "default": "M" }, "diameter": { "$ref": "#/definitions/nominal_diameter" }, "length": { "title": "Length", "type": "number", "enum": [2.5, 3, 4, 5, 6, 8, 10, 12, 16, 20, 25, 30 ,35, 40, 45, 50, 55, 60, 65, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 180, 200], "default": 10 }, "threaded_length": { "title": "Threaded length", "type": "number", "enum": [2.5, 3, 4, 5, 6, 8, 10, 12, 16, 20, 25, 30 ,35, 40, 45, 50, 55, 60, 65, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 180, 200], "default": 10 }, "extremity": { "title": "Extremity", "description": "extrémité - CH: à bout chanfreiné ; RL: brut de roulage ; PN: à bout pilote conique ; LD: à bout pilote cylindrique ; BB: à bout bombé ; TC: à téton court ; TL: à téton long ; PL: à bout plat ; CV: à bout cuvette", "type": "string", "enum": ["CH", "RL", "PN", "LD", "BB", "TC", "TL", "PL", "CV"] }, "quality": { "title": "Quality", "type": "string", "enum": ["3.6", "4.6", "4.8", "5.6", "5.8", "6.6", "6.8", "6.9", "8.8", "10.9", "12.9", "14.9"], "default": "8.8" } } } } }, "nut": { "title": "Nut", "type": "object", "required": ["nut"], "additionalProperties": false, "properties": { "nut": { "title": "Nut", "required": ["quantity", "material", "threading", "diameter", "type"], "additionalProperties": false, "properties": { "quantity": { "title": "Quantity", "type": "number", "default": 1, "minimum": 0 }, "material": { "title": "Material", "type": "string", "enum": ["steel", "stainless steel", "black stainless steel", "bronze", "nylon", "brass", "aluminum"], "default": "steel" }, "threading": { "title": "Threading", "description": "Filetage - M: métrique ; MF: métrique pas fin", "type": "string", "enum": ["M", "MF"], "default": "M" }, "diameter": { "$ref": "#/definitions/nominal_diameter" }, "type": { "title": "Nut type", "type": "string", "enum": [ "Hex", "Jam", "Nylon", "Flange", "Square", "Wing" ], "default": "Hex" } } } } }, "washer": { "title": "Washer", "type": "object", "required": ["washer"], "additionalProperties": false, "properties": { "washer": { "title": "Washer", "required": ["quantity", "material", "diameter", "type"], "additionalProperties": false, "properties": { "quantity": { "title": "Quantity", "type": "number", "default": 1, "minimum": 0 }, "material": { "title": "Material", "type": "string", "enum": ["steel", "stainless steel", "black stainless steel", "bronze", "nylon", "brass", "aluminum"], "default": "steel" }, "diameter": { "$ref": "#/definitions/nominal_diameter" }, "type": { "title": "Washer type", "type": "string", "enum": [ "Flat S", "Flat N", "Flat L" ], "default": "Flat N" } } } } }, "local_component": { "title": "Local component", "type": "object", "required": ["component"], "additionalProperties": false, "properties": { "component": { "title": "Local component", "required": ["slug", "quantity"], "additionalProperties": false, "properties": { "slug": { "$ref": "#/definitions/slug" }, "quantity": { "title": "Quantity", "type": "number", "default": 1, "minimum": 0 } } } } }, "external_component": { "title": "External component", "type": "object", "required": ["component"], "additionalProperties": false, "properties": { "component": { "title": "External component", "required": ["slug", "quantity", "github_organization", "github_repository"], "additionalProperties": false, "properties": { "slug": { "$ref": "#/definitions/slug" }, "quantity": { "title": "Quantity", "type": "number", "default": 1, "minimum": 0 }, "github_organization": { "$ref": "#/definitions/github_organization" }, "github_repository": { "$ref": "#/definitions/github_repository" } } } } }, "local_tool": { "title": "Local tool", "type": "object", "required": ["tool"], "additionalProperties": false, "properties": { "tool": { "title": "Local tool", "required": ["slug"], "additionalProperties": false, "properties": { "slug": { "$ref": "#/definitions/slug" } } } } }, "external_tool": { "title": "External tool", "type": "object", "required": ["tool"], "additionalProperties": false, "properties": { "tool": { "title": "External tool", "required": ["slug", "github_organization", "github_repository"], "additionalProperties": false, "properties": { "slug": { "$ref": "#/definitions/slug" }, "github_organization": { "$ref": "#/definitions/github_organization" }, "github_repository": { "$ref": "#/definitions/github_repository" } } } } }, "step": { "title": "Step", "description": "Describe a step of the tutorial.", "type": "object", "required": ["title", "duration", "content"], "properties": { "title": { "title": "Title", "type": "string" }, "duration": { "title": "Duration", "description": "Estimated duration of a step (seconds).", "type": "integer", "default": 300 }, "content": { "title": "Content", "$ref": "#/definitions/paragraph" }, "alerts": { "title": "Alerts", "type": "array", "minItems": 1, "items": { "$ref": "#/definitions/alert" } }, "media": { "title": "Media", "description": "A list of media : images, videos, etc.", "type": "array", "minItems": 1, "items": { "anyOf": [ { "$ref": "#/definitions/image" }, { "$ref": "#/definitions/youtube" } ] } }, "inputs": { "title": "Inputs", "description": "List of components, tools or files required to achieve this step.", "type": "array", "minItems": 1, "items": { "anyOf": [ { "$ref": "#/definitions/local_component" }, { "$ref": "#/definitions/external_component" }, { "$ref": "#/definitions/local_tool" }, { "$ref": "#/definitions/external_tool" }, { "$ref": "#/definitions/file" }, { "$ref": "#/definitions/profile" }, { "$ref": "#/definitions/sheet" }, { "$ref": "#/definitions/cleat" }, { "$ref": "#/definitions/screw" }, { "$ref": "#/definitions/nut" }, { "$ref": "#/definitions/washer" } ] } }, "outputs": { "title": "Outputs", "description": "List of components, tools or files created during this step.", "type": "array", "minItems": 1, "items": { "anyOf": [ { "$ref": "#/definitions/component" }, { "$ref": "#/definitions/tool" }, { "$ref": "#/definitions/file" } ] } } } } }, "type": "object", "oneOf": [ { "title": "JSON SCHEMA for My Workshop projects", "required" : ["project"], "additionalProperties": false, "properties": { "project": { "title": "Project", "description": "Root of the project description.", "type": "object", "required": ["full_name", "slug", "short_description", "lang", "license", "about"], "properties": { "full_name": { "title": "Full name", "type": "string" }, "slug": { "$ref": "#/definitions/slug" }, "short_description": { "title": "Short description", "type": "string" }, "lang": { "title": "Lang", "description": "Language code according to ISO 639-1.", "type": "string", "enum": ["fr", "en", "de"] }, "license": { "title": "License", "description": "Open source license for this project.", "type": "string", "enum": [ "CC BY", "CC BY-SA", "CC BY-ND", "CC BY-NC", "CC BY-NC-SA", "CC BY-NC-ND", "GNU AGPLv3", "GNU GPLv3", "GNU LGPLv3", "Mozilla Public License 2.0", "Apache License 2.0", "MIT License", "The Unlicense" ], "default": "CC BY" }, "about": { "title": "About", "description": "A brief introduction to the project.", "$ref": "#/definitions/paragraph", "default": "Quelques mots sur le projet : le contexte, son histoire, etc. ..." }, "featured_images": { "title": "Featured images", "description": "A list of media : images, videos, etc.", "type": "array", "minItems": 1, "items": { "anyOf": [ { "$ref": "#/definitions/image" }, { "$ref": "#/definitions/youtube" } ] } }, "status": { "title": "Status", "description": "State of progress of this project documentation.", "type": "string", "enum": [ "draft", "published", "canceled" ], "default": "draft" }, "links": { "title": "Links", "type": "array", "minItems": 1, "items": { "$ref": "#/definitions/link" } }, "contributors": { "title": "Contributors", "type": "array", "minItems": 1, "items": { "$ref": "#/definitions/user", "required": ["role"] } }, "steps": { "title": "Steps", "type": "array", "minItems": 1, "items": { "$ref": "#/definitions/step"} } } } } }, { "title": "JSON SCHEMA for My Workshop components", "required" : ["component"], "additionalProperties": false, "properties": { "component": { "title": "Component", "description": "Root of the component description.", "type": "object", "required": ["full_name", "short_description", "lang", "unit", "cost"], "properties": { "full_name": { "title": "Full name", "type": "string" }, "short_description": { "title": "Short description", "type": "string", "format": "textarea" }, "lang": { "title": "Lang", "description": "Language code according to ISO 639-1.", "type": "string", "enum": ["fr", "en", "de"] }, "unit": { "title": "Unit", "type": "string", "enum": ["kg", "g", "m", "cm", "mm", "m²", "m³", "L", "1"], "default": "1" }, "cost": { "title": "Cost", "required": ["value", "currency"], "additionalProperties": false, "properties": { "value": { "title": "Value", "type": "number" }, "currency": { "title": "Currency", "description": "Currency designators according to ISO 4217", "type": "string", "enum": ["EUR", "USD", "GBP"] } } }, "mass": { "title": "Mass", "required": ["value", "unit"], "additionalProperties": false, "properties": { "value": { "title": "Value", "type": "number" }, "unit": { "title": "Unit", "type": "string", "enum": ["kg", "g", "t"], "default": "kg" } } }, "featured_image": { "title": "Featured image", "$ref": "#/definitions/image" }, "brand": { "title": "Brand", "type": "string" }, "model": { "title": "Model", "type": "string" }, "links": { "title": "Links", "type": "array", "minItems": 1, "items": { "$ref": "#/definitions/link" } } } } } }, { "title": "JSON SCHEMA for My Workshop tools", "required" : ["tool"], "additionalProperties": false, "properties": { "tool": { "title": "Tool", "description": "Root of the tool description.", "type": "object", "required": ["full_name", "short_description", "lang"], "properties": { "full_name": { "title": "Full name", "type": "string" }, "short_description": { "title": "Short description", "type": "string", "format": "textarea" }, "lang": { "title": "Lang", "description": "Language code according to ISO 639-1.", "type": "string", "enum": ["fr", "en", "de"] }, "brand": { "title": "Brand", "type": "string" }, "model": { "title": "Model", "type": "string" }, "featured_image": { "title": "Featured image", "$ref": "#/definitions/image" }, "links": { "title": "Links", "type": "array", "minItems": 1, "items": { "$ref": "#/definitions/link" } } } } } } ] }