{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://git.deepknow.site/Facere/FacereDataset/schemas/project.schema.json", "title": "FacereDataset Project", "description": "统一项目记录。跨源(oshwhub / hackaday / github / ...)通用。", "type": "object", "required": [ "source", "source_url", "project_id", "title", "author", "license", "crawled_at", "files" ], "properties": { "source": { "type": "string", "description": "数据源标识,如 'oshwhub'、'hackaday'、'github'", "enum": ["oshwhub", "hackaday", "github", "cern_ohr", "wikifactory", "other"] }, "source_url": { "type": "string", "format": "uri" }, "project_id": { "type": "string", "description": "源站点内部 ID(oshwhub 用 uuid)" }, "title": { "type": "string" }, "description_short": { "type": "string", "description": "简介(< 200 chars)" }, "description_path": { "type": "string", "description": "长描述 markdown 相对本项目目录的路径,如 'description.md'" }, "author": { "type": "object", "required": ["username"], "properties": { "username": { "type": "string" }, "display_name": { "type": "string" }, "user_id": { "type": "string" } } }, "license": { "type": "string", "description": "原始许可证字符串;下游做规范化映射。未知标 'unknown'" }, "tags": { "type": "array", "items": { "type": "string" } }, "created_at": { "type": "string", "format": "date-time" }, "updated_at": { "type": "string", "format": "date-time" }, "published_at": { "type": "string", "format": "date-time" }, "crawled_at": { "type": "string", "format": "date-time" }, "metrics": { "type": "object", "additionalProperties": true, "description": "任意源站点统计:likes/stars/views/forks 等" }, "cover": { "type": "object", "properties": { "url": { "type": "string", "format": "uri" }, "path": { "type": "string", "description": "本地相对路径,如 'cover.png'" } } }, "files": { "type": "array", "items": { "type": "object", "required": ["name", "url"], "properties": { "name": { "type": "string" }, "url": { "type": "string", "format": "uri" }, "path": { "type": "string", "description": "本地相对路径,如 'files/xxx.pdf'。缺省表示只保留 URL" }, "size": { "type": "integer" }, "md5": { "type": "string" }, "sha256": { "type": "string" }, "ext": { "type": "string" }, "mime": { "type": "string" }, "original_id": { "type": "string", "description": "源站点内部文件 ID" } } } }, "raw_fields": { "type": "object", "description": "不易规范化但想保留的源站原始字段(grade、download_count 等)", "additionalProperties": true }, "source_format": { "type": "string", "description": "EDA 工程源格式标记。easyeda-std (u.lceda.cn) / easyeda-pro (Pro 3.x EPRO2) / easyeda-pro-legacy (Pro 2.x v2/documents/lists) / kicad / altium / eagle.", "enum": ["easyeda-std", "easyeda-pro", "easyeda-pro-legacy", "kicad", "altium", "eagle", "other"] }, "source_path": { "type": "string", "description": "工程源文件目录,相对本项目目录,如 'source/'。" }, "source_documents": { "type": "array", "description": "工程源文档清单。每条对应一个 schematic / pcb / sheet 文档。", "items": { "type": "object", "required": ["doc_uuid", "path"], "properties": { "doc_uuid": { "type": "string" }, "docType": { "type": ["integer", "string", "null"], "description": "Std: integer (1=schematic, 3=pcb). Pro: string (BOARD/PCB/SCHEMATIC/SHEET/...). null when unknown." }, "master": { "type": "string", "description": "Std: 当前 head history hash. Pro 按 doc 没有独立 master。" }, "path": { "type": "string", "description": "本地相对路径。Std: 'source/.json'; Pro: 'source/.epro2'" }, "size": { "type": "integer" }, "sha256": { "type": "string" }, "message_count": { "type": "integer", "description": "Pro EPRO2 流消息行数。Std 无此字段。" } } } }, "editor_version": { "type": "string", "description": "EasyEDA / KiCad 编辑器版本(从 dataStr.head.editorVersion 抽取)。" } }, "additionalProperties": false }