📄 standards/isbn.json
D-OPEN SOVEREIGN
1{
2  "$schema": "https://schemas.dsafe.us/StandardDefinition/1.0",
3  "id": "isbn",
4  "version": "1.0",
5  "label": "International Standard Book Number",
6  "description": "A unique numeric commercial book identifier. ISBN-13 form is canonical.",
7  "governingBody": "International ISBN Agency",
8  "isoReference": "ISO 2108:2017",
9  "revisionCycle": "irregular",
10  "status": "active",
11  "props": [
12    {
13      "name": "isbn",
14      "type": "string",
15      "nullable": true,
16      "normalize": "compact-13",
17      "display": "hyphenated-13",
18      "checkDigit": { "algorithm": "isbn-13-luhn", "position": "last" },
19      "pattern": "^97[89][0-9]{10}$",
20      "description": "ISBN-13 identifying this manifestation."
21    }
22  ],
23  "pk": "isbn",
24  "uriScheme": "ISBN:{{isbn}}",
25  "linkedDataUri": "urn:isbn:{{isbn}}",
26  "externalApis": [
27    {
28      "id": "openlibrary",
29      "name": "Open Library Books API",
30      "kind": "lookup",
31      "rateLimit": { "requests": 100, "windowSeconds": 60 },
32      "fieldMapping": [
33        { "source": "title",       "target": "title",     "overwrite": "if-empty" },
34        { "source": "pageCount",   "target": "pageCount", "overwrite": "if-empty" },
35        { "source": "publishDate", "target": "pubYear",   "overwrite": "if-empty" },
36        { "source": "description", "target": "summary",   "overwrite": "if-empty" }
37      ]
38    },
39    {
40      "id": "googlebooks",
41      "name": "Google Books API",
42      "kind": "lookup",
43      "requiresApiKey": true,
44      "rateLimit": null,
45      "fieldMapping": [
46        { "source": "title",         "target": "title",     "overwrite": "if-empty" },
47        { "source": "pageCount",     "target": "pageCount", "overwrite": "if-empty" },
48        { "source": "publishedDate", "target": "pubYear",   "overwrite": "if-empty" },
49        { "source": "description",   "target": "summary",   "overwrite": "if-empty" },
50        { "source": "language",      "target": "language",  "overwrite": "always"   }
51      ]
52    }
53  ]
54}
55