atlas/tools/schema/atlas.json
2023-07-08 23:10:31 +07:00

130 lines
No EOL
3.8 KiB
JSON

{
"$schema": "https://json-schema.org/draft-07/schema",
"type": "array",
"definitions": {
"entry": {
"type": "object",
"properties": {
"id": {
"oneOf": [
{
"type": "string"
},
{
"type": "integer",
"minimum": 1
},
{
"type": "integer",
"minimum": -1,
"maximum": 0,
"description": "The ID of the entry. The value is a placeholder for new entries."
}
],
"description": "The ID of the entry. Usually, this is a number (preferably number, or string), or the post ID of the new entry submission."
},
"name": {
"type": "string",
"description": "The short, descriptive name of the entry.",
"minLength": 1
},
"description": {
"type": "string",
"description": "The description of the entry. that will also be understood by somebody not familiar with the topic. Usually, the first sentence on Wikipedia is a good example."
},
"links": {
"type": "object",
"description": "The links related to the entry.",
"properties": {
"subreddit": {
"type": "array",
"description": "Subreddits that's either most relevant to the topic, or that was responsible for creating the artwork, excluding the r/.",
"items": {
"type": "string",
"description": "A subreddit that's either most relevant to the topic, or that was responsible for creating the artwork.",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_]{1,20}$",
"minItems": 1
}
},
"website": {
"type": "array",
"description": "URL to websites related to the entry, including the http/https protocol. If you're describing a project, the project's main website would be suitable here.",
"items": {
"type": "string",
"description": "The URL to a website related to the entry.",
"pattern": "^https?://[^\\s/$.?#].[^\\s]*$",
"minItems": 1
}
},
"discord": {
"type": "array",
"description": "Invite codes of Discord servers related to the entry (excluding discord.gg/)",
"items": {
"type": "string",
"description": "The invite code of a Discord server related to the entry.",
"minItems": 1,
"minLength": 1
}
},
"wiki": {
"type": "array",
"description": "Wiki pages related to the entry.",
"items": {
"type": "string",
"description": "The title of the wiki page related to the entry.",
"minItems": 1,
"minLength": 1
}
}
},
"additionalProperties": false
},
"path": {
"type": "object",
"description": "The path of the entry.",
"patternProperties": {
"^(\\d+(-\\d+)?|\\w+(:\\d+(-\\d+)?)?)(, (\\d+(-\\d+)?|\\w+(:\\d+(-\\d+)?)?))*$": {
"type": "array",
"description": "A period containing the path points.",
"items": {
"type": "array",
"description": "A point.",
"items": {
"type": "number"
},
"minItems": 2,
"maxItems": 2
},
"minItems": 3
}
},
"additionalProperties": false,
"minProperties": 1
},
"center": {
"type": "object",
"description": "The center of the entry.",
"patternProperties": {
"^(\\d+(-\\d+)?|\\w+(:\\d+(-\\d+)?)?)(, (\\d+(-\\d+)?|\\w+(:\\d+(-\\d+)?)?))*$": {
"type": "array",
"description": "A period containing the center point.",
"items": {
"type": "number",
"description": "A point."
},
"minItems": 2,
"maxItems": 2
}
},
"additionalProperties": false,
"minProperties": 1
}
},
"required": ["id", "name", "description", "links", "path", "center"],
"additionalItems": true
}
},
"items": {
"$ref": "#/definitions/entry"
}
}