/// <summary> /// Finds a subschema using the given schema reference. /// </summary> /// <param name="reference">The schema reference used to get the subschema.</param> /// <param name="rootSchema">The root schema to resolve the subschema from.</param> /// <returns>The matching subschema.</returns> public virtual JSchema GetSubschema(SchemaReference reference, JSchema rootSchema) { if (reference.SubschemaId == null) { return(rootSchema); } Uri rootSchemaId = reference.BaseUri; Uri subschemaId = reference.SubschemaId; JSchemaReader resolverSchemaReader = new JSchemaReader(new JSchemaReaderSettings { Resolver = this, BaseUri = rootSchema.BaseUri }); resolverSchemaReader.RootSchema = rootSchema; JSchema subSchema = null; SchemaDiscovery.FindSchema(s => subSchema = s, rootSchema, rootSchemaId, subschemaId, resolverSchemaReader); if (subSchema != null) { resolverSchemaReader.ResolveDeferedSchemas(); return(subSchema); } return(null); }
/// <summary> /// Gets the schema for a given URI. /// </summary> /// <param name="uri">The schema URI to resolve.</param> /// <returns>The resolved schema.</returns> public override JSchema GetSchema(Uri uri) { foreach (KnownSchema knownSchema in _knownSchemas) { string uriText = uri.ToString(); string knownText = (knownSchema.Id != null) ? knownSchema.Id.ToString() : string.Empty; if (uriText == knownText) { return(knownSchema.Schema); } if (uriText.StartsWith(knownText, StringComparison.Ordinal)) { string relative = uriText.Substring(knownText.Length); Uri relativeUri = new Uri(relative, UriKind.RelativeOrAbsolute); JSchemaReader resolverSchemaReader = new JSchemaReader(this) { RootSchema = knownSchema.Schema }; JSchema subSchema = null; SchemaDiscovery.FindSchema(s => subSchema = s, knownSchema.Schema, knownSchema.Id, relativeUri, resolverSchemaReader); if (subSchema != null) { resolverSchemaReader.ResolveDeferedSchemas(); return(subSchema); } } } if (_resolver != null) { return(_resolver.GetSchema(uri)); } return(null); }
/// <summary> /// Finds a subschema using the given schema reference. /// </summary> /// <param name="reference">The schema reference used to get the subschema.</param> /// <param name="rootSchema">The root schema to resolve the subschema from.</param> /// <returns>The matching subschema.</returns> public virtual JSchema GetSubschema(SchemaReference reference, JSchema rootSchema) { if (reference.SubschemaId == null) return rootSchema; Uri rootSchemaId = reference.BaseUri; Uri subschemaId = reference.SubschemaId; JSchemaReader resolverSchemaReader = new JSchemaReader(new JSchemaReaderSettings { Resolver = this, BaseUri = rootSchema.BaseUri }); resolverSchemaReader.RootSchema = rootSchema; JSchema subSchema = null; SchemaDiscovery.FindSchema(s => subSchema = s, rootSchema, rootSchemaId, subschemaId, resolverSchemaReader, ref resolverSchemaReader._schemaDiscovery); if (subSchema != null) { resolverSchemaReader.ResolveDeferedSchemas(); return subSchema; } return null; }