private Uri ResolveSchemaReference(JSchema schema) { Uri resolvedReference = null; foreach (JSchema s in _schemaStack.Reverse()) { Uri part = s.Id; if (part != null) { if (resolvedReference == null) { resolvedReference = part; } else { resolvedReference = SchemaDiscovery.ResolveSchemaId(resolvedReference, part); } } } try { resolvedReference = SchemaDiscovery.ResolveSchemaId(resolvedReference, schema.Reference); } catch (Exception ex) { string message = "Error resolving schema reference '{0}' in the scope '{1}'. The resolved reference must be a valid URI.".FormatWith(CultureInfo.InvariantCulture, schema.Reference, resolvedReference); throw JSchemaReaderException.Create(schema, _baseUri, schema.Path, message, ex); } return(resolvedReference); }
private void LoadAndSetSchema(JsonReader reader, Action <JSchema> setSchema, bool resolveDeferedImmediately = false) { JSchema schema = new JSchema(); _schemaStack.Push(schema); ReadSchema(reader, schema); //schema.Reference; if (schema.Reference != null) { Uri resolvedReference = null; foreach (JSchema s in _schemaStack.Reverse()) { Uri part = s.Id; if (part != null) { if (resolvedReference == null) { resolvedReference = part; } else { resolvedReference = SchemaDiscovery.ResolveSchemaId(resolvedReference, part); } } } resolvedReference = SchemaDiscovery.ResolveSchemaId(resolvedReference, schema.Reference); JSchema resolvedSchema = _resolver.GetSchema(resolvedReference); if (resolvedSchema != null) { schema = resolvedSchema; } else { DeferedSchema deferedSchema = new DeferedSchema(resolvedReference, schema, setSchema); _deferedSchemas.Add(deferedSchema); } } setSchema(schema); _schemaStack.Pop(); }
private Uri ResolveBaseUri(ResolveSchemaContext context, out string fragment) { Uri baseUri = context.ResolverBaseUri; Uri uri = context.ResolvedSchemaId; if (!uri.IsAbsoluteUri && uri.OriginalString.StartsWith("#", StringComparison.OrdinalIgnoreCase)) { fragment = uri.OriginalString; return(baseUri); } if (baseUri == null || (!baseUri.IsAbsoluteUri && baseUri.OriginalString.Length == 0)) { return(RemoveFragment(uri, out fragment)); } uri = RemoveFragment(uri, out fragment); uri = SchemaDiscovery.ResolveSchemaId(baseUri, uri); return(uri); }
private Uri ResolveSchemaReference(JSchema schema) { Uri resolvedReference = null; foreach (JSchema s in _schemaStack.Reverse()) { Uri part = s.Id; if (part != null) { if (resolvedReference == null) { resolvedReference = part; } else { resolvedReference = SchemaDiscovery.ResolveSchemaId(resolvedReference, part); } } } resolvedReference = SchemaDiscovery.ResolveSchemaId(resolvedReference, schema.Reference); return(resolvedReference); }