@@ -260,35 +260,23 @@ def validategeojson(data_input, mode):
260
260
import json
261
261
262
262
import jsonschema
263
+ import referencing
263
264
264
265
# this code comes from
265
266
# https://github.com/om-henners/GeoJSON_Validation/blob/master/geojsonvalidation/geojson_validation.py
267
+ schema_uri = "http://json-schema.org/geojson"
266
268
schema_home = os .path .join (_get_schemas_home (), "geojson" )
267
- base_schema = os .path .join (schema_home , "geojson.json" )
268
269
269
- with open (base_schema ) as fh :
270
- geojson_base = json .load (fh )
270
+ registry = referencing .Registry ()
271
271
272
- with open (os .path .join (schema_home , "crs.json" )) as fh :
273
- crs_json = json .load (fh )
272
+ for fn in ["geojson.json" , "crs.json" , "bbox.json" , "geometry.json" ]:
273
+ with open (os .path .join (schema_home , fn )) as fh :
274
+ schema_data = json .load (fh )
275
+ registry = registry .with_resource (f"{ schema_uri } /{ fn } " , referencing .Resource (schema_data , referencing .jsonschema .DRAFT4 ))
274
276
275
- with open (os .path .join (schema_home , "bbox.json" )) as fh :
276
- bbox_json = json .load (fh )
277
277
278
- with open (os .path .join (schema_home , "geometry.json" )) as fh :
279
- geometry_json = json .load (fh )
280
278
281
- cached_json = {
282
- "http://json-schema.org/geojson/crs.json" : crs_json ,
283
- "http://json-schema.org/geojson/bbox.json" : bbox_json ,
284
- "http://json-schema.org/geojson/geometry.json" : geometry_json
285
- }
286
-
287
- resolver = jsonschema .RefResolver (
288
- "http://json-schema.org/geojson/geojson.json" ,
289
- geojson_base , store = cached_json )
290
-
291
- validator = jsonschema .Draft4Validator (geojson_base , resolver = resolver )
279
+ validator = jsonschema .Draft4Validator ({"$ref" : f"{ schema_uri } /geojson.json" }, registry = registry )
292
280
try :
293
281
validator .validate (json .loads (data_input .stream .read ()))
294
282
passed = True
0 commit comments