Skip to content

Commit bda84da

Browse files
committed
Improve schema retrieval docs
1 parent 32356e9 commit bda84da

File tree

1 file changed

+84
-22
lines changed

1 file changed

+84
-22
lines changed

doc/schema-retrieval.md

Lines changed: 84 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,31 +6,99 @@ In the event a schema references a schema identifier that is not a subschema res
66

77
In the event that the schema does not define a schema identifier using the `$id` keyword, the retrieval IRI will be used as it's schema identifier.
88

9+
## Loading Schemas from memory
10+
11+
Schemas can be loaded through a map.
12+
13+
```java
14+
String schemaData = "{\r\n"
15+
+ " \"type\": \"integer\"\r\n"
16+
+ "}";
17+
Map<String, String> schemas = Collections.singletonMap("https://www.example.com/integer.json", schemaData);
18+
JsonSchemaFactory schemaFactory = JsonSchemaFactory
19+
.getInstance(VersionFlag.V7,
20+
builder -> builder.schemaLoaders(schemaLoaders -> schemaLoaders.schemas(schemas)));
21+
```
22+
23+
Schemas can be loaded through a function.
24+
25+
```java
26+
String schemaData = "{\r\n"
27+
+ " \"type\": \"integer\"\r\n"
28+
+ "}";
29+
Map<String, String> schemas = Collections.singletonMap("https://www.example.com/integer.json", schemaData);
30+
JsonSchemaFactory schemaFactory = JsonSchemaFactory
31+
.getInstance(VersionFlag.V7,
32+
builder -> builder.schemaLoaders(schemaLoaders -> schemaLoaders.schemas(schemas::get)));
33+
```
34+
35+
Schemas can also be loaded in the following manner.
36+
37+
```java
38+
class RegistryEntry {
39+
private final String schemaData;
40+
41+
public RegistryEntry(String schemaData) {
42+
this.schemaData = schemaData;
43+
}
44+
45+
public String getSchemaData() {
46+
return this.schemaData;
47+
}
48+
}
49+
String schemaData = "{\r\n"
50+
+ " \"type\": \"integer\"\r\n"
51+
+ "}";
52+
Map<String, RegistryEntry> registry = Collections
53+
.singletonMap("https://www.example.com/integer.json", new RegistryEntry(schemaData));
54+
JsonSchemaFactory schemaFactory = JsonSchemaFactory
55+
.getInstance(VersionFlag.V7, builder -> builder
56+
.schemaLoaders(schemaLoaders -> schemaLoaders.schemas(registry::get, RegistryEntry::getSchemaData)));
57+
```
58+
959
## Mapping Schema Identifier to Retrieval IRI
1060

1161
The schema identifier can be mapped to the retrieval IRI by implementing the `SchemaMapper` interface.
1262

1363
### Configuring Schema Mapper
1464

1565
```java
16-
JsonSchemaFactory schemaFactory = JsonSchemaFactory.builder()
17-
.schemaMappers(schemaMappers -> schemaMappers
18-
.add(new CustomSchemaMapper())
19-
.addMetaSchema(JsonMetaSchema.getV7())
20-
.defaultMetaSchemaURI(JsonMetaSchema.getV7().getUri())
21-
.build();
66+
class CustomSchemaMapper implements SchemaMapper {
67+
@Override
68+
public AbsoluteIri map(AbsoluteIri absoluteIRI) {
69+
String iri = absoluteIRI.toString();
70+
if ("https://www.example.com/integer.json".equals(iri)) {
71+
return AbsoluteIri.of("classpath:schemas/integer.json");
72+
}
73+
return null;
74+
}
75+
}
76+
77+
JsonSchemaFactory schemaFactory = JsonSchemaFactory
78+
.getInstance(VersionFlag.V7,
79+
builder -> builder.schemaMappers(schemaMappers -> schemaMappers.add(new CustomSchemaMapper())));
2280
```
2381

2482
### Configuring Prefix Mappings
2583

2684
```java
27-
JsonSchemaFactory schemaFactory = JsonSchemaFactory.builder()
28-
.schemaMappers(schemaMappers -> schemaMappers
29-
.mapPrefix("https://", "http://")
30-
.mapPrefix("http://json-schema.org", "classpath:"))
31-
.addMetaSchema(JsonMetaSchema.getV7())
32-
.defaultMetaSchemaURI(JsonMetaSchema.getV7().getUri())
33-
.build();
85+
JsonSchemaFactory schemaFactory = JsonSchemaFactory
86+
.getInstance(VersionFlag.V7,
87+
builder -> builder
88+
.schemaMappers(schemaMappers -> schemaMappers
89+
.mapPrefix("https://json-schema.org", "classpath:")
90+
.mapPrefix("http://json-schema.org", "classpath:")));
91+
```
92+
93+
### Configuring Mappings
94+
95+
```java
96+
Map<String, String> mappings = Collections
97+
.singletonMap("https://www.example.com/integer.json", "classpath:schemas/integer.json");
98+
99+
JsonSchemaFactory schemaFactory = JsonSchemaFactory
100+
.getInstance(VersionFlag.V7,
101+
builder -> builder.schemaMappers(schemaMappers -> schemaMappers.mappings(mappings)));
34102
```
35103

36104
## Customizing Network Schema Retrieval
@@ -86,13 +154,7 @@ Within the `JsonSchemaFactory` the custom `SchemaLoader` must be configured.
86154
```java
87155
CustomUriSchemaLoader uriSchemaLoader = new CustomUriSchemaLoader(authorizationToken);
88156

89-
JsonSchemaFactory schemaFactory = JsonSchemaFactory.builder()
90-
.schemaLoaders(schemaLoaders -> schemaLoaders.add(uriSchemaLoader))
91-
.addMetaSchema(JsonMetaSchema.getV7())
92-
.defaultMetaSchemaURI(JsonMetaSchema.getV7().getUri())
93-
.build();
94-
JsonSchema jsonSchema = schemaFactory.getSchema(schemaUri);
95-
for (ValidationMessage validationMessage : jsonSchema.validate(jsonNodeRecord)) {
96-
// handle the validation messages
97-
}
157+
JsonSchemaFactory schemaFactory = JsonSchemaFactory
158+
.getInstance(VersionFlag.V7,
159+
builder -> builder.schemaLoaders(schemaLoaders -> schemaLoaders.add(uriSchemaLoader)));
98160
```

0 commit comments

Comments
 (0)