social.dracome.work.defs
Schema Diff
+2 -0
Compatibility Analysis
Breaking Changes Detected
2 breaking changes, 0 non-breaking changes.
Breaking Changes (2)
- ConstraintAdded ConstraintAdded { vertex_id: "social.dracome.work.defs#editionFormat", sort: "maxLength", value: "64" }
- ConstraintAdded ConstraintAdded { vertex_id: "social.dracome.work.defs#workType", sort: "maxLength", value: "64" }
Migration Guidance
Constraint Changes
- ConstraintAdded ConstraintAdded { vertex_id: "social.dracome.work.defs#workType", sort: "maxLength", value: "64" }
- ConstraintAdded ConstraintAdded { vertex_id: "social.dracome.work.defs#editionFormat", sort: "maxLength", value: "64" }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"catalogIdentifier": {
5
5
"description": "A single external identifier for a work or edition, such as an ISBN or an Open Library key.",
6
6
"properties": {
7
7
"scheme": {
8
8
"description": "The identifier scheme: `isbn-10` (ISBN-10), `isbn-13` (ISBN-13), `ol-work` (Open Library work key, e.g. OL12345W), `ol-edition` (Open Library edition key, e.g. OL12345M), `bookhive` (BookHive proprietary ID), `dnb` (German National Library ID), `gnd` (GND authority record number), `viaf` (VIAF ID), `wikidata` (Wikidata entity), `oclc` (OCLC WorldCat ID).",
9
9
"knownValues": [
10
10
"isbn-10",
11
11
"isbn-13",
12
12
"ol-work",
13
13
"ol-edition",
14
14
"bookhive",
15
15
"dnb",
16
16
"gnd",
17
17
"viaf",
18
18
"wikidata",
19
19
"oclc"
20
20
],
21
21
"maxLength": 64,
22
22
"type": "string"
23
23
},
24
24
"value": {
25
25
"description": "The identifier value itself, formatted according to scheme (for example the raw ISBN digits, or an Open Library key such as OL12345W).",
26
26
"maxLength": 256,
27
27
"type": "string"
28
28
}
29
29
},
30
30
"required": [
31
31
"scheme",
32
32
"value"
33
33
],
34
34
"type": "object"
35
35
},
36
36
"catalogRef": {
37
37
"description": "A portable reference to a work or edition in the Dracome catalog, intended to remain resolvable outside of Dracome's own systems.",
38
38
"properties": {
39
39
"dracomeKey": {
40
40
"description": "Optional proprietary Dracome catalog key for this work or edition. Dracome's own systems use it both for internal lookups and as the identifier accepted by Dracome's XRPC API calls; it is not a portable identifier, so consumers outside Dracome's own systems should resolve via identifiers instead.",
41
41
"maxLength": 128,
42
42
"type": "string"
43
43
},
44
44
"identifiers": {
45
45
"description": "External identifiers (ISBNs, Open Library keys, etc.) that let any client resolve this work or edition without depending on Dracome-specific data.",
46
46
"items": {
47
47
"ref": "#catalogIdentifier",
48
48
"type": "ref"
49
49
},
50
50
"maxLength": 16,
51
51
"type": "array"
52
52
},
53
53
"uri": {
54
54
"description": "Optional canonical URI for this work or edition. Runtime validation MUST restrict this to https:// or at:// values.",
55
55
"format": "uri",
56
56
"type": "string"
57
57
}
58
58
},
59
59
"type": "object"
60
60
},
61
61
"catalogSnapshot": {
62
62
"description": "A portable, identity-oriented snapshot of combined work-and-edition catalog metadata, captured at record write time. Alongside the record's target, it lets any AT Protocol consumer independently resolve this work or edition without depending on Dracome as a central catalog authority. Work-scoped fields are always present at the top level; edition-scoped fields are grouped under the nested `edition` sub-object, which is always present.",
63
63
"properties": {
64
64
"contributors": {
65
65
"description": "Ordered list of contributors (authors, translators, illustrators, etc.) credited on the work or edition. May be empty when the work has no credited contributor.",
66
66
"items": {
67
67
"ref": "#snapshotContributor",
68
68
"type": "ref"
69
69
},
70
70
"maxLength": 32,
71
71
"type": "array"
72
72
},
73
73
"edition": {
74
74
"description": "Edition-scoped metadata of the targeted edition. Always present.",
75
75
"ref": "#catalogSnapshotEdition",
76
76
"type": "ref"
77
77
},
78
78
"subtitle": {
79
79
"description": "Secondary title of the work, present only when the work has one, sourced from the work's own canonical subtitle.",
80
80
"maxLength": 1024,
81
81
"type": "string"
82
82
},
83
83
"title": {
84
84
"description": "Primary title of the work, sourced from the work's own canonical title.",
85
85
"maxLength": 1024,
86
86
"type": "string"
87
87
},
88
88
"workType": {
89
89
"description": "Structural content form of the referenced work (novel, poetry, comic, manga, audio_drama, or non_fiction).",
90
90
"ref": "#workType",
91
91
"type": "ref"
92
92
}
93
93
},
94
94
"required": [
95
95
"workType",
96
96
"title",
97
97
"contributors",
98
98
"edition"
99
99
],
100
100
"type": "object"
101
101
},
102
102
"catalogSnapshotEdition": {
103
103
"description": "Edition-scoped metadata nested inside #catalogSnapshot. All fields are independently optional.",
104
104
"properties": {
105
105
"durationSeconds": {
106
106
"description": "Total duration in seconds for audiobook editions, captured at record write time. Only populated when the edition's format is audiobook; pageCount and durationSeconds are never both set on the same snapshot.",
107
107
"minimum": 0,
108
108
"type": "integer"
109
109
},
110
110
"format": {
111
111
"description": "Physical or media format of the specific edition, if known.",
112
112
"ref": "#editionFormat",
113
113
"type": "ref"
114
114
},
115
115
"language": {
116
116
"description": "ISO 639-1 or BCP 47 language code for the edition language.",
117
117
"format": "language",
118
118
"type": "string"
119
119
},
120
120
"pageCount": {
121
121
"description": "Number of pages in the specific edition, if known. Not populated when the edition's format is audiobook; see durationSeconds.",
122
122
"minimum": 1,
123
123
"type": "integer"
124
124
},
125
125
"publicationYear": {
126
126
"description": "Year the specific edition was published. This is the edition's publication year, not necessarily the original work's first publication year.",
127
127
"type": "integer"
128
128
},
129
129
"publisherName": {
130
130
"description": "Name of the publisher of the specific edition, if known.",
131
131
"maxLength": 512,
132
132
"type": "string"
133
133
},
134
134
"subtitle": {
135
135
"description": "Secondary title of the specific edition, present only when the edition has one. When present, this is authoritative for display over the top-level work subtitle.",
136
136
"maxLength": 1024,
137
137
"type": "string"
138
138
},
139
139
"title": {
140
140
"description": "Primary title of the specific edition, present only when it is captured independently of the work's canonical title — for example a translated edition's title. When present, this is authoritative for display over the top-level work title.",
141
141
"maxLength": 1024,
142
142
"type": "string"
143
143
}
144
144
},
145
145
"type": "object"
146
146
},
147
147
"catalogTarget": {
148
148
"description": "Exact target identity for an edition-scoped record. Carries the edition and its parent work; there is no work-only target.",
149
149
"properties": {
150
150
"edition": {
151
151
"description": "The specific edition being targeted. Always present.",
152
152
"ref": "#catalogRef",
153
153
"type": "ref"
154
154
},
155
155
"work": {
156
156
"description": "The work being targeted by this record. Always present.",
157
157
"ref": "#catalogRef",
158
158
"type": "ref"
159
159
}
160
160
},
161
161
"required": [
162
162
"work",
163
163
"edition"
164
164
],
165
165
"type": "object"
166
166
},
167
167
"editionFormat": {
168
168
"description": "Physical or media format of a specific edition. The set of known values is derived from the Dracome catalog's own normalized edition-format values and may grow; consumers MUST tolerate unknown values.",
169
169
"knownValues": [
170
170
"paperback",
171
171
"hardcover",
172
172
"ebook",
173
173
"audiobook",
174
174
"board_book",
175
175
"spiral_bound",
176
176
"library_binding",
177
177
"pamphlet"
178
178
],
179
+
"maxLength": 64,
179
180
"type": "string"
180
181
},
181
182
"snapshotContributor": {
182
183
"description": "A person credited on a work or edition. The role and display name are always present. The profile reference is optional, carrying the AT-URI of that person's contributor profile when one exists and is known.",
183
184
"properties": {
184
185
"contributor": {
185
186
"description": "Optional reference to this person's contributor profile, when such a profile is known to exist on their PDS.",
186
187
"ref": "social.dracome.contributor.defs#contributorProfileRef",
187
188
"type": "ref"
188
189
},
189
190
"name": {
190
191
"description": "Display name of the credited person, in natural reading order (given name(s) before family name, e.g. 'Jane Doe', not library-cataloging-style 'Doe, Jane').",
191
192
"maxLength": 256,
192
193
"type": "string"
193
194
},
194
195
"role": {
195
196
"description": "The role this person held in creating this work or edition (e.g. author, translator, illustrator).",
196
197
"ref": "social.dracome.contributor.defs#contributorRole",
197
198
"type": "ref"
198
199
}
199
200
},
200
201
"required": [
201
202
"name",
202
203
"role"
203
204
],
204
205
"type": "object"
205
206
},
206
207
"workType": {
207
208
"description": "Structural content form of the work (not its distribution format).",
208
209
"knownValues": [
209
210
"novel",
210
211
"poetry",
211
212
"comic",
212
213
"manga",
213
214
"audio_drama",
214
215
"non_fiction"
215
216
],
217
+
"maxLength": 64,
216
218
"type": "string"
217
219
}
218
220
},
219
221
"id": "social.dracome.work.defs",
220
222
"lexicon": 1
221
223
}