Skip to content

Commit

Permalink
move jsonSchemaValidation in its own Repo
Browse files Browse the repository at this point in the history
  • Loading branch information
HLWeil committed Nov 29, 2022
1 parent 9c66fa8 commit fdf248d
Show file tree
Hide file tree
Showing 6 changed files with 188 additions and 66 deletions.
12 changes: 9 additions & 3 deletions ISADotNet.sln
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.30503.244
# Visual Studio Version 17
VisualStudioVersion = 17.3.32929.385
MinimumVisualStudioVersion = 15.0.26124.0
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{6C30EF02-8A2F-4C2A-9FC4-4E4A125F6CE8}"
ProjectSection(SolutionItems) = preProject
Expand Down Expand Up @@ -34,7 +34,9 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docs", "docs", "{BF89DA8A-6
EndProject
Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "ISADotNet.Viz", "src\ISADotNet.Viz\ISADotNet.Viz.fsproj", "{17504B07-7966-40FE-BE31-49682EEDD18A}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "ISADotNet.QueryModel", "src\ISADotNet.QueryModel\ISADotNet.QueryModel.fsproj", "{10E8D0C4-B603-41A1-BC4D-68B672188F28}"
Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "ISADotNet.QueryModel", "src\ISADotNet.QueryModel\ISADotNet.QueryModel.fsproj", "{10E8D0C4-B603-41A1-BC4D-68B672188F28}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "ISADotNet.Validation", "src\ISADotNet.Validation\ISADotNet.Validation.fsproj", "{AC745163-53B6-4062-A3F9-9DC7FFE484CE}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Expand Down Expand Up @@ -62,6 +64,10 @@ Global
{10E8D0C4-B603-41A1-BC4D-68B672188F28}.Debug|Any CPU.Build.0 = Debug|Any CPU
{10E8D0C4-B603-41A1-BC4D-68B672188F28}.Release|Any CPU.ActiveCfg = Release|Any CPU
{10E8D0C4-B603-41A1-BC4D-68B672188F28}.Release|Any CPU.Build.0 = Release|Any CPU
{AC745163-53B6-4062-A3F9-9DC7FFE484CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AC745163-53B6-4062-A3F9-9DC7FFE484CE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AC745163-53B6-4062-A3F9-9DC7FFE484CE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AC745163-53B6-4062-A3F9-9DC7FFE484CE}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down
21 changes: 21 additions & 0 deletions src/ISADotNet.Validation/ISADotNet.Validation.fsproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
</PropertyGroup>

<ItemGroup>
<Compile Include="ValidationResult.fs" />
<Compile Include="JsonSchemaValidation.fs" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="NJsonSchema" Version="10.8.0" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\ISADotNet\ISADotNet.fsproj" />
</ItemGroup>

</Project>
90 changes: 90 additions & 0 deletions src/ISADotNet.Validation/JsonSchemaValidation.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
namespace ISADotNet.Validation

module JSchema =

let validate (schemaURL : string) (objectString : string) =
let settings = NJsonSchema.Validation.JsonSchemaValidatorSettings()
let schema = NJsonSchema.JsonSchema.FromUrlAsync(schemaURL)
let r = schema.Result.Validate(objectString,settings)

ValidationResult.OfJSchemaOutput(r |> Seq.length |> (=) 0,r |> Seq.map (fun err -> err.ToString()) |> Seq.toArray)

let validateAssay (assayString : string) =
let assayUrl = "https://raw.githubusercontent.com/HLWeil/isa-specs/master/source/_static/isajson/assay_schema.json"
validate assayUrl assayString

let validateComment (commentString : string) =
let commentUrl = "https://raw.githubusercontent.com/HLWeil/isa-specs/master/source/_static/isajson/comment_schema.json"
validate commentUrl commentString

let validateData (dataString : string) =
let dataUrl = "https://raw.githubusercontent.com/HLWeil/isa-specs/master/source/_static/isajson/data_schema.json"
validate dataUrl dataString

let validateFactor (factorString : string) =
let factorUrl = "https://raw.githubusercontent.com/HLWeil/isa-specs/master/source/_static/isajson/factor_schema.json"
validate factorUrl factorString

let validateFactorValue (factorValueString : string) =
let factorValueUrl = "https://raw.githubusercontent.com/HLWeil/isa-specs/master/source/_static/isajson/factor_value_schema.json"
validate factorValueUrl factorValueString

let validateInvestigation (investigationString : string) =
let investigationUrl = "https://raw.githubusercontent.com/HLWeil/isa-specs/master/source/_static/isajson/investigation_schema.json"
validate investigationUrl investigationString

let validateMaterialAttribute (materialAttributeString : string) =
let materialAttributeUrl = "https://raw.githubusercontent.com/HLWeil/isa-specs/master/source/_static/isajson/material_attribute_schema.json"
validate materialAttributeUrl materialAttributeString

let validateMaterialAttributeValue (materialAttributeValueString : string) =
let materialAttributeValueUrl = "https://raw.githubusercontent.com/HLWeil/isa-specs/master/source/_static/isajson/material_attribute_value_schema.json"
validate materialAttributeValueUrl materialAttributeValueString

let validateMaterial (materialString : string) =
let materialUrl = "https://raw.githubusercontent.com/HLWeil/isa-specs/master/source/_static/isajson/material_schema.json"
validate materialUrl materialString

let validateOntologyAnnotation (ontologyAnnotationString : string) =
let ontologyAnnotationUrl = "https://raw.githubusercontent.com/HLWeil/isa-specs/master/source/_static/isajson/ontology_annotation_schema.json"
validate ontologyAnnotationUrl ontologyAnnotationString

let validateOntologySourceReference (ontologySourceReferenceString : string) =
let ontologySourceReferenceUrl = "https://raw.githubusercontent.com/HLWeil/isa-specs/master/source/_static/isajson/ontology_source_reference_schema.json"
validate ontologySourceReferenceUrl ontologySourceReferenceString

let validatePerson (personString : string) =
let personUrl = "https://raw.githubusercontent.com/HLWeil/isa-specs/master/source/_static/isajson/person_schema.json"
validate personUrl personString

let validateProcessParameterValue (processParameterValueString : string) =
let processParameterValueUrl = "https://raw.githubusercontent.com/HLWeil/isa-specs/master/source/_static/isajson/process_parameter_value_schema.json"
validate processParameterValueUrl processParameterValueString

let validateProcess (processString : string) =
let processUrl = "https://raw.githubusercontent.com/HLWeil/isa-specs/master/source/_static/isajson/process_schema.json"
validate processUrl processString

let validateProtocolParameter (protocolParameterString : string) =
let protocolParameterUrl = "https://raw.githubusercontent.com/HLWeil/isa-specs/master/source/_static/isajson/protocol_parameter_schema.json"
validate protocolParameterUrl protocolParameterString

let validateProtocol (protocolString : string) =
let protocolUrl = "https://raw.githubusercontent.com/HLWeil/isa-specs/master/source/_static/isajson/protocol_schema.json"
validate protocolUrl protocolString

let validatePublication (publicationString : string) =
let publicationUrl = "https://raw.githubusercontent.com/HLWeil/isa-specs/master/source/_static/isajson/publication_schema.json"
validate publicationUrl publicationString

let validateSample (sampleString : string) =
let sampleUrl = "https://raw.githubusercontent.com/HLWeil/isa-specs/master/source/_static/isajson/sample_schema.json"
validate sampleUrl sampleString

let validateSource (sourceString : string) =
let sourceUrl = "https://raw.githubusercontent.com/HLWeil/isa-specs/master/source/_static/isajson/source_schema.json"
validate sourceUrl sourceString

let validateStudy (studyString : string) =
let studyUrl = "https://raw.githubusercontent.com/HLWeil/isa-specs/master/source/_static/isajson/study_schema.json"
validate studyUrl studyString
20 changes: 20 additions & 0 deletions src/ISADotNet.Validation/ValidationResult.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
namespace ISADotNet.Validation

type ValidationResult =
| Ok
| Failed of string []

member this.Success =
match this with
| Ok -> true
| _ -> false

member this.GetErrors() =
match this with
| Ok -> [||]
| Failed errors -> errors

static member internal OfJSchemaOutput (output : bool * string []) =
match output with
| true, _ -> Ok
| false, errors -> Failed errors
7 changes: 4 additions & 3 deletions tests/ISADotNet.Tests/ISADotNet.Tests.fsproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework>
<TargetFramework>net6.0</TargetFramework>
<GenerateProgramFile>false</GenerateProgramFile>
</PropertyGroup>

Expand Down Expand Up @@ -36,11 +36,12 @@
<PackageReference Include="FSharp.Data" Version="5.0.2" />
<PackageReference Include="NJsonSchema" Version="10.8.0" />
<PackageReference Include="YoloDev.Expecto.TestSdk" Version="0.*" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.*" />
<PackageReference Update="FSharp.Core" Version="6.0.5" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.4.0" />
<PackageReference Update="FSharp.Core" Version="7.0.0" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\..\src\ISADotNet.Validation\ISADotNet.Validation.fsproj" />
<ProjectReference Include="..\..\src\ISADotNet\ISADotNet.fsproj" />
<ProjectReference Include="..\..\src\ISADotNet.XLSX\ISADotNet.XLSX.fsproj" />
</ItemGroup>
Expand Down
104 changes: 44 additions & 60 deletions tests/ISADotNet.Tests/JsonSchemaValidation.fs
Original file line number Diff line number Diff line change
Expand Up @@ -4,106 +4,90 @@ open Expecto
open FSharp.Data
open NJsonSchema

module Validation =

open NJsonSchema
open NJsonSchema.Validation
open NJsonSchema.Validation.FormatValidators
open Newtonsoft.Json.Linq
open System

module JSchema =

let validate (schemaURL : string) (objectString : string) : (bool * string []) =
let settings = NJsonSchema.Validation.JsonSchemaValidatorSettings()
let schema = NJsonSchema.JsonSchema.FromUrlAsync(schemaURL)
let r = schema.Result.Validate(objectString,settings)

r |> Seq.length |> (=) 0,
r |> Seq.map (fun err -> err.ToString()) |> Seq.toArray
open ISADotNet.Validation

module Expect =

let matchingSchema (schemaURL : string) (objectString : string)=
let isValid,msg = JSchema.validate schemaURL objectString
Expect.isTrue isValid (sprintf "Json Object did not match Json Schema: %A" msg)

let matchingResult (vr : ValidationResult)=
Expect.isTrue vr.Success (sprintf "Json Object did not match Json Schema: %A" (vr.GetErrors()))

let matchingAssay (assayString : string) =
let assayUrl = "https://raw.githubusercontent.com/HLWeil/isa-specs/master/source/_static/isajson/assay_schema.json"
matchingSchema assayUrl assayString
ISADotNet.Validation.JSchema.validateAssay assayString
|> matchingResult

let matchingComment (commentString : string) =
let commentUrl = "https://raw.githubusercontent.com/HLWeil/isa-specs/master/source/_static/isajson/comment_schema.json"
matchingSchema commentUrl commentString
ISADotNet.Validation.JSchema.validateComment commentString
|> matchingResult

let matchingData (dataString : string) =
let dataUrl = "https://raw.githubusercontent.com/HLWeil/isa-specs/master/source/_static/isajson/data_schema.json"
matchingSchema dataUrl dataString
ISADotNet.Validation.JSchema.validateData dataString
|> matchingResult

let matchingFactor (factorString : string) =
let factorUrl = "https://raw.githubusercontent.com/HLWeil/isa-specs/master/source/_static/isajson/factor_schema.json"
matchingSchema factorUrl factorString
ISADotNet.Validation.JSchema.validateFactor factorString
|> matchingResult

let matchingFactorValue (factorValueString : string) =
let factorValueUrl = "https://raw.githubusercontent.com/HLWeil/isa-specs/master/source/_static/isajson/factor_value_schema.json"
matchingSchema factorValueUrl factorValueString
ISADotNet.Validation.JSchema.validateFactorValue factorValueString
|> matchingResult

let matchingInvestigation (investigationString : string) =
let investigationUrl = "https://raw.githubusercontent.com/HLWeil/isa-specs/master/source/_static/isajson/investigation_schema.json"
matchingSchema investigationUrl investigationString
ISADotNet.Validation.JSchema.validateInvestigation investigationString
|> matchingResult

let matchingMaterialAttribute (materialAttributeString : string) =
let materialAttributeUrl = "https://raw.githubusercontent.com/HLWeil/isa-specs/master/source/_static/isajson/material_attribute_schema.json"
matchingSchema materialAttributeUrl materialAttributeString
ISADotNet.Validation.JSchema.validateMaterialAttribute materialAttributeString
|> matchingResult

let matchingMaterialAttributeValue (materialAttributeValueString : string) =
let materialAttributeValueUrl = "https://raw.githubusercontent.com/HLWeil/isa-specs/master/source/_static/isajson/material_attribute_value_schema.json"
matchingSchema materialAttributeValueUrl materialAttributeValueString
ISADotNet.Validation.JSchema.validateMaterialAttributeValue materialAttributeValueString
|> matchingResult

let matchingMaterial (materialString : string) =
let materialUrl = "https://raw.githubusercontent.com/HLWeil/isa-specs/master/source/_static/isajson/material_schema.json"
matchingSchema materialUrl materialString
ISADotNet.Validation.JSchema.validateMaterial materialString
|> matchingResult

let matchingOntologyAnnotation (ontologyAnnotationString : string) =
let ontologyAnnotationUrl = "https://raw.githubusercontent.com/HLWeil/isa-specs/master/source/_static/isajson/ontology_annotation_schema.json"
matchingSchema ontologyAnnotationUrl ontologyAnnotationString
ISADotNet.Validation.JSchema.validateOntologyAnnotation ontologyAnnotationString
|> matchingResult

let matchingOntologySourceReference (ontologySourceReferenceString : string) =
let ontologySourceReferenceUrl = "https://raw.githubusercontent.com/HLWeil/isa-specs/master/source/_static/isajson/ontology_source_reference_schema.json"
matchingSchema ontologySourceReferenceUrl ontologySourceReferenceString
ISADotNet.Validation.JSchema.validateOntologySourceReference ontologySourceReferenceString
|> matchingResult

let matchingPerson (personString : string) =
let personUrl = "https://raw.githubusercontent.com/HLWeil/isa-specs/master/source/_static/isajson/person_schema.json"
matchingSchema personUrl personString
ISADotNet.Validation.JSchema.validatePerson personString
|> matchingResult

let matchingProcessParameterValue (processParameterValueString : string) =
let processParameterValueUrl = "https://raw.githubusercontent.com/HLWeil/isa-specs/master/source/_static/isajson/process_parameter_value_schema.json"
matchingSchema processParameterValueUrl processParameterValueString
ISADotNet.Validation.JSchema.validateProcessParameterValue processParameterValueString
|> matchingResult

let matchingProcess (processString : string) =
let processUrl = "https://raw.githubusercontent.com/HLWeil/isa-specs/master/source/_static/isajson/process_schema.json"
matchingSchema processUrl processString
ISADotNet.Validation.JSchema.validateProcess processString
|> matchingResult

let matchingProtocolParameter (protocolParameterString : string) =
let protocolParameterUrl = "https://raw.githubusercontent.com/HLWeil/isa-specs/master/source/_static/isajson/protocol_parameter_schema.json"
matchingSchema protocolParameterUrl protocolParameterString
ISADotNet.Validation.JSchema.validateProtocolParameter protocolParameterString
|> matchingResult

let matchingProtocol (protocolString : string) =
let protocolUrl = "https://raw.githubusercontent.com/HLWeil/isa-specs/master/source/_static/isajson/protocol_schema.json"
matchingSchema protocolUrl protocolString
ISADotNet.Validation.JSchema.validateProtocol protocolString
|> matchingResult

let matchingPublication (publicationString : string) =
let publicationUrl = "https://raw.githubusercontent.com/HLWeil/isa-specs/master/source/_static/isajson/publication_schema.json"
matchingSchema publicationUrl publicationString
ISADotNet.Validation.JSchema.validatePublication publicationString
|> matchingResult

let matchingSample (sampleString : string) =
let sampleUrl = "https://raw.githubusercontent.com/HLWeil/isa-specs/master/source/_static/isajson/sample_schema.json"
matchingSchema sampleUrl sampleString
ISADotNet.Validation.JSchema.validateSample sampleString
|> matchingResult

let matchingSource (sourceString : string) =
let sourceUrl = "https://raw.githubusercontent.com/HLWeil/isa-specs/master/source/_static/isajson/source_schema.json"
matchingSchema sourceUrl sourceString
ISADotNet.Validation.JSchema.validateSource sourceString
|> matchingResult

let matchingStudy (studyString : string) =
let studyUrl = "https://raw.githubusercontent.com/HLWeil/isa-specs/master/source/_static/isajson/study_schema.json"
matchingSchema studyUrl studyString
ISADotNet.Validation.JSchema.validateStudy studyString
|> matchingResult

0 comments on commit fdf248d

Please sign in to comment.