@@ -901,7 +901,7 @@ void generateNodeMap(Object element, Map<String, Object> nodeMap, String activeG
901901 }
902902
903903 void generateNodeMap (Object element , Map <String , Object > nodeMap , String activeGraph ,
904- String activeSubject , String activeProperty , Map <String , Object > list )
904+ Object activeSubject , String activeProperty , Map <String , Object > list )
905905 throws JsonLdError {
906906 // 1)
907907 if (element instanceof List ) {
@@ -966,9 +966,10 @@ else if (elem.containsKey("@list")) {
966966 final Map <String , Object > result = new LinkedHashMap <String , Object >();
967967 result .put ("@list" , new ArrayList <Object >());
968968 // 5.2)
969- for (final Object item : (List <Object >) elem .get ("@list" )) {
970- generateNodeMap (item , nodeMap , activeGraph , activeSubject , activeProperty , result );
971- }
969+ //for (final Object item : (List<Object>) elem.get("@list")) {
970+ // generateNodeMap(item, nodeMap, activeGraph, activeSubject, activeProperty, result);
971+ //}
972+ generateNodeMap (elem .get ("@list" ), nodeMap , activeGraph , activeSubject , activeProperty , result );
972973 // 5.3)
973974 JsonLdUtils .mergeValue (node , activeProperty , result );
974975 }
@@ -992,30 +993,37 @@ else if (elem.containsKey("@list")) {
992993 tmp .put ("@id" , id );
993994 graph .put (id , tmp );
994995 }
995- // 6.4)
996- if (activeProperty != null ) {
996+ // 6.4) TODO: SPEC this line is asked for by the spec, but it breaks various tests
997+ //node = (Map<String, Object>) graph.get(id);
998+ // 6.5)
999+ if (activeSubject instanceof Map ) {
1000+ // 6.5.1)
1001+ JsonLdUtils .mergeValue ((Map <String , Object >) graph .get (id ), activeProperty , activeSubject );
1002+ }
1003+ // 6.6)
1004+ else if (activeProperty != null ) {
9971005 final Map <String , Object > reference = new LinkedHashMap <String , Object >();
9981006 reference .put ("@id" , id );
999- // 6.4 .2)
1007+ // 6.6 .2)
10001008 if (list == null ) {
1001- // 6.4 .2.1+2)
1009+ // 6.6 .2.1+2)
10021010 JsonLdUtils .mergeValue (node , activeProperty , reference );
10031011 }
1004- // 6.4 .3) TODO: SPEC says to add ELEMENT to @list member, should
1012+ // 6.6 .3) TODO: SPEC says to add ELEMENT to @list member, should
10051013 // be REFERENCE
10061014 else {
10071015 JsonLdUtils .mergeValue (list , "@list" , reference );
10081016 }
10091017 }
1010- // 6.5 )
1018+ // TODO: SPEC this is removed in the spec now, but it's still needed (see 6.4 )
10111019 node = (Map <String , Object >) graph .get (id );
1012- // 6.6 )
1020+ // 6.7 )
10131021 if (elem .containsKey ("@type" )) {
10141022 for (final Object type : (List <Object >) elem .remove ("@type" )) {
10151023 JsonLdUtils .mergeValue (node , "@type" , type );
10161024 }
10171025 }
1018- // 6.7 )
1026+ // 6.8 )
10191027 if (elem .containsKey ("@index" )) {
10201028 final Object elemIndex = elem .remove ("@index" );
10211029 if (node .containsKey ("@index" )) {
@@ -1026,49 +1034,42 @@ else if (elem.containsKey("@list")) {
10261034 node .put ("@index" , elemIndex );
10271035 }
10281036 }
1029- // 6.8 )
1037+ // 6.9 )
10301038 if (elem .containsKey ("@reverse" )) {
1031- // 6.8.2+6.8.4)
1039+ // 6.9.1)
1040+ final Map <String , Object > referencedNode = new LinkedHashMap <String , Object >();
1041+ referencedNode .put ("@id" , id );
1042+ // 6.9.2+6.9.4)
10321043 final Map <String , Object > reverseMap = (Map <String , Object >) elem
10331044 .remove ("@reverse" );
1034- // 6.8 .3)
1045+ // 6.9 .3)
10351046 for (final String property : reverseMap .keySet ()) {
10361047 final List <Object > values = (List <Object >) reverseMap .get (property );
1037- // 6.8 .3.1)
1048+ // 6.9 .3.1)
10381049 for (final Object value : values ) {
1039- // 6.8.1) TODO: SPEC for pass by reference languages,
1040- // referencedNode needs to be recreated for each loop,
1041- // otherwise the @id member gets removed inside the
1042- // generateNodeMap call and screws things up for
1043- // subsequent calls
1044- final Map <String , Object > referencedNode = new LinkedHashMap <String , Object >();
1045- referencedNode .put ("@id" , id );
1046- // 6.8.3.1.1)
1047- JsonLdUtils .mergeValue ((Map <String , Object >) value , property ,
1048- referencedNode );
1049- // 6.8.3.1.2)
1050- generateNodeMap (value , nodeMap , activeGraph , null , null , null );
1050+ // 6.9.3.1.1)
1051+ generateNodeMap (value , nodeMap , activeGraph , referencedNode , property , null );
10511052 }
10521053 }
10531054 }
1054- // 6.9 )
1055+ // 6.10 )
10551056 if (elem .containsKey ("@graph" )) {
10561057 generateNodeMap (elem .remove ("@graph" ), nodeMap , id , null , null , null );
10571058 }
1058- // 6.10 )
1059+ // 6.11 )
10591060 final List <String > keys = new ArrayList <String >(elem .keySet ());
10601061 Collections .sort (keys );
10611062 for (String property : keys ) {
10621063 final Object value = elem .get (property );
1063- // 6.10 .1)
1064+ // 6.11 .1)
10641065 if (property .startsWith ("_:" )) {
10651066 property = generateBlankNodeIdentifier (property );
10661067 }
1067- // 6.10 .2)
1068+ // 6.11 .2)
10681069 if (!node .containsKey (property )) {
10691070 node .put (property , new ArrayList <Object >());
10701071 }
1071- // 6.10 .3)
1072+ // 6.11 .3)
10721073 generateNodeMap (value , nodeMap , activeGraph , id , property , null );
10731074 }
10741075 }
0 commit comments