diff --git a/.github/workflows/dotnet-core.yml b/.github/workflows/dotnet-core.yml
index a261c2a28d..fe05aac2bb 100644
--- a/.github/workflows/dotnet-core.yml
+++ b/.github/workflows/dotnet-core.yml
@@ -124,7 +124,7 @@ jobs:
if: github.event_name == 'pull_request'
# multiline comment support details: https://github.community/t/set-output-truncates-multiline-strings/16852/3
run: |
- dotnet analyze-semver -a artifacts/DLLs/Json.More/bin/Release/netstandard2.0/Json.More.dll -o semver-report-more.md -c .github/semver_config.json -p Json.More.Net
+ dotnet analyze-semver -a artifacts/DLLs/Json.More/bin/Release/netstandard2.0/Json.More.dll -o semver-report-more.md -c .github/semver_config.json -p Json.More.Net --include-header true --omit-disclaimer true --assume-changes true
unset HAS_REPORT
unset REPORT
if [ -s semver-report-more.md ]
@@ -176,7 +176,7 @@ jobs:
if: github.event_name == 'pull_request'
# multiline comment support details: https://github.community/t/set-output-truncates-multiline-strings/16852/3
run: |
- dotnet analyze-semver -a artifacts/DLLs/JsonPatch/bin/Release/netstandard2.0/JsonPatch.dll -o semver-report-patch.md -c .github/semver_config.json -p JsonPatch.Net
+ dotnet analyze-semver -a artifacts/DLLs/JsonPatch/bin/Release/netstandard2.0/JsonPatch.dll -o semver-report-patch.md -c .github/semver_config.json -p JsonPatch.Net --include-header true --omit-disclaimer true --assume-changes true
unset HAS_REPORT
unset REPORT
if [ -s semver-report-patch.md ]
@@ -228,7 +228,7 @@ jobs:
if: github.event_name == 'pull_request'
# multiline comment support details: https://github.community/t/set-output-truncates-multiline-strings/16852/3
run: |
- dotnet analyze-semver -a artifacts/DLLs/JsonPath/bin/Release/netstandard2.1/JsonPath.Net.dll -o semver-report-path.md -c .github/semver_config.json
+ dotnet analyze-semver -a artifacts/DLLs/JsonPath/bin/Release/netstandard2.1/JsonPath.Net.dll -o semver-report-path.md -c .github/semver_config.json --include-Header --include-header true --omit-disclaimer true --assume-changes true
unset HAS_REPORT
unset REPORT
if [ -s semver-report-path.md ]
@@ -280,7 +280,7 @@ jobs:
if: github.event_name == 'pull_request'
# multiline comment support details: https://github.community/t/set-output-truncates-multiline-strings/16852/3
run: |
- dotnet analyze-semver -a artifacts/DLLs/JsonPointer/bin/Release/netstandard2.0/JsonPointer.Net.dll -o semver-report-pointer.md -c .github/semver_config.json
+ dotnet analyze-semver -a artifacts/DLLs/JsonPointer/bin/Release/netstandard2.0/JsonPointer.Net.dll -o semver-report-pointer.md -c .github/semver_config.json --include-header true --omit-disclaimer true --assume-changes true
unset HAS_REPORT
unset REPORT
if [ -s semver-report-pointer.md ]
@@ -332,7 +332,7 @@ jobs:
if: github.event_name == 'pull_request'
# multiline comment support details: https://github.community/t/set-output-truncates-multiline-strings/16852/3
run: |
- dotnet analyze-semver -a artifacts/DLLs/JsonSchema/bin/Release/netstandard2.0/JsonSchema.Net.dll -o semver-report-schema.md -c .github/semver_config.json
+ dotnet analyze-semver -a artifacts/DLLs/JsonSchema/bin/Release/netstandard2.0/JsonSchema.Net.dll -o semver-report-schema.md -c .github/semver_config.json --include-header true --omit-disclaimer true --assume-changes true
unset HAS_REPORT
unset REPORT
if [ -s semver-report-schema.md ]
@@ -388,7 +388,7 @@ jobs:
if: github.event_name == 'pull_request'
# multiline comment support details: https://github.community/t/set-output-truncates-multiline-strings/16852/3
run: |
- dotnet analyze-semver -a artifacts/DLLs/JsonSchema.Generation/bin/Release/netstandard2.0/JsonSchema.Net.Generation.dll -o semver-report-schema-gen.md -c .github/semver_config.json
+ dotnet analyze-semver -a artifacts/DLLs/JsonSchema.Generation/bin/Release/netstandard2.0/JsonSchema.Net.Generation.dll -o semver-report-schema-gen.md -c .github/semver_config.json --include-header true --omit-disclaimer true --assume-changes true
unset HAS_REPORT
unset REPORT
if [ -s semver-report-schema-gen.md ]
@@ -440,7 +440,7 @@ jobs:
if: github.event_name == 'pull_request'
# multiline comment support details: https://github.community/t/set-output-truncates-multiline-strings/16852/3
run: |
- dotnet analyze-semver -a artifacts/DLLs/JsonSchema.Data/bin/Release/netstandard2.0/JsonSchema.Net.Data.dll -o semver-report-schema-data.md -c .github/semver_config.json
+ dotnet analyze-semver -a artifacts/DLLs/JsonSchema.Data/bin/Release/netstandard2.0/JsonSchema.Net.Data.dll -o semver-report-schema-data.md -c .github/semver_config.json --include-header true --omit-disclaimer true --assume-changes true
unset HAS_REPORT
unset REPORT
if [ -s semver-report-schema-data.md ]
@@ -492,7 +492,7 @@ jobs:
if: github.event_name == 'pull_request'
# multiline comment support details: https://github.community/t/set-output-truncates-multiline-strings/16852/3
run: |
- dotnet analyze-semver -a artifacts/DLLs/JsonLogic/bin/Release/netstandard2.1/JsonLogic.dll -o semver-report-logic.md -c .github/semver_config.json
+ dotnet analyze-semver -a artifacts/DLLs/JsonLogic/bin/Release/netstandard2.1/JsonLogic.dll -o semver-report-logic.md -c .github/semver_config.json --include-header true --omit-disclaimer true --assume-changes true
unset HAS_REPORT
unset REPORT
if [ -s semver-report-logic.md ]
diff --git a/JsonSchema.Tests/GithubTests.cs b/JsonSchema.Tests/GithubTests.cs
index 58efd55dd9..d45a71d1bb 100644
--- a/JsonSchema.Tests/GithubTests.cs
+++ b/JsonSchema.Tests/GithubTests.cs
@@ -418,14 +418,14 @@ public void Issue79_RefsTryingToResolveParent()
{
Fetch = uri =>
{
- Console.WriteLine("Fetching {0}", uri);
- return map.TryGetValue(uri, out var ret) ? ret : null;
- //return map[uri];
+ Assert.True(map.TryGetValue(uri, out var ret), "Unexpected uri: {0}", uri);
+ return ret;
}
}
};
- var validation = schema2.Validate(json, options);
- Console.WriteLine("Validation: {0}", JsonSerializer.Serialize(validation, new JsonSerializerOptions {WriteIndented = true}));
+ var result = schema2.Validate(json, options);
+ result.AssertValid();
+ Assert.AreEqual(result.NestedResults[0].NestedResults[0].AbsoluteSchemaLocation, "http://first.com/schema1.json#");
}
[Test]
@@ -473,4 +473,4 @@ public void Issue79_RefsTryingToResolveParent_Explanation()
schema.Validate(failing, new ValidationOptions{OutputFormat = OutputFormat.Detailed}).AssertInvalid();
}
}
-}
\ No newline at end of file
+}
diff --git a/JsonSchema/DynamicRefKeyword.cs b/JsonSchema/DynamicRefKeyword.cs
index e37c2c0fd6..c9706ffc7a 100644
--- a/JsonSchema/DynamicRefKeyword.cs
+++ b/JsonSchema/DynamicRefKeyword.cs
@@ -36,7 +36,7 @@ public DynamicRefKeyword(Uri value)
/// Contextual details for the validation process.
public void Validate(ValidationContext context)
{
- var parts = Reference.OriginalString.Split(new []{'#'}, StringSplitOptions.None);
+ var parts = Reference.OriginalString.Split(new[] {'#'}, StringSplitOptions.None);
var baseUri = parts[0];
var fragment = parts.Length > 1 ? parts[1] : null;
@@ -51,11 +51,8 @@ public void Validate(ValidationContext context)
var uriFolder = context.CurrentUri.OriginalString.EndsWith("/")
? context.CurrentUri
: context.CurrentUri.GetParentUri();
- newUri = uriFolder;
- var newBaseUri = new Uri(uriFolder, baseUri);
- if (!string.IsNullOrEmpty(fragment))
- newUri = newBaseUri;
- baseSchema = context.Options.SchemaRegistry.Get(newBaseUri);
+ newUri = new Uri(uriFolder, baseUri);
+ baseSchema = context.Options.SchemaRegistry.Get(newUri);
}
}
else
@@ -63,7 +60,7 @@ public void Validate(ValidationContext context)
newUri = context.CurrentUri;
if (fragment != null && context.DynamicAnchors.TryGetValue(fragment, out var dynamicSchema))
baseSchema = dynamicSchema;
- baseSchema ??= context.Options.SchemaRegistry.Get(newUri, fragment) ?? context.SchemaRoot;
+ baseSchema ??= context.Options.SchemaRegistry.Get(newUri) ?? context.SchemaRoot;
}
JsonSchema? schema;
@@ -87,6 +84,7 @@ public void Validate(ValidationContext context)
context.Message = $"Could not parse pointer `{fragment}`";
return;
}
+
(schema, newUri) = baseSchema.FindSubschema(pointer, newUri);
}
else
@@ -101,7 +99,7 @@ public void Validate(ValidationContext context)
}
var subContext = ValidationContext.From(context, newUri: newUri);
- if (!ReferenceEquals(baseSchema, context.SchemaRoot))
+ if (!ReferenceEquals(baseSchema, context.SchemaRoot))
subContext.SchemaRoot = baseSchema!;
schema.ValidateSubschema(subContext);
context.NestedContexts.Add(subContext);
@@ -150,4 +148,4 @@ public override void Write(Utf8JsonWriter writer, DynamicRefKeyword value, JsonS
JsonSerializer.Serialize(writer, value.Reference, options);
}
}
-}
\ No newline at end of file
+}
diff --git a/JsonSchema/IdKeyword.cs b/JsonSchema/IdKeyword.cs
index 294fbdd58f..f48153ca59 100644
--- a/JsonSchema/IdKeyword.cs
+++ b/JsonSchema/IdKeyword.cs
@@ -53,7 +53,13 @@ public void Validate(ValidationContext context)
internal Uri UpdateUri(Uri? currentUri)
{
- return currentUri == null || Id.IsAbsoluteUri ? Id : new Uri(currentUri, Id);
+ if (currentUri == null || Id.IsAbsoluteUri) return Id;
+
+ var baseUri = currentUri;
+ if (currentUri.Segments.Length > 1 && currentUri.OriginalString.EndsWith("/"))
+ baseUri = baseUri.GetParentUri();
+
+ return new Uri(baseUri, Id);
}
/// Indicates whether the current object is equal to another object of the same type.
@@ -101,4 +107,4 @@ public override void Write(Utf8JsonWriter writer, IdKeyword value, JsonSerialize
writer.WriteString(IdKeyword.Name, value.Id.OriginalString);
}
}
-}
\ No newline at end of file
+}
diff --git a/JsonSchema/JsonSchema.csproj b/JsonSchema/JsonSchema.csproj
index 5ec6692ea1..8f1ad4a107 100644
--- a/JsonSchema/JsonSchema.csproj
+++ b/JsonSchema/JsonSchema.csproj
@@ -13,8 +13,8 @@
https://github.com/gregsdennis/json-everything
https://github.com/gregsdennis/json-everything
json-schema validation schema json
- 1.9.2
- 1.9.2.0
+ 1.9.3
+ 1.9.3.0
1.0.0.0
LICENSE
JsonSchema.Net
diff --git a/JsonSchema/RecursiveRefKeyword.cs b/JsonSchema/RecursiveRefKeyword.cs
index a3a9776747..28f5f9c796 100644
--- a/JsonSchema/RecursiveRefKeyword.cs
+++ b/JsonSchema/RecursiveRefKeyword.cs
@@ -36,7 +36,7 @@ public RecursiveRefKeyword(Uri value)
/// Contextual details for the validation process.
public void Validate(ValidationContext context)
{
- var parts = Reference.OriginalString.Split(new []{'#'}, StringSplitOptions.None);
+ var parts = Reference.OriginalString.Split(new[] {'#'}, StringSplitOptions.None);
var baseUri = parts[0];
var fragment = parts.Length > 1 ? parts[1] : null;
@@ -85,6 +85,7 @@ public void Validate(ValidationContext context)
context.Message = $"Could not parse pointer `{fragment}`";
return;
}
+
(schema, newUri) = baseSchema.FindSubschema(pointer, newUri);
}
else
@@ -99,7 +100,7 @@ public void Validate(ValidationContext context)
}
var subContext = ValidationContext.From(context, newUri: newUri);
- if (!ReferenceEquals(baseSchema, context.SchemaRoot))
+ if (!ReferenceEquals(baseSchema, context.SchemaRoot))
subContext.SchemaRoot = baseSchema!;
schema.ValidateSubschema(subContext);
context.NestedContexts.Add(subContext);
@@ -148,4 +149,4 @@ public override void Write(Utf8JsonWriter writer, RecursiveRefKeyword value, Jso
JsonSerializer.Serialize(writer, value.Reference, options);
}
}
-}
\ No newline at end of file
+}
diff --git a/JsonSchema/RefKeyword.cs b/JsonSchema/RefKeyword.cs
index 7cc1d5241a..6f4d8b77ba 100644
--- a/JsonSchema/RefKeyword.cs
+++ b/JsonSchema/RefKeyword.cs
@@ -40,7 +40,7 @@ public RefKeyword(Uri value)
/// Contextual details for the validation process.
public void Validate(ValidationContext context)
{
- var parts = Reference.OriginalString.Split(new []{'#'}, StringSplitOptions.None);
+ var parts = Reference.OriginalString.Split(new[] {'#'}, StringSplitOptions.None);
var baseUri = parts[0];
var fragment = parts.Length > 1 ? parts[1] : null;
@@ -55,17 +55,14 @@ public void Validate(ValidationContext context)
var uriFolder = context.CurrentUri.OriginalString.EndsWith("/")
? context.CurrentUri
: context.CurrentUri.GetParentUri();
- newUri = uriFolder;
- var newBaseUri = new Uri(uriFolder, baseUri);
- if (!string.IsNullOrEmpty(fragment))
- newUri = newBaseUri;
- baseSchema = context.Options.SchemaRegistry.Get(newBaseUri);
+ newUri = new Uri(uriFolder, baseUri);
+ baseSchema = context.Options.SchemaRegistry.Get(newUri);
}
}
else
{
newUri = context.CurrentUri;
- baseSchema = context.SchemaRoot;
+ baseSchema = context.Options.SchemaRegistry.Get(newUri) ?? context.SchemaRoot;
}
JsonSchema? schema;
@@ -89,6 +86,7 @@ public void Validate(ValidationContext context)
context.Message = $"Could not parse pointer `{fragment}`";
return;
}
+
(schema, newUri) = baseSchema.FindSubschema(pointer, newUri);
}
else
@@ -103,9 +101,9 @@ public void Validate(ValidationContext context)
}
var subContext = ValidationContext.From(context, newUri: newUri);
- if (!string.IsNullOrEmpty(fragment) && JsonPointer.TryParse(fragment!, out var reference))
+ if (!string.IsNullOrEmpty(fragment) && JsonPointer.TryParse(fragment!, out var reference))
subContext.Reference = reference;
- if (!ReferenceEquals(baseSchema, context.SchemaRoot))
+ if (!ReferenceEquals(baseSchema, context.SchemaRoot))
subContext.SchemaRoot = baseSchema!;
schema.ValidateSubschema(subContext);
context.NestedContexts.Add(subContext);
@@ -156,4 +154,4 @@ public override void Write(Utf8JsonWriter writer, RefKeyword value, JsonSerializ
}
// Source: https://github.com/WebDAVSharp/WebDAVSharp.Server/blob/1d2086a502937936ebc6bfe19cfa15d855be1c31/WebDAVExtensions.cs
-}
\ No newline at end of file
+}
diff --git a/docs_source/release-notes/json-schema.md b/docs_source/release-notes/json-schema.md
index 9fe31f88a4..a47898c728 100644
--- a/docs_source/release-notes/json-schema.md
+++ b/docs_source/release-notes/json-schema.md
@@ -1,3 +1,7 @@
+# [1.9.2](https://github.com/gregsdennis/json-everything/pull/83)
+
+[#82](https://github.com/gregsdennis/json-everything/pulll/82) - Fixing issues managing `ValidationContext.CurrentUri`. Credit to [@amosonn](https://github.com/amosonn).
+
# [1.9.2](https://github.com/gregsdennis/json-everything/pull/80)
[#79](https://github.com/gregsdennis/json-everything/issues/79) - `$ref` was calling out to resolve a parent URI.