json-ld 3.1.4 → 3.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +131 -48
- data/VERSION +1 -1
- data/bin/jsonld +31 -32
- data/lib/json/ld.rb +5 -2
- data/lib/json/ld/api.rb +35 -16
- data/lib/json/ld/compact.rb +41 -29
- data/lib/json/ld/conneg.rb +1 -1
- data/lib/json/ld/context.rb +51 -59
- data/lib/json/ld/expand.rb +72 -16
- data/lib/json/ld/extensions.rb +4 -4
- data/lib/json/ld/flatten.rb +137 -9
- data/lib/json/ld/format.rb +28 -8
- data/lib/json/ld/frame.rb +8 -8
- data/lib/json/ld/from_rdf.rb +46 -16
- data/lib/json/ld/reader.rb +2 -1
- data/lib/json/ld/streaming_reader.rb +5 -5
- data/lib/json/ld/streaming_writer.rb +4 -4
- data/lib/json/ld/to_rdf.rb +11 -7
- data/lib/json/ld/utils.rb +13 -13
- data/lib/json/ld/writer.rb +12 -5
- data/spec/api_spec.rb +1 -1
- data/spec/compact_spec.rb +207 -3
- data/spec/context_spec.rb +0 -2
- data/spec/expand_spec.rb +631 -0
- data/spec/flatten_spec.rb +517 -1
- data/spec/from_rdf_spec.rb +181 -0
- data/spec/matchers.rb +1 -1
- data/spec/rdfstar_spec.rb +25 -0
- data/spec/spec_helper.rb +32 -0
- data/spec/suite_flatten_spec.rb +4 -0
- data/spec/suite_frame_spec.rb +7 -0
- data/spec/suite_helper.rb +13 -7
- data/spec/suite_to_rdf_spec.rb +1 -0
- data/spec/to_rdf_spec.rb +209 -3
- data/spec/writer_spec.rb +193 -0
- metadata +66 -64
data/spec/flatten_spec.rb
CHANGED
@@ -206,7 +206,8 @@ describe JSON::LD::API do
|
|
206
206
|
"http://example.org/bar": [ { "@id": "_:b0" } ]
|
207
207
|
}
|
208
208
|
]
|
209
|
-
}
|
209
|
+
},
|
210
|
+
remap_nodes: true
|
210
211
|
},
|
211
212
|
"@list with embedded object": {
|
212
213
|
input: %([{
|
@@ -665,6 +666,519 @@ describe JSON::LD::API do
|
|
665
666
|
end
|
666
667
|
end
|
667
668
|
|
669
|
+
context "JSON-LD-star" do
|
670
|
+
{
|
671
|
+
"node object with @annotation property is ignored without rdfstar option": {
|
672
|
+
input: %({
|
673
|
+
"@id": "ex:bob",
|
674
|
+
"ex:knows": {
|
675
|
+
"@id": "ex:fred",
|
676
|
+
"@annotation": {
|
677
|
+
"ex:certainty": 0.8
|
678
|
+
}
|
679
|
+
}
|
680
|
+
}),
|
681
|
+
output: %([{
|
682
|
+
"@id": "ex:bob",
|
683
|
+
"ex:knows": [{"@id": "ex:fred"}]
|
684
|
+
}])
|
685
|
+
},
|
686
|
+
"value object with @annotation property is ignored without rdfstar option": {
|
687
|
+
input: %({
|
688
|
+
"@id": "ex:bob",
|
689
|
+
"ex:age": {
|
690
|
+
"@value": 23,
|
691
|
+
"@annotation": {
|
692
|
+
"ex:certainty": 0.8
|
693
|
+
}
|
694
|
+
}
|
695
|
+
}),
|
696
|
+
output: %([{
|
697
|
+
"@id": "ex:bob",
|
698
|
+
"ex:age": [{"@value": 23}]
|
699
|
+
}])
|
700
|
+
},
|
701
|
+
}.each do |title, params|
|
702
|
+
it(title) {run_flatten params}
|
703
|
+
end
|
704
|
+
|
705
|
+
{
|
706
|
+
"node with embedded subject having no @id": {
|
707
|
+
input: %({
|
708
|
+
"@id": {
|
709
|
+
"ex:prop": "value"
|
710
|
+
},
|
711
|
+
"ex:prop": "value2"
|
712
|
+
}),
|
713
|
+
output: %([{
|
714
|
+
"@id": {
|
715
|
+
"ex:prop": [{"@value": "value"}]
|
716
|
+
},
|
717
|
+
"ex:prop": [{"@value": "value2"}]
|
718
|
+
}])
|
719
|
+
},
|
720
|
+
"node with embedded subject having IRI @id": {
|
721
|
+
input: %({
|
722
|
+
"@id": {
|
723
|
+
"@id": "ex:rei",
|
724
|
+
"ex:prop": "value"
|
725
|
+
},
|
726
|
+
"ex:prop": "value2"
|
727
|
+
}),
|
728
|
+
output: %([{
|
729
|
+
"@id": {
|
730
|
+
"@id": "ex:rei",
|
731
|
+
"ex:prop": [{"@value": "value"}]
|
732
|
+
},
|
733
|
+
"ex:prop": [{"@value": "value2"}]
|
734
|
+
}])
|
735
|
+
},
|
736
|
+
"node with embedded subject having BNode @id": {
|
737
|
+
input: %({
|
738
|
+
"@id": {
|
739
|
+
"@id": "_:rei",
|
740
|
+
"ex:prop": "value"
|
741
|
+
},
|
742
|
+
"ex:prop": "value2"
|
743
|
+
}),
|
744
|
+
output: %([{
|
745
|
+
"@id": {
|
746
|
+
"@id": "_:b0",
|
747
|
+
"ex:prop": [{"@value": "value"}]
|
748
|
+
},
|
749
|
+
"ex:prop": [{"@value": "value2"}]
|
750
|
+
}])
|
751
|
+
},
|
752
|
+
"node with embedded subject having a type": {
|
753
|
+
input: %({
|
754
|
+
"@id": {
|
755
|
+
"@id": "ex:rei",
|
756
|
+
"@type": "ex:Type"
|
757
|
+
},
|
758
|
+
"ex:prop": "value2"
|
759
|
+
}),
|
760
|
+
output: %([{
|
761
|
+
"@id": {
|
762
|
+
"@id": "ex:rei",
|
763
|
+
"@type": ["ex:Type"]
|
764
|
+
},
|
765
|
+
"ex:prop": [{"@value": "value2"}]
|
766
|
+
}])
|
767
|
+
},
|
768
|
+
"node with embedded subject having an IRI value": {
|
769
|
+
input: %({
|
770
|
+
"@id": {
|
771
|
+
"@id": "ex:rei",
|
772
|
+
"ex:prop": {"@id": "ex:value"}
|
773
|
+
},
|
774
|
+
"ex:prop": "value2"
|
775
|
+
}),
|
776
|
+
output: %([{
|
777
|
+
"@id": {
|
778
|
+
"@id": "ex:rei",
|
779
|
+
"ex:prop": [{"@id": "ex:value"}]
|
780
|
+
},
|
781
|
+
"ex:prop": [{"@value": "value2"}]
|
782
|
+
}])
|
783
|
+
},
|
784
|
+
"node with embedded subject having an BNode value": {
|
785
|
+
input: %({
|
786
|
+
"@id": {
|
787
|
+
"@id": "ex:rei",
|
788
|
+
"ex:prop": {"@id": "_:value"}
|
789
|
+
},
|
790
|
+
"ex:prop": "value2"
|
791
|
+
}),
|
792
|
+
output: %([{
|
793
|
+
"@id": {
|
794
|
+
"@id": "ex:rei",
|
795
|
+
"ex:prop": [{"@id": "_:b0"}]
|
796
|
+
},
|
797
|
+
"ex:prop": [{"@value": "value2"}]
|
798
|
+
}])
|
799
|
+
},
|
800
|
+
"node with recursive embedded subject": {
|
801
|
+
input: %({
|
802
|
+
"@id": {
|
803
|
+
"@id": {
|
804
|
+
"@id": "ex:rei",
|
805
|
+
"ex:prop": "value3"
|
806
|
+
},
|
807
|
+
"ex:prop": "value"
|
808
|
+
},
|
809
|
+
"ex:prop": "value2"
|
810
|
+
}),
|
811
|
+
output: %([{
|
812
|
+
"@id": {
|
813
|
+
"@id": {
|
814
|
+
"@id": "ex:rei",
|
815
|
+
"ex:prop": [{"@value": "value3"}]
|
816
|
+
},
|
817
|
+
"ex:prop": [{"@value": "value"}]
|
818
|
+
},
|
819
|
+
"ex:prop": [{"@value": "value2"}]
|
820
|
+
}])
|
821
|
+
},
|
822
|
+
"node with embedded object": {
|
823
|
+
input: %({
|
824
|
+
"@id": "ex:subj",
|
825
|
+
"ex:value": {
|
826
|
+
"@id": {
|
827
|
+
"@id": "ex:rei",
|
828
|
+
"ex:prop": "value"
|
829
|
+
}
|
830
|
+
}
|
831
|
+
}),
|
832
|
+
output: %([{
|
833
|
+
"@id": "ex:subj",
|
834
|
+
"ex:value": [{
|
835
|
+
"@id": {
|
836
|
+
"@id": "ex:rei",
|
837
|
+
"ex:prop": [{"@value": "value"}]
|
838
|
+
}
|
839
|
+
}]
|
840
|
+
}])
|
841
|
+
},
|
842
|
+
"node with embedded object having properties": {
|
843
|
+
input: %({
|
844
|
+
"@id": "ex:subj",
|
845
|
+
"ex:value": {
|
846
|
+
"@id": {
|
847
|
+
"@id": "ex:rei",
|
848
|
+
"ex:prop": "value"
|
849
|
+
},
|
850
|
+
"ex:prop": "value2"
|
851
|
+
}
|
852
|
+
}),
|
853
|
+
output: %([{
|
854
|
+
"@id": "ex:subj",
|
855
|
+
"ex:value": [{
|
856
|
+
"@id": {
|
857
|
+
"@id": "ex:rei",
|
858
|
+
"ex:prop": [{"@value": "value"}]
|
859
|
+
}
|
860
|
+
}]
|
861
|
+
}, {
|
862
|
+
"@id": {
|
863
|
+
"@id": "ex:rei",
|
864
|
+
"ex:prop": [{"@value": "value"}]
|
865
|
+
},
|
866
|
+
"ex:prop": [{"@value": "value2"}]
|
867
|
+
}])
|
868
|
+
},
|
869
|
+
"node with recursive embedded object": {
|
870
|
+
input: %({
|
871
|
+
"@id": "ex:subj",
|
872
|
+
"ex:value": {
|
873
|
+
"@id": {
|
874
|
+
"@id": {
|
875
|
+
"@id": "ex:rei",
|
876
|
+
"ex:prop": "value3"
|
877
|
+
},
|
878
|
+
"ex:prop": "value"
|
879
|
+
},
|
880
|
+
"ex:prop": "value2"
|
881
|
+
}
|
882
|
+
}),
|
883
|
+
output: %([{
|
884
|
+
"@id": "ex:subj",
|
885
|
+
"ex:value": [{
|
886
|
+
"@id": {
|
887
|
+
"@id": {
|
888
|
+
"@id": "ex:rei",
|
889
|
+
"ex:prop": [{"@value": "value3"}]
|
890
|
+
},
|
891
|
+
"ex:prop":[{"@value": "value"}]
|
892
|
+
}
|
893
|
+
}]
|
894
|
+
}, {
|
895
|
+
"@id": {
|
896
|
+
"@id": {
|
897
|
+
"@id": "ex:rei",
|
898
|
+
"ex:prop": [{"@value": "value3"}]
|
899
|
+
},
|
900
|
+
"ex:prop":[{"@value": "value"}]
|
901
|
+
},
|
902
|
+
"ex:prop": [{"@value": "value2"}]
|
903
|
+
}])
|
904
|
+
},
|
905
|
+
"node with @annotation property on value object": {
|
906
|
+
input: %({
|
907
|
+
"@id": "ex:bob",
|
908
|
+
"ex:age": {
|
909
|
+
"@value": 23,
|
910
|
+
"@annotation": {"ex:certainty": 0.8}
|
911
|
+
}
|
912
|
+
}),
|
913
|
+
output: %([{
|
914
|
+
"@id": "ex:bob",
|
915
|
+
"ex:age": [{"@value": 23}]
|
916
|
+
}, {
|
917
|
+
"@id": {
|
918
|
+
"@id": "ex:bob",
|
919
|
+
"ex:age": [{"@value": 23}]
|
920
|
+
},
|
921
|
+
"ex:certainty": [{"@value": 0.8}]
|
922
|
+
}])
|
923
|
+
},
|
924
|
+
"node with @annotation property on node object": {
|
925
|
+
input: %({
|
926
|
+
"@id": "ex:bob",
|
927
|
+
"ex:name": "Bob",
|
928
|
+
"ex:knows": {
|
929
|
+
"@id": "ex:fred",
|
930
|
+
"ex:name": "Fred",
|
931
|
+
"@annotation": {"ex:certainty": 0.8}
|
932
|
+
}
|
933
|
+
}),
|
934
|
+
output: %([{
|
935
|
+
"@id": "ex:bob",
|
936
|
+
"ex:name": [{"@value": "Bob"}],
|
937
|
+
"ex:knows": [{"@id": "ex:fred"}]
|
938
|
+
}, {
|
939
|
+
"@id": "ex:fred",
|
940
|
+
"ex:name": [{"@value": "Fred"}]
|
941
|
+
}, {
|
942
|
+
"@id": {
|
943
|
+
"@id": "ex:bob",
|
944
|
+
"ex:knows": [{"@id": "ex:fred"}]
|
945
|
+
},
|
946
|
+
"ex:certainty": [{"@value": 0.8}]
|
947
|
+
}])
|
948
|
+
},
|
949
|
+
"node with @annotation property multiple values": {
|
950
|
+
input: %({
|
951
|
+
"@id": "ex:bob",
|
952
|
+
"ex:name": "Bob",
|
953
|
+
"ex:knows": {
|
954
|
+
"@id": "ex:fred",
|
955
|
+
"ex:name": "Fred",
|
956
|
+
"@annotation": [{
|
957
|
+
"ex:certainty": 0.8
|
958
|
+
}, {
|
959
|
+
"ex:source": {"@id": "http://example.org/"}
|
960
|
+
}]
|
961
|
+
}
|
962
|
+
}),
|
963
|
+
output: %([{
|
964
|
+
"@id": "ex:bob",
|
965
|
+
"ex:name": [{"@value": "Bob"}],
|
966
|
+
"ex:knows": [{"@id": "ex:fred"}]
|
967
|
+
}, {
|
968
|
+
"@id": "ex:fred",
|
969
|
+
"ex:name": [{"@value": "Fred"}]
|
970
|
+
}, {
|
971
|
+
"@id": {
|
972
|
+
"@id": "ex:bob",
|
973
|
+
"ex:knows": [{"@id": "ex:fred"}]
|
974
|
+
},
|
975
|
+
"ex:certainty": [{"@value": 0.8}],
|
976
|
+
"ex:source": [{"@id": "http://example.org/"}]
|
977
|
+
}])
|
978
|
+
},
|
979
|
+
"node with @annotation property on embedded subject": {
|
980
|
+
input: %({
|
981
|
+
"@id": {
|
982
|
+
"@id": "ex:rei",
|
983
|
+
"ex:prop": {"@id": "_:value"}
|
984
|
+
},
|
985
|
+
"ex:prop": {
|
986
|
+
"@value": "value2",
|
987
|
+
"@annotation": {"ex:certainty": 0.8}
|
988
|
+
}
|
989
|
+
}),
|
990
|
+
output: %([{
|
991
|
+
"@id": {
|
992
|
+
"@id": "ex:rei",
|
993
|
+
"ex:prop": [{"@id": "_:b0"}]
|
994
|
+
},
|
995
|
+
"ex:prop": [{"@value": "value2"}]
|
996
|
+
}, {
|
997
|
+
"@id": {
|
998
|
+
"@id": {
|
999
|
+
"@id": "ex:rei",
|
1000
|
+
"ex:prop": [{"@id": "_:b0"}]
|
1001
|
+
},
|
1002
|
+
"ex:prop": [{"@value": "value2"}]
|
1003
|
+
},
|
1004
|
+
"ex:certainty": [{"@value": 0.8}]
|
1005
|
+
}])
|
1006
|
+
},
|
1007
|
+
"node with @annotation property on embedded object": {
|
1008
|
+
input: %({
|
1009
|
+
"@id": "ex:subj",
|
1010
|
+
"ex:value": {
|
1011
|
+
"@id": {
|
1012
|
+
"@id": "ex:rei",
|
1013
|
+
"ex:prop": "value"
|
1014
|
+
},
|
1015
|
+
"@annotation": {"ex:certainty": 0.8}
|
1016
|
+
}
|
1017
|
+
}),
|
1018
|
+
output: %([{
|
1019
|
+
"@id": "ex:subj",
|
1020
|
+
"ex:value": [{
|
1021
|
+
"@id": {
|
1022
|
+
"@id": "ex:rei",
|
1023
|
+
"ex:prop": [{"@value": "value"}]
|
1024
|
+
}
|
1025
|
+
}]
|
1026
|
+
}, {
|
1027
|
+
"@id": {
|
1028
|
+
"@id": "ex:subj",
|
1029
|
+
"ex:value": [{
|
1030
|
+
"@id": {
|
1031
|
+
"@id": "ex:rei",
|
1032
|
+
"ex:prop": [{"@value": "value"}]
|
1033
|
+
}
|
1034
|
+
}]
|
1035
|
+
},
|
1036
|
+
"ex:certainty": [{"@value": 0.8}]
|
1037
|
+
}])
|
1038
|
+
},
|
1039
|
+
"embedded node used as subject in reverse relationship": {
|
1040
|
+
input: %({
|
1041
|
+
"@context": {
|
1042
|
+
"rel": {"@reverse": "ex:rel"}
|
1043
|
+
},
|
1044
|
+
"@id": {
|
1045
|
+
"@id": "ex:rei",
|
1046
|
+
"ex:prop": {"@id": "ex:value"}
|
1047
|
+
},
|
1048
|
+
"rel": {"@id": "ex:value2"}
|
1049
|
+
}),
|
1050
|
+
output: %([{
|
1051
|
+
"@id": "ex:value2",
|
1052
|
+
"ex:rel": [{
|
1053
|
+
"@id": {
|
1054
|
+
"@id": "ex:rei",
|
1055
|
+
"ex:prop": [{"@id": "ex:value"}]
|
1056
|
+
}
|
1057
|
+
}]
|
1058
|
+
}])
|
1059
|
+
},
|
1060
|
+
"embedded node used as object in reverse relationship": {
|
1061
|
+
input: %({
|
1062
|
+
"@context": {
|
1063
|
+
"rel": {"@reverse": "ex:rel"}
|
1064
|
+
},
|
1065
|
+
"@id": "ex:subj",
|
1066
|
+
"rel": {
|
1067
|
+
"@id": {
|
1068
|
+
"@id": "ex:rei",
|
1069
|
+
"ex:prop": {"@id": "ex:value"}
|
1070
|
+
},
|
1071
|
+
"ex:prop": {"@id": "ex:value2"}
|
1072
|
+
}
|
1073
|
+
}),
|
1074
|
+
output: %([{
|
1075
|
+
"@id": {
|
1076
|
+
"@id": "ex:rei",
|
1077
|
+
"ex:prop": [{"@id": "ex:value"}]
|
1078
|
+
},
|
1079
|
+
"ex:rel": [{"@id": "ex:subj"}],
|
1080
|
+
"ex:prop": [{"@id": "ex:value2"}]
|
1081
|
+
}])
|
1082
|
+
},
|
1083
|
+
"node with @annotation property on node object with reverse relationship": {
|
1084
|
+
input: %({
|
1085
|
+
"@context": {
|
1086
|
+
"knownBy": {"@reverse": "ex:knows"}
|
1087
|
+
},
|
1088
|
+
"@id": "ex:bob",
|
1089
|
+
"ex:name": "Bob",
|
1090
|
+
"knownBy": {
|
1091
|
+
"@id": "ex:fred",
|
1092
|
+
"ex:name": "Fred",
|
1093
|
+
"@annotation": {"ex:certainty": 0.8}
|
1094
|
+
}
|
1095
|
+
}),
|
1096
|
+
output: %([{
|
1097
|
+
"@id": "ex:bob",
|
1098
|
+
"ex:name": [{"@value": "Bob"}]
|
1099
|
+
}, {
|
1100
|
+
"@id": "ex:fred",
|
1101
|
+
"ex:name": [{"@value": "Fred"}],
|
1102
|
+
"ex:knows": [{"@id": "ex:bob"}]
|
1103
|
+
}, {
|
1104
|
+
"@id": {
|
1105
|
+
"@id": "ex:fred",
|
1106
|
+
"ex:knows": [{"@id": "ex:bob"}]
|
1107
|
+
},
|
1108
|
+
"ex:certainty": [{"@value": 0.8}]
|
1109
|
+
}])
|
1110
|
+
},
|
1111
|
+
"reverse relationship inside annotation": {
|
1112
|
+
input: %({
|
1113
|
+
"@context": {
|
1114
|
+
"claims": {"@reverse": "ex:claims", "@type": "@id"}
|
1115
|
+
},
|
1116
|
+
"@id": "ex:bob",
|
1117
|
+
"ex:knows": {
|
1118
|
+
"@id": "ex:jane",
|
1119
|
+
"@annotation": {
|
1120
|
+
"ex:certainty": 0.8,
|
1121
|
+
"claims": "ex:sue"
|
1122
|
+
}
|
1123
|
+
}
|
1124
|
+
}),
|
1125
|
+
output: %([{
|
1126
|
+
"@id": "ex:bob",
|
1127
|
+
"ex:knows": [{"@id": "ex:jane"}]
|
1128
|
+
}, {
|
1129
|
+
"@id": {
|
1130
|
+
"@id": "ex:bob",
|
1131
|
+
"ex:knows": [{"@id": "ex:jane"}]
|
1132
|
+
},
|
1133
|
+
"ex:certainty": [{"@value": 0.8}]
|
1134
|
+
}, {
|
1135
|
+
"@id": "ex:sue",
|
1136
|
+
"ex:claims": [{
|
1137
|
+
"@id": {
|
1138
|
+
"@id": "ex:bob",
|
1139
|
+
"ex:knows": [{"@id": "ex:jane"}]
|
1140
|
+
}
|
1141
|
+
}]
|
1142
|
+
}])
|
1143
|
+
},
|
1144
|
+
"embedded node with annotation on value object": {
|
1145
|
+
input: %({
|
1146
|
+
"@context": {
|
1147
|
+
"@base": "http://example.org/",
|
1148
|
+
"@vocab": "http://example.org/",
|
1149
|
+
"claims": {"@type": "@id"}
|
1150
|
+
},
|
1151
|
+
"@id": {
|
1152
|
+
"@id": "bob",
|
1153
|
+
"knows": {"@id": "alice"}
|
1154
|
+
},
|
1155
|
+
"certainty": {
|
1156
|
+
"@value": 0.8,
|
1157
|
+
"@annotation": {"claims": "ted"}
|
1158
|
+
}
|
1159
|
+
}),
|
1160
|
+
output: %([{
|
1161
|
+
"@id": {
|
1162
|
+
"@id": "http://example.org/bob",
|
1163
|
+
"http://example.org/knows": [{"@id": "http://example.org/alice"}]
|
1164
|
+
},
|
1165
|
+
"http://example.org/certainty": [{"@value": 0.8}]
|
1166
|
+
}, {
|
1167
|
+
"@id": {
|
1168
|
+
"@id": {
|
1169
|
+
"@id": "http://example.org/bob",
|
1170
|
+
"http://example.org/knows": [{"@id": "http://example.org/alice"}]
|
1171
|
+
},
|
1172
|
+
"http://example.org/certainty": [{"@value": 0.8}]
|
1173
|
+
},
|
1174
|
+
"http://example.org/claims": [{"@id": "http://example.org/ted"}]
|
1175
|
+
}])
|
1176
|
+
}
|
1177
|
+
}.each do |title, params|
|
1178
|
+
it(title) {run_flatten params.merge(rdfstar: true)}
|
1179
|
+
end
|
1180
|
+
end
|
1181
|
+
|
668
1182
|
def run_flatten(params)
|
669
1183
|
input, output, context = params[:input], params[:output], params[:context]
|
670
1184
|
input = ::JSON.parse(input) if input.is_a?(String)
|
@@ -681,6 +1195,8 @@ describe JSON::LD::API do
|
|
681
1195
|
else
|
682
1196
|
expect{jld = JSON::LD::API.flatten(input, context, logger: logger, **params)}.not_to write.to(:error)
|
683
1197
|
end
|
1198
|
+
|
1199
|
+
jld = remap_bnodes(jld, output) if params[:remap_nodes]
|
684
1200
|
expect(jld).to produce_jsonld(output, logger)
|
685
1201
|
end
|
686
1202
|
end
|