Skip to content

Commit da18342

Browse files
committed
fix rocrate sample and protocol handling
1 parent 4b5af05 commit da18342

4 files changed

Lines changed: 52 additions & 49 deletions

File tree

src/Json/Process/Protocol.fs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,14 @@ module Protocol =
3939
|> Encode.object
4040

4141
let decoder : Decoder<Protocol> =
42+
4243
Decode.object (fun get ->
44+
let components =
45+
get.Optional.Field "components" (Decode.list Component.ROCrate.decoder) |> Option.defaultValue List.empty
46+
|> List.append (get.Optional.Field "reagents" (Decode.list Component.ROCrate.decoder) |> Option.defaultValue List.empty)
47+
|> List.append (get.Optional.Field "computationalTools" (Decode.list Component.ROCrate.decoder) |> Option.defaultValue List.empty)
48+
|> Helper.Option.fromValueWithDefault []
49+
4350
{
4451
ID = get.Optional.Field "@id" Decode.uri
4552
Name = get.Optional.Field "name" Decode.string
@@ -48,7 +55,7 @@ module Protocol =
4855
Uri = get.Optional.Field "uri" Decode.uri
4956
Parameters = None
5057
Version = get.Optional.Field "version" Decode.string
51-
Components = get.Optional.Field "components" (Decode.list Component.ROCrate.decoder)
58+
Components = components
5259
Comments = get.Optional.Field "comments" (Decode.list Comment.ROCrate.decoder)
5360
}
5461
)

src/Json/Process/Sample.fs

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,24 +17,58 @@ module Sample =
1717
| None -> "#EmptySample"
1818

1919
let encoder (oa : Sample) =
20+
21+
let additionalProperties =
22+
oa.Characteristics |> Option.defaultValue [] |> List.map MaterialAttributeValue.ROCrate.encoder
23+
|> List.append (oa.FactorValues |> Option.defaultValue [] |> List.map FactorValue.ROCrate.encoder)
2024
[
2125
"@id", Encode.string (oa |> genID)
2226
"@type", (Encode.list [ Encode.string "Sample"])
2327
Encode.tryInclude "name" Encode.string (oa.Name)
24-
Encode.tryIncludeListOpt "characteristics" MaterialAttributeValue.ROCrate.encoder (oa.Characteristics)
25-
Encode.tryIncludeListOpt "factorValues" FactorValue.ROCrate.encoder (oa.FactorValues)
28+
Encode.tryIncludeList "additionalProperties" id additionalProperties
2629
"@context", ROCrateContext.Sample.context_jsonvalue
2730
]
2831
|> Encode.choose
2932
|> Encode.object
3033

31-
let decoder : Decoder<Sample> =
34+
let additionalPropertyDecoder =
35+
{new Decoder<MaterialAttributeValue option * FactorValue option> with
36+
member this.Decode(s,json) =
37+
let additionalType =
38+
if s.hasProperty "additionalType" json then
39+
match Decode.string.Decode(s,s.getProperty("additionalType",json)) with
40+
| Ok s -> s
41+
| _ -> ""
42+
else ""
43+
if additionalType = "FactorValue" then
44+
match FactorValue.ROCrate.decoder.Decode(s,json) with
45+
| Ok fv -> Ok (None, Some fv)
46+
| Error e -> Error e
47+
else
48+
match MaterialAttributeValue.ROCrate.decoder.Decode(s,json) with
49+
| Ok ma -> Ok (Some ma, None)
50+
| Error e -> Error e
51+
}
52+
53+
let decoder : Decoder<Sample> =
54+
3255
Decode.object (fun get ->
56+
let additionalProperties = get.Optional.Field "additionalProperties" (Decode.list additionalPropertyDecoder)
57+
let characteristics,factors =
58+
match additionalProperties with
59+
| None -> None, None
60+
| Some additionalProperties ->
61+
additionalProperties
62+
|> List.choose fst
63+
|> Helper.Option.fromValueWithDefault [],
64+
additionalProperties
65+
|> List.choose snd
66+
|> Helper.Option.fromValueWithDefault []
3367
{
3468
ID = get.Optional.Field "@id" Decode.uri
3569
Name = get.Optional.Field "name" Decode.string
36-
Characteristics = get.Optional.Field "characteristics" (Decode.list MaterialAttributeValue.ROCrate.decoder)
37-
FactorValues = get.Optional.Field "factorValues" (Decode.list FactorValue.ROCrate.decoder)
70+
Characteristics = characteristics
71+
FactorValues = factors
3872
DerivesFrom = get.Optional.Field "derivesFrom" (Decode.list Source.ROCrate.decoder)
3973
}
4074
)

src/Json/context/rocrate/isa_protocol_context.fs

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -33,28 +33,9 @@ module Protocol =
3333
"description", Encode.string "sdo:description"
3434
"version", Encode.string "sdo:version"
3535
"components", Encode.string "bio:labEquipment"
36+
"reagents", Encode.string "bio:reagent"
37+
"computationalTools", Encode.string "bio:computationalTool"
38+
3639
"uri", Encode.string "sdo:url"
3740
"comments", Encode.string "sdo:comment"
3841
]
39-
40-
let context_str =
41-
"""
42-
{
43-
"@context": {
44-
"sdo": "http://schema.org/",
45-
"arc": "http://purl.org/nfdi4plants/ontology/",
46-
47-
"Protocol": "sdo:Thing",
48-
"ArcProtocol": "arc:ARC#ARC_00000040",
49-
50-
"name": "arc:ARC#ARC_00000019",
51-
"protocolType": "arc:ARC#ARC_00000060",
52-
"description": "arc:ARC#ARC_00000004",
53-
"version": "arc:ARC#ARC_00000020",
54-
"components": "arc:ARC#ARC_00000064",
55-
"parameters": "arc:ARC#ARC_00000062",
56-
"uri": "arc:ARC#ARC_00000061",
57-
"comments": "arc:ARC#ARC_00000016"
58-
}
59-
}
60-
"""

src/Json/context/rocrate/isa_sample_context.fs

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -25,24 +25,5 @@ module Sample =
2525
"Sample", Encode.string "bio:Sample"
2626

2727
"name", Encode.string "sdo:name"
28-
"characteristics", Encode.string "bio:additionalProperty"
29-
"factorValues", Encode.string "bio:additionalProperty"
30-
]
31-
32-
let context_str =
33-
"""
34-
{
35-
"@context": {
36-
"sdo": "http://schema.org/",
37-
"arc": "http://purl.org/nfdi4plants/ontology/",
38-
39-
"Sample": "sdo:Thing",
40-
"ArcSample": "arc:ARC#ARC_00000070",
41-
42-
"name": "arc:name",
43-
"characteristics": "arc:ARC#ARC_00000080",
44-
"factorValues": "arc:ARC#ARC_00000083",
45-
"derivesFrom": "arc:ARC#ARC_00000082"
46-
}
47-
}
48-
"""
28+
"additionalProperties", Encode.string "bio:additionalProperty"
29+
]

0 commit comments

Comments
 (0)