@roastbook/open-coffee-schema 0.0.0-stage → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +65 -2
- package/brew-methods/latest.json +312 -0
- package/brew-methods/v0.1.0.json +265 -0
- package/brew-methods/v0.2.0.json +265 -0
- package/brew-methods/v0.3.0.json +272 -0
- package/brew-methods/v0.4.0.json +312 -0
- package/coffee-places/context.latest.json +246 -0
- package/coffee-places/context.v0.1.0.json +241 -0
- package/coffee-places/context.v0.3.0.json +246 -0
- package/coffee-places/context.v0.4.0.json +246 -0
- package/coffee-places/latest.json +577 -0
- package/coffee-places/v0.1.0.json +518 -0
- package/coffee-places/v0.2.0.json +518 -0
- package/coffee-places/v0.3.0.json +577 -0
- package/coffee-places/v0.4.0.json +577 -0
- package/common/latest.json +197 -0
- package/common/v0.1.0.json +192 -0
- package/common/v0.2.0.json +197 -0
- package/common/v0.3.0.json +197 -0
- package/common/v0.4.0.json +197 -0
- package/equipment/latest.json +895 -0
- package/equipment/v0.1.0.json +1122 -0
- package/equipment/v0.2.0.json +1122 -0
- package/equipment/v0.3.0.json +895 -0
- package/equipment/v0.4.0.json +895 -0
- package/index.d.ts +1114 -0
- package/index.js +94 -0
- package/package.json +67 -4
- package/schemas.d.ts +5 -0
- package/schemas.js +3 -0
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://schema.roastbook.coffee/brew-methods/brew-methods.schema.v0.4.0.json",
|
|
4
|
+
"title": "Open Coffee brew methods",
|
|
5
|
+
"description": "Ways of brewing coffee (espresso, pour-over, V60, AeroPress, cold brew…), their typical parameters and what a coffee journal should record for each. Methods form a tree: a device-specific method such as v60 has the general method pour-over as parent. Part of Roastbook Open Coffee.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"$schema",
|
|
9
|
+
"meta",
|
|
10
|
+
"brew_methods"
|
|
11
|
+
],
|
|
12
|
+
"additionalProperties": false,
|
|
13
|
+
"properties": {
|
|
14
|
+
"$schema": {
|
|
15
|
+
"type": "string",
|
|
16
|
+
"pattern": "^https://schema\\.roastbook\\.coffee/brew-methods/brew-methods\\.schema\\.v[0-9]+\\.[0-9]+\\.[0-9]+\\.json$",
|
|
17
|
+
"description": "Canonical URL of the schema version this file follows."
|
|
18
|
+
},
|
|
19
|
+
"meta": {
|
|
20
|
+
"type": "object",
|
|
21
|
+
"$ref": "https://schema.roastbook.coffee/common/common.schema.v0.4.0.json#/$defs/dataset_meta",
|
|
22
|
+
"unevaluatedProperties": false
|
|
23
|
+
},
|
|
24
|
+
"brew_methods": {
|
|
25
|
+
"type": "array",
|
|
26
|
+
"items": {
|
|
27
|
+
"$ref": "#/$defs/brew_method"
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"$defs": {
|
|
32
|
+
"range": {
|
|
33
|
+
"title": "Range",
|
|
34
|
+
"type": "object",
|
|
35
|
+
"additionalProperties": false,
|
|
36
|
+
"minProperties": 1,
|
|
37
|
+
"properties": {
|
|
38
|
+
"min": {
|
|
39
|
+
"type": "number",
|
|
40
|
+
"minimum": 0,
|
|
41
|
+
"description": "Lowest common value, in the unit named by the parameter (for example grams for dose_g, degrees Celsius for brew_temperature_celsius)."
|
|
42
|
+
},
|
|
43
|
+
"max": {
|
|
44
|
+
"type": "number",
|
|
45
|
+
"minimum": 0,
|
|
46
|
+
"description": "Highest common value, in the unit named by the parameter."
|
|
47
|
+
},
|
|
48
|
+
"typical": {
|
|
49
|
+
"type": "number",
|
|
50
|
+
"minimum": 0,
|
|
51
|
+
"description": "A good starting value, in the unit named by the parameter."
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"description": "A starting range. When several values are given they must be ordered: min ≤ typical ≤ max. JSON Schema cannot compare two values, so this repository checks it in its examples and data repositories check it in their data."
|
|
55
|
+
},
|
|
56
|
+
"parameter": {
|
|
57
|
+
"title": "Brew parameter",
|
|
58
|
+
"enum": [
|
|
59
|
+
"dose_g",
|
|
60
|
+
"brew_water_g",
|
|
61
|
+
"yield_g",
|
|
62
|
+
"brew_ratio",
|
|
63
|
+
"yield_ratio",
|
|
64
|
+
"grind_setting",
|
|
65
|
+
"brew_time_seconds",
|
|
66
|
+
"target_time_seconds",
|
|
67
|
+
"brew_temperature_celsius",
|
|
68
|
+
"bloom_time_seconds",
|
|
69
|
+
"bloom_water_g",
|
|
70
|
+
"preinfusion_time_seconds",
|
|
71
|
+
"preinfusion_pressure_bar",
|
|
72
|
+
"brew_pressure_bar",
|
|
73
|
+
"flow_rate_ml_per_second",
|
|
74
|
+
"tamp_force_kg",
|
|
75
|
+
"uses_puck_screen",
|
|
76
|
+
"paper_filter_position",
|
|
77
|
+
"distribution_method",
|
|
78
|
+
"pour_count",
|
|
79
|
+
"steep_time_seconds"
|
|
80
|
+
],
|
|
81
|
+
"description": "Parameter keys shared with coffee journals such as Roastbook. brew_ratio is grams of brew water per gram of coffee (16 means 1:16); yield_ratio is grams of drink in the cup per gram of coffee (2 means a 1:2 espresso). brew_temperature_celsius is the temperature of the brew water. uses_puck_screen records whether a puck screen sat on top of the espresso puck (true or false). paper_filter_position takes a paper_filter_position value and distribution_method a distribution_method value."
|
|
82
|
+
},
|
|
83
|
+
"grind_size": {
|
|
84
|
+
"title": "Grind size",
|
|
85
|
+
"enum": [
|
|
86
|
+
"extra_fine",
|
|
87
|
+
"fine",
|
|
88
|
+
"medium_fine",
|
|
89
|
+
"medium",
|
|
90
|
+
"medium_coarse",
|
|
91
|
+
"coarse",
|
|
92
|
+
"extra_coarse"
|
|
93
|
+
],
|
|
94
|
+
"description": "Descriptive grind size; extra_fine is Turkish, fine espresso, medium filter, coarse French press and cold brew."
|
|
95
|
+
},
|
|
96
|
+
"paper_filter_position": {
|
|
97
|
+
"title": "Paper filter position",
|
|
98
|
+
"enum": [
|
|
99
|
+
"none",
|
|
100
|
+
"top",
|
|
101
|
+
"bottom",
|
|
102
|
+
"both"
|
|
103
|
+
],
|
|
104
|
+
"description": "Where paper filter discs sit in an espresso basket. none: no paper filter; top: on top of the coffee, under the shower screen; bottom: under the coffee, at the basket floor; both: one disc on top and one at the bottom."
|
|
105
|
+
},
|
|
106
|
+
"distribution_method": {
|
|
107
|
+
"title": "Distribution method",
|
|
108
|
+
"enum": [
|
|
109
|
+
"wdt",
|
|
110
|
+
"blind_shaker",
|
|
111
|
+
"distribution_tool",
|
|
112
|
+
"stockfleth_move"
|
|
113
|
+
],
|
|
114
|
+
"description": "How ground coffee is spread evenly in the basket before tamping. wdt: stirring with fine needles (Weiss Distribution Technique); blind_shaker: grinding into a closed cup, shaking it and tipping the coffee into the basket; distribution_tool: a spinning leveller set on the basket; stockfleth_move: sweeping the coffee level with a finger while turning the portafilter."
|
|
115
|
+
},
|
|
116
|
+
"brew_method": {
|
|
117
|
+
"title": "Brew method",
|
|
118
|
+
"type": "object",
|
|
119
|
+
"additionalProperties": false,
|
|
120
|
+
"required": [
|
|
121
|
+
"id",
|
|
122
|
+
"name",
|
|
123
|
+
"category",
|
|
124
|
+
"extraction",
|
|
125
|
+
"description",
|
|
126
|
+
"checked_at"
|
|
127
|
+
],
|
|
128
|
+
"properties": {
|
|
129
|
+
"id": {
|
|
130
|
+
"$ref": "https://schema.roastbook.coffee/common/common.schema.v0.4.0.json#/$defs/id",
|
|
131
|
+
"description": "Stable readable slug, e.g. v60, french-press. Never reused.",
|
|
132
|
+
"examples": [
|
|
133
|
+
"v60"
|
|
134
|
+
]
|
|
135
|
+
},
|
|
136
|
+
"name": {
|
|
137
|
+
"type": "string",
|
|
138
|
+
"minLength": 1,
|
|
139
|
+
"description": "Common English name of the method, for example Pour-over or French press."
|
|
140
|
+
},
|
|
141
|
+
"aliases": {
|
|
142
|
+
"type": "array",
|
|
143
|
+
"uniqueItems": true,
|
|
144
|
+
"items": {
|
|
145
|
+
"type": "string",
|
|
146
|
+
"minLength": 1
|
|
147
|
+
},
|
|
148
|
+
"description": "Other names in any language, e.g. Filterkaffee, drip."
|
|
149
|
+
},
|
|
150
|
+
"parent": {
|
|
151
|
+
"$ref": "https://schema.roastbook.coffee/common/common.schema.v0.4.0.json#/$defs/id",
|
|
152
|
+
"description": "The more general method, e.g. pour-over for v60."
|
|
153
|
+
},
|
|
154
|
+
"category": {
|
|
155
|
+
"enum": [
|
|
156
|
+
"espresso",
|
|
157
|
+
"filter",
|
|
158
|
+
"immersion",
|
|
159
|
+
"pressure",
|
|
160
|
+
"vacuum",
|
|
161
|
+
"boiling",
|
|
162
|
+
"cold"
|
|
163
|
+
],
|
|
164
|
+
"description": "Family used for grouping: espresso (9-bar style pressure), filter (percolation through a filter), immersion (steep, then separate), pressure (non-espresso pressure such as AeroPress or moka pot), vacuum (siphon), boiling (cezve/ibrik), cold (cold water over hours)."
|
|
165
|
+
},
|
|
166
|
+
"extraction": {
|
|
167
|
+
"enum": [
|
|
168
|
+
"percolation",
|
|
169
|
+
"immersion",
|
|
170
|
+
"hybrid"
|
|
171
|
+
],
|
|
172
|
+
"description": "Physical principle; matches equipment brewer.mechanism."
|
|
173
|
+
},
|
|
174
|
+
"description": {
|
|
175
|
+
"type": "string",
|
|
176
|
+
"minLength": 20,
|
|
177
|
+
"maxLength": 600,
|
|
178
|
+
"description": "Short neutral explanation in our own words."
|
|
179
|
+
},
|
|
180
|
+
"introduced_year": {
|
|
181
|
+
"type": "integer",
|
|
182
|
+
"minimum": 1000,
|
|
183
|
+
"maximum": 2100,
|
|
184
|
+
"description": "Year the method or device was invented or first sold."
|
|
185
|
+
},
|
|
186
|
+
"origin_country_code": {
|
|
187
|
+
"$ref": "https://schema.roastbook.coffee/common/common.schema.v0.4.0.json#/$defs/country_code"
|
|
188
|
+
},
|
|
189
|
+
"equipment_types": {
|
|
190
|
+
"type": "array",
|
|
191
|
+
"uniqueItems": true,
|
|
192
|
+
"description": "Equipment types needed, from the equipment schema's type list.",
|
|
193
|
+
"items": {
|
|
194
|
+
"$ref": "https://schema.roastbook.coffee/equipment/equipment.schema.v0.4.0.json#/$defs/type"
|
|
195
|
+
}
|
|
196
|
+
},
|
|
197
|
+
"typical_parameters": {
|
|
198
|
+
"title": "Typical parameters",
|
|
199
|
+
"type": "object",
|
|
200
|
+
"additionalProperties": false,
|
|
201
|
+
"description": "Common starting ranges, not rules.",
|
|
202
|
+
"properties": {
|
|
203
|
+
"dose_g": {
|
|
204
|
+
"$ref": "#/$defs/range"
|
|
205
|
+
},
|
|
206
|
+
"brew_ratio": {
|
|
207
|
+
"$ref": "#/$defs/range",
|
|
208
|
+
"description": "Grams of brew water per gram of coffee, for example 16 for 1:16. Used for filter, immersion and cold brew. A journal that keeps one ratio and a basis puts the ratio here when the basis is brew water (Roastbook: ratioBasis brew_water)."
|
|
209
|
+
},
|
|
210
|
+
"yield_ratio": {
|
|
211
|
+
"$ref": "#/$defs/range",
|
|
212
|
+
"description": "Grams of drink in the cup per gram of coffee, for example 2 for a 1:2 espresso. Used where the drink is weighed, mainly espresso. A journal that keeps one ratio and a basis puts the ratio here when the basis is the yield (Roastbook: ratioBasis target_yield)."
|
|
213
|
+
},
|
|
214
|
+
"brew_temperature_celsius": {
|
|
215
|
+
"$ref": "#/$defs/range",
|
|
216
|
+
"description": "Temperature of the brew water, in degrees Celsius."
|
|
217
|
+
},
|
|
218
|
+
"brew_time_seconds": {
|
|
219
|
+
"$ref": "#/$defs/range"
|
|
220
|
+
},
|
|
221
|
+
"brew_pressure_bar": {
|
|
222
|
+
"$ref": "#/$defs/range"
|
|
223
|
+
},
|
|
224
|
+
"grind_size": {
|
|
225
|
+
"type": "array",
|
|
226
|
+
"uniqueItems": true,
|
|
227
|
+
"minItems": 1,
|
|
228
|
+
"items": {
|
|
229
|
+
"$ref": "#/$defs/grind_size"
|
|
230
|
+
}
|
|
231
|
+
},
|
|
232
|
+
"grind_d50_microns": {
|
|
233
|
+
"$ref": "#/$defs/range",
|
|
234
|
+
"description": "Median particle size in micrometres, comparable across grinders."
|
|
235
|
+
},
|
|
236
|
+
"paper_filter_position": {
|
|
237
|
+
"type": "array",
|
|
238
|
+
"uniqueItems": true,
|
|
239
|
+
"minItems": 1,
|
|
240
|
+
"items": {
|
|
241
|
+
"$ref": "#/$defs/paper_filter_position"
|
|
242
|
+
},
|
|
243
|
+
"description": "Paper filter positions commonly used with this method."
|
|
244
|
+
},
|
|
245
|
+
"distribution_method": {
|
|
246
|
+
"type": "array",
|
|
247
|
+
"uniqueItems": true,
|
|
248
|
+
"minItems": 1,
|
|
249
|
+
"items": {
|
|
250
|
+
"$ref": "#/$defs/distribution_method"
|
|
251
|
+
},
|
|
252
|
+
"description": "Distribution methods commonly used with this method."
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
},
|
|
256
|
+
"recorded_parameters": {
|
|
257
|
+
"type": "array",
|
|
258
|
+
"uniqueItems": true,
|
|
259
|
+
"items": {
|
|
260
|
+
"$ref": "#/$defs/parameter"
|
|
261
|
+
},
|
|
262
|
+
"description": "Parameters a coffee journal should offer when logging a brew with this method."
|
|
263
|
+
},
|
|
264
|
+
"typical_drinks": {
|
|
265
|
+
"type": "array",
|
|
266
|
+
"uniqueItems": true,
|
|
267
|
+
"items": {
|
|
268
|
+
"type": "string",
|
|
269
|
+
"minLength": 1
|
|
270
|
+
},
|
|
271
|
+
"description": "Drinks usually made with this method, in plain lowercase English, for example espresso, cappuccino or flat white."
|
|
272
|
+
},
|
|
273
|
+
"xref": {
|
|
274
|
+
"type": "object",
|
|
275
|
+
"additionalProperties": false,
|
|
276
|
+
"properties": {
|
|
277
|
+
"wikidata": {
|
|
278
|
+
"type": "string",
|
|
279
|
+
"pattern": "^Q[1-9][0-9]*$",
|
|
280
|
+
"description": "Wikidata item id of the method, for example Q180289 for espresso."
|
|
281
|
+
},
|
|
282
|
+
"beanconqueror": {
|
|
283
|
+
"type": "string",
|
|
284
|
+
"pattern": "^[A-Z0-9_]+$",
|
|
285
|
+
"description": "Beanconqueror PREPARATION_TYPES key, for app imports."
|
|
286
|
+
}
|
|
287
|
+
},
|
|
288
|
+
"description": "Identifiers of the method in other datasets and apps."
|
|
289
|
+
},
|
|
290
|
+
"image": {
|
|
291
|
+
"$ref": "https://schema.roastbook.coffee/common/common.schema.v0.4.0.json#/$defs/image"
|
|
292
|
+
},
|
|
293
|
+
"checked_at": {
|
|
294
|
+
"$ref": "https://schema.roastbook.coffee/common/common.schema.v0.4.0.json#/$defs/datetime"
|
|
295
|
+
},
|
|
296
|
+
"filter_types": {
|
|
297
|
+
"type": "array",
|
|
298
|
+
"uniqueItems": true,
|
|
299
|
+
"items": {
|
|
300
|
+
"enum": [
|
|
301
|
+
"paper",
|
|
302
|
+
"metal",
|
|
303
|
+
"cloth",
|
|
304
|
+
"none"
|
|
305
|
+
]
|
|
306
|
+
},
|
|
307
|
+
"description": "Filters the method can use. paper: paper filters; metal: metal mesh or perforated metal; cloth: cloth filters; none: no filter (for example cezve or cold brew in a jar)."
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
{
|
|
2
|
+
"@context": {
|
|
3
|
+
"@version": 1.1,
|
|
4
|
+
"@base": "https://data.roastbook.coffee/places/",
|
|
5
|
+
"schema": "https://schema.org/",
|
|
6
|
+
"oc": "https://schema.roastbook.coffee/vocab#",
|
|
7
|
+
"xsd": "http://www.w3.org/2001/XMLSchema#",
|
|
8
|
+
"dcterms": "http://purl.org/dc/terms/",
|
|
9
|
+
"CafeOrCoffeeShop": "schema:CafeOrCoffeeShop",
|
|
10
|
+
"$schema": {
|
|
11
|
+
"@id": "dcterms:conformsTo",
|
|
12
|
+
"@type": "@id"
|
|
13
|
+
},
|
|
14
|
+
"meta": {
|
|
15
|
+
"@id": "oc:meta",
|
|
16
|
+
"@context": {
|
|
17
|
+
"licence": "schema:license",
|
|
18
|
+
"country_code": "schema:addressCountry",
|
|
19
|
+
"city": "oc:city",
|
|
20
|
+
"city_name": "oc:cityName"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"places": {
|
|
24
|
+
"@id": "schema:hasPart",
|
|
25
|
+
"@container": "@set"
|
|
26
|
+
},
|
|
27
|
+
"id": "@id",
|
|
28
|
+
"type": "@type",
|
|
29
|
+
"name": "schema:name",
|
|
30
|
+
"status": "oc:status",
|
|
31
|
+
"merged_into": {
|
|
32
|
+
"@id": "oc:mergedInto",
|
|
33
|
+
"@type": "@id"
|
|
34
|
+
},
|
|
35
|
+
"opened_on": {
|
|
36
|
+
"@id": "schema:foundingDate",
|
|
37
|
+
"@type": "xsd:date"
|
|
38
|
+
},
|
|
39
|
+
"closed_on": {
|
|
40
|
+
"@id": "schema:dissolutionDate",
|
|
41
|
+
"@type": "xsd:date"
|
|
42
|
+
},
|
|
43
|
+
"last_verified_at": {
|
|
44
|
+
"@id": "oc:lastVerifiedAt",
|
|
45
|
+
"@type": "xsd:dateTime"
|
|
46
|
+
},
|
|
47
|
+
"checked_at": {
|
|
48
|
+
"@id": "oc:checkedAt",
|
|
49
|
+
"@type": "xsd:dateTime"
|
|
50
|
+
},
|
|
51
|
+
"address": {
|
|
52
|
+
"@id": "schema:address",
|
|
53
|
+
"@context": {
|
|
54
|
+
"street_address": "schema:streetAddress",
|
|
55
|
+
"postal_code": "schema:postalCode",
|
|
56
|
+
"locality": "schema:addressLocality",
|
|
57
|
+
"region": "schema:addressRegion",
|
|
58
|
+
"country_code": "schema:addressCountry"
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"location": {
|
|
62
|
+
"@id": "schema:geo",
|
|
63
|
+
"@context": {
|
|
64
|
+
"lat": {
|
|
65
|
+
"@id": "schema:latitude",
|
|
66
|
+
"@type": "xsd:double"
|
|
67
|
+
},
|
|
68
|
+
"lon": {
|
|
69
|
+
"@id": "schema:longitude",
|
|
70
|
+
"@type": "xsd:double"
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
"opening_hours": "schema:openingHours",
|
|
75
|
+
"description": "schema:description",
|
|
76
|
+
"specialty_tier": "oc:specialtyTier",
|
|
77
|
+
"roasts_own_beans": "oc:roastsOwnBeans",
|
|
78
|
+
"roasters_served": {
|
|
79
|
+
"@id": "oc:roastersServed",
|
|
80
|
+
"@container": "@set",
|
|
81
|
+
"@context": {
|
|
82
|
+
"roaster_id": "schema:identifier",
|
|
83
|
+
"url": {
|
|
84
|
+
"@id": "schema:url",
|
|
85
|
+
"@type": "@id"
|
|
86
|
+
},
|
|
87
|
+
"own": "oc:ownRoast"
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
"serving": {
|
|
91
|
+
"@id": "oc:serving",
|
|
92
|
+
"@context": {
|
|
93
|
+
"espresso": "oc:espresso",
|
|
94
|
+
"filter": "oc:filter",
|
|
95
|
+
"pour_over": "oc:pourOver",
|
|
96
|
+
"batch_brew": "oc:batchBrew",
|
|
97
|
+
"cold_brew": "oc:coldBrew",
|
|
98
|
+
"decaf": "oc:decaf",
|
|
99
|
+
"plant_milk": "oc:plantMilk"
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
"amenities": {
|
|
103
|
+
"@id": "oc:amenities",
|
|
104
|
+
"@context": {
|
|
105
|
+
"wifi": "oc:wifi",
|
|
106
|
+
"laptop_friendly": "oc:laptopFriendly",
|
|
107
|
+
"kids_friendly": "oc:kidsFriendly",
|
|
108
|
+
"vegan_options": "oc:veganOptions",
|
|
109
|
+
"dogs_allowed": "oc:dogsAllowed",
|
|
110
|
+
"outdoor_seating": "oc:outdoorSeating",
|
|
111
|
+
"card_payment": "oc:cardPayment",
|
|
112
|
+
"cash_only": "oc:cashOnly",
|
|
113
|
+
"wheelchair_accessible": "oc:wheelchairAccessible"
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
"food": {
|
|
117
|
+
"@id": "oc:food",
|
|
118
|
+
"@context": {
|
|
119
|
+
"focus": "oc:focus",
|
|
120
|
+
"breakfast": "oc:breakfast",
|
|
121
|
+
"lunch": "oc:lunch",
|
|
122
|
+
"cakes_baked_in_house": "oc:cakesBakedInHouse"
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
"sells_beans": "oc:sellsBeans",
|
|
126
|
+
"sells_equipment": "oc:sellsEquipment",
|
|
127
|
+
"offers_courses": "oc:offersCourses",
|
|
128
|
+
"reusable_cup_systems": {
|
|
129
|
+
"@id": "oc:reusableCupSystems",
|
|
130
|
+
"@container": "@set"
|
|
131
|
+
},
|
|
132
|
+
"good_for": {
|
|
133
|
+
"@id": "oc:goodFor",
|
|
134
|
+
"@container": "@set"
|
|
135
|
+
},
|
|
136
|
+
"awards": {
|
|
137
|
+
"@id": "oc:awards",
|
|
138
|
+
"@container": "@set",
|
|
139
|
+
"@context": {
|
|
140
|
+
"year": {
|
|
141
|
+
"@id": "oc:year",
|
|
142
|
+
"@type": "xsd:gYear"
|
|
143
|
+
},
|
|
144
|
+
"url": {
|
|
145
|
+
"@id": "schema:url",
|
|
146
|
+
"@type": "@id"
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
"prices": {
|
|
151
|
+
"@id": "oc:prices",
|
|
152
|
+
"@context": {
|
|
153
|
+
"cappuccino": {
|
|
154
|
+
"@id": "oc:cappuccinoPrice",
|
|
155
|
+
"@context": {
|
|
156
|
+
"amount": "schema:price",
|
|
157
|
+
"currency": "schema:priceCurrency",
|
|
158
|
+
"observed_on": {
|
|
159
|
+
"@id": "oc:observedOn",
|
|
160
|
+
"@type": "xsd:date"
|
|
161
|
+
},
|
|
162
|
+
"source_url": {
|
|
163
|
+
"@id": "schema:url",
|
|
164
|
+
"@type": "@id"
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
},
|
|
170
|
+
"operator": {
|
|
171
|
+
"@id": "oc:operator",
|
|
172
|
+
"@context": {
|
|
173
|
+
"name": "schema:legalName",
|
|
174
|
+
"legal_form": "oc:legalForm",
|
|
175
|
+
"register_id": "oc:registerId"
|
|
176
|
+
}
|
|
177
|
+
},
|
|
178
|
+
"links": "@nest",
|
|
179
|
+
"website": {
|
|
180
|
+
"@id": "schema:url",
|
|
181
|
+
"@type": "@id",
|
|
182
|
+
"@nest": "links"
|
|
183
|
+
},
|
|
184
|
+
"instagram": {
|
|
185
|
+
"@id": "schema:sameAs",
|
|
186
|
+
"@type": "@id",
|
|
187
|
+
"@nest": "links"
|
|
188
|
+
},
|
|
189
|
+
"facebook": {
|
|
190
|
+
"@id": "schema:sameAs",
|
|
191
|
+
"@type": "@id",
|
|
192
|
+
"@nest": "links"
|
|
193
|
+
},
|
|
194
|
+
"image": {
|
|
195
|
+
"@id": "schema:image",
|
|
196
|
+
"@context": {
|
|
197
|
+
"url": {
|
|
198
|
+
"@id": "schema:contentUrl",
|
|
199
|
+
"@type": "@id"
|
|
200
|
+
},
|
|
201
|
+
"licence": "schema:license",
|
|
202
|
+
"author": "schema:creditText",
|
|
203
|
+
"source_url": {
|
|
204
|
+
"@id": "schema:url",
|
|
205
|
+
"@type": "@id"
|
|
206
|
+
},
|
|
207
|
+
"title": "schema:name",
|
|
208
|
+
"width": "schema:width",
|
|
209
|
+
"height": "schema:height"
|
|
210
|
+
}
|
|
211
|
+
},
|
|
212
|
+
"xref": "@nest",
|
|
213
|
+
"overture": {
|
|
214
|
+
"@id": "oc:overtureId",
|
|
215
|
+
"@nest": "xref"
|
|
216
|
+
},
|
|
217
|
+
"foursquare": {
|
|
218
|
+
"@id": "oc:foursquareId",
|
|
219
|
+
"@nest": "xref"
|
|
220
|
+
},
|
|
221
|
+
"wikidata": {
|
|
222
|
+
"@id": "schema:sameAs",
|
|
223
|
+
"@type": "@vocab",
|
|
224
|
+
"@nest": "xref",
|
|
225
|
+
"@context": {
|
|
226
|
+
"@vocab": "http://www.wikidata.org/entity/"
|
|
227
|
+
}
|
|
228
|
+
},
|
|
229
|
+
"google_place_id": {
|
|
230
|
+
"@id": "oc:googlePlaceId",
|
|
231
|
+
"@nest": "xref"
|
|
232
|
+
},
|
|
233
|
+
"external_ratings": {
|
|
234
|
+
"@id": "oc:externalRatings",
|
|
235
|
+
"@container": "@set",
|
|
236
|
+
"@context": {
|
|
237
|
+
"source": "oc:source",
|
|
238
|
+
"id": "schema:identifier",
|
|
239
|
+
"url": {
|
|
240
|
+
"@id": "schema:url",
|
|
241
|
+
"@type": "@id"
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|