Browse Source

* Patch from Inoussa to add binary streaming (bug id 25335)

git-svn-id: trunk@26113 -
michael 11 years ago
parent
commit
21e178d9d2
85 changed files with 6998 additions and 214 deletions
  1. 65 1
      .gitattributes
  2. 4 0
      packages/fcl-sdo/src/base/sdo.pas
  3. 91 61
      packages/fcl-sdo/src/base/sdo_serialization.pas
  4. 123 63
      packages/fcl-sdo/src/base/sdo_serialization_binary.pas
  5. 0 3
      packages/fcl-sdo/src/base/sdo_serialization_xml.pas
  6. 14 12
      packages/fcl-sdo/src/base/sdo_xsdparser.pas
  7. 4 1
      packages/fcl-sdo/src/das/sdo_das_utils.pas
  8. 38 0
      packages/fcl-sdo/tests/files/_company.xml
  9. 32 0
      packages/fcl-sdo/tests/files/change_summary_bool.xml
  10. 37 0
      packages/fcl-sdo/tests/files/change_summary_byte.xml
  11. 37 0
      packages/fcl-sdo/tests/files/change_summary_bytes.xml
  12. 42 0
      packages/fcl-sdo/tests/files/change_summary_char.xml
  13. 43 0
      packages/fcl-sdo/tests/files/change_summary_currency.xml
  14. 32 0
      packages/fcl-sdo/tests/files/change_summary_date.xml
  15. 37 0
      packages/fcl-sdo/tests/files/change_summary_double.xml
  16. 37 0
      packages/fcl-sdo/tests/files/change_summary_float.xml
  17. 32 0
      packages/fcl-sdo/tests/files/change_summary_integer.xml
  18. 37 0
      packages/fcl-sdo/tests/files/change_summary_long.xml
  19. 52 0
      packages/fcl-sdo/tests/files/change_summary_object_create.xml
  20. 56 0
      packages/fcl-sdo/tests/files/change_summary_object_create_cont_ref.xml
  21. 58 0
      packages/fcl-sdo/tests/files/change_summary_object_delete.xml
  22. 94 0
      packages/fcl-sdo/tests/files/change_summary_object_delete_nested.xml
  23. 56 0
      packages/fcl-sdo/tests/files/change_summary_object_modify_nested.xml
  24. 4 0
      packages/fcl-sdo/tests/files/change_summary_short.xml
  25. 45 0
      packages/fcl-sdo/tests/files/change_summary_simple.xml
  26. 32 0
      packages/fcl-sdo/tests/files/change_summary_string.xml
  27. 64 0
      packages/fcl-sdo/tests/files/changesummary_object_2_objects_same_type_del_upd.xml
  28. 58 0
      packages/fcl-sdo/tests/files/changesummary_object_delete_2_objects_same_type.xml
  29. 78 0
      packages/fcl-sdo/tests/files/changesummary_prop_list_bool.xml
  30. 78 0
      packages/fcl-sdo/tests/files/changesummary_prop_list_byte.xml
  31. 78 0
      packages/fcl-sdo/tests/files/changesummary_prop_list_bytes.xml
  32. 85 0
      packages/fcl-sdo/tests/files/changesummary_prop_list_char.xml
  33. 89 0
      packages/fcl-sdo/tests/files/changesummary_prop_list_currency.xml
  34. 78 0
      packages/fcl-sdo/tests/files/changesummary_prop_list_date.xml
  35. 78 0
      packages/fcl-sdo/tests/files/changesummary_prop_list_double.xml
  36. 78 0
      packages/fcl-sdo/tests/files/changesummary_prop_list_float.xml
  37. 78 0
      packages/fcl-sdo/tests/files/changesummary_prop_list_integer.xml
  38. 78 0
      packages/fcl-sdo/tests/files/changesummary_prop_list_long.xml
  39. 144 0
      packages/fcl-sdo/tests/files/changesummary_prop_list_object.xml
  40. 234 0
      packages/fcl-sdo/tests/files/changesummary_prop_list_object_nested.xml
  41. 78 0
      packages/fcl-sdo/tests/files/changesummary_prop_list_short.xml
  42. 78 0
      packages/fcl-sdo/tests/files/changesummary_prop_list_string.xml
  43. 78 0
      packages/fcl-sdo/tests/files/company.one.xml
  44. 96 0
      packages/fcl-sdo/tests/files/company.two.xml
  45. 78 0
      packages/fcl-sdo/tests/files/company.xml
  46. 88 0
      packages/fcl-sdo/tests/files/complex_class_open_type.xsd
  47. 47 0
      packages/fcl-sdo/tests/files/datagraph.data
  48. 82 0
      packages/fcl-sdo/tests/files/load_from_file_reference_property.xml
  49. 46 0
      packages/fcl-sdo/tests/files/open_type.xml
  50. 216 0
      packages/fcl-sdo/tests/files/sdo_company.pas
  51. 70 0
      packages/fcl-sdo/tests/files/sdo_company.xsd
  52. 32 0
      packages/fcl-sdo/tests/files/sdo_company_original.xsd
  53. 8 0
      packages/fcl-sdo/tests/files/test_company_res.txt
  54. 42 0
      packages/fcl-sdo/tests/files/xsd/array_sequence_item_name.xsd
  55. 36 0
      packages/fcl-sdo/tests/files/xsd/class_properties_extended_metadata.xsd
  56. 46 0
      packages/fcl-sdo/tests/files/xsd/class_properties_extended_metadata_2.xsd
  57. 16 0
      packages/fcl-sdo/tests/files/xsd/class_property_composed_name.xsd
  58. 62 0
      packages/fcl-sdo/tests/files/xsd/complex_array_sequence.xsd
  59. 70 0
      packages/fcl-sdo/tests/files/xsd/complex_array_sequence_embedded.xsd
  60. 94 0
      packages/fcl-sdo/tests/files/xsd/complex_class.xsd
  61. 38 0
      packages/fcl-sdo/tests/files/xsd/complex_class_default.xsd
  62. 92 0
      packages/fcl-sdo/tests/files/xsd/complex_class_embedded.xsd
  63. 48 0
      packages/fcl-sdo/tests/files/xsd/complex_class_extend_simple.xsd
  64. 46 0
      packages/fcl-sdo/tests/files/xsd/complex_class_false_array.xsd
  65. 88 0
      packages/fcl-sdo/tests/files/xsd/complex_class_open_type.xsd
  66. 10 0
      packages/fcl-sdo/tests/files/xsd/empty.xsd
  67. 22 0
      packages/fcl-sdo/tests/files/xsd/import_base_library.xsd
  68. 32 0
      packages/fcl-sdo/tests/files/xsd/import_second_library.xsd
  69. 40 0
      packages/fcl-sdo/tests/files/xsd/simpletype.xsd
  70. 18 0
      packages/fcl-sdo/tests/files/xsd/simpletypeNativeAlias.xsd
  71. 40 0
      packages/fcl-sdo/tests/files/xsd/simpletype_embedded.xsd
  72. 5 5
      packages/fcl-sdo/tests/test_suite/projects/testrunner.pp
  73. 2 2
      packages/fcl-sdo/tests/test_suite/test_changesummary.pas
  74. 7 4
      packages/fcl-sdo/tests/test_suite/test_convert_helper.pas
  75. 1 1
      packages/fcl-sdo/tests/test_suite/test_copyhelper.pas
  76. 2 2
      packages/fcl-sdo/tests/test_suite/test_dataobjectlist.pas
  77. 1 1
      packages/fcl-sdo/tests/test_suite/test_equalityhelper.pas
  78. 9 5
      packages/fcl-sdo/tests/test_suite/test_field_imp.pas
  79. 2 2
      packages/fcl-sdo/tests/test_suite/test_property.pas
  80. 2707 30
      packages/fcl-sdo/tests/test_suite/test_serializer.pas
  81. 4 0
      packages/fcl-sdo/tests/test_suite/test_suite_utils.pas
  82. 2 2
      packages/fcl-sdo/tests/test_suite/test_utils.pas
  83. 1 1
      packages/fcl-sdo/tests/test_suite/test_xpathhelper.pas
  84. 16 16
      packages/fcl-sdo/tests/test_suite/test_xsdhelper.pas
  85. 2 2
      packages/fcl-sdo/tests/test_suite/test_xsdparser.pas

+ 65 - 1
.gitattributes

@@ -2573,7 +2573,7 @@ packages/fcl-sdo/Makefile svneol=native#text/plain
 packages/fcl-sdo/Makefile.fpc svneol=native#text/plain
 packages/fcl-sdo/README svneol=native#text/plain
 packages/fcl-sdo/examples/changes-summary/project.pas svneol=native#text/plain
-packages/fcl-sdo/examples/changes-summary2/out.xsd svneol=native#text/plain
+packages/fcl-sdo/examples/changes-summary2/out.xsd svneol=native#text/xml
 packages/fcl-sdo/examples/changes-summary2/project.pas svneol=native#text/plain
 packages/fcl-sdo/examples/load-embedded-schema/project.pas svneol=native#text/plain
 packages/fcl-sdo/examples/simple/simple.pas svneol=native#text/plain
@@ -2617,6 +2617,70 @@ packages/fcl-sdo/src/das/sdo_das.pas svneol=native#text/plain
 packages/fcl-sdo/src/das/sdo_das_imp.pas svneol=native#text/plain
 packages/fcl-sdo/src/das/sdo_das_utils.pas svneol=native#text/plain
 packages/fcl-sdo/src/das/sdo_global.inc svneol=native#text/plain
+packages/fcl-sdo/tests/files/_company.xml svneol=native#text/plain
+packages/fcl-sdo/tests/files/change_summary_bool.xml svneol=native#text/plain
+packages/fcl-sdo/tests/files/change_summary_byte.xml svneol=native#text/plain
+packages/fcl-sdo/tests/files/change_summary_bytes.xml svneol=native#text/plain
+packages/fcl-sdo/tests/files/change_summary_char.xml svneol=native#text/plain
+packages/fcl-sdo/tests/files/change_summary_currency.xml svneol=native#text/plain
+packages/fcl-sdo/tests/files/change_summary_date.xml svneol=native#text/plain
+packages/fcl-sdo/tests/files/change_summary_double.xml svneol=native#text/plain
+packages/fcl-sdo/tests/files/change_summary_float.xml svneol=native#text/plain
+packages/fcl-sdo/tests/files/change_summary_integer.xml svneol=native#text/plain
+packages/fcl-sdo/tests/files/change_summary_long.xml svneol=native#text/plain
+packages/fcl-sdo/tests/files/change_summary_object_create.xml svneol=native#text/plain
+packages/fcl-sdo/tests/files/change_summary_object_create_cont_ref.xml svneol=native#text/plain
+packages/fcl-sdo/tests/files/change_summary_object_delete.xml svneol=native#text/plain
+packages/fcl-sdo/tests/files/change_summary_object_delete_nested.xml svneol=native#text/plain
+packages/fcl-sdo/tests/files/change_summary_object_modify_nested.xml svneol=native#text/plain
+packages/fcl-sdo/tests/files/change_summary_short.xml svneol=native#text/plain
+packages/fcl-sdo/tests/files/change_summary_simple.xml svneol=native#text/plain
+packages/fcl-sdo/tests/files/change_summary_string.xml svneol=native#text/plain
+packages/fcl-sdo/tests/files/changesummary_object_2_objects_same_type_del_upd.xml svneol=native#text/plain
+packages/fcl-sdo/tests/files/changesummary_object_delete_2_objects_same_type.xml svneol=native#text/plain
+packages/fcl-sdo/tests/files/changesummary_prop_list_bool.xml svneol=native#text/plain
+packages/fcl-sdo/tests/files/changesummary_prop_list_byte.xml svneol=native#text/plain
+packages/fcl-sdo/tests/files/changesummary_prop_list_bytes.xml svneol=native#text/plain
+packages/fcl-sdo/tests/files/changesummary_prop_list_char.xml svneol=native#text/plain
+packages/fcl-sdo/tests/files/changesummary_prop_list_currency.xml svneol=native#text/plain
+packages/fcl-sdo/tests/files/changesummary_prop_list_date.xml svneol=native#text/plain
+packages/fcl-sdo/tests/files/changesummary_prop_list_double.xml svneol=native#text/plain
+packages/fcl-sdo/tests/files/changesummary_prop_list_float.xml svneol=native#text/plain
+packages/fcl-sdo/tests/files/changesummary_prop_list_integer.xml svneol=native#text/plain
+packages/fcl-sdo/tests/files/changesummary_prop_list_long.xml svneol=native#text/plain
+packages/fcl-sdo/tests/files/changesummary_prop_list_object.xml svneol=native#text/plain
+packages/fcl-sdo/tests/files/changesummary_prop_list_object_nested.xml svneol=native#text/plain
+packages/fcl-sdo/tests/files/changesummary_prop_list_short.xml svneol=native#text/plain
+packages/fcl-sdo/tests/files/changesummary_prop_list_string.xml svneol=native#text/plain
+packages/fcl-sdo/tests/files/company.one.xml svneol=native#text/plain
+packages/fcl-sdo/tests/files/company.two.xml svneol=native#text/plain
+packages/fcl-sdo/tests/files/company.xml svneol=native#text/plain
+packages/fcl-sdo/tests/files/complex_class_open_type.xsd svneol=native#text/xml
+packages/fcl-sdo/tests/files/datagraph.data svneol=native#text/xml
+packages/fcl-sdo/tests/files/load_from_file_reference_property.xml svneol=native#text/plain
+packages/fcl-sdo/tests/files/open_type.xml svneol=native#text/plain
+packages/fcl-sdo/tests/files/sdo_company.pas svneol=native#text/plain
+packages/fcl-sdo/tests/files/sdo_company.xsd svneol=native#text/xml
+packages/fcl-sdo/tests/files/sdo_company_original.xsd svneol=native#text/xml
+packages/fcl-sdo/tests/files/test_company_res.txt svneol=native#text/plain
+packages/fcl-sdo/tests/files/xsd/array_sequence_item_name.xsd svneol=native#text/xml
+packages/fcl-sdo/tests/files/xsd/class_properties_extended_metadata.xsd svneol=native#text/xml
+packages/fcl-sdo/tests/files/xsd/class_properties_extended_metadata_2.xsd svneol=native#text/xml
+packages/fcl-sdo/tests/files/xsd/class_property_composed_name.xsd svneol=native#text/xml
+packages/fcl-sdo/tests/files/xsd/complex_array_sequence.xsd svneol=native#text/xml
+packages/fcl-sdo/tests/files/xsd/complex_array_sequence_embedded.xsd svneol=native#text/xml
+packages/fcl-sdo/tests/files/xsd/complex_class.xsd svneol=native#text/xml
+packages/fcl-sdo/tests/files/xsd/complex_class_default.xsd svneol=native#text/xml
+packages/fcl-sdo/tests/files/xsd/complex_class_embedded.xsd svneol=native#text/xml
+packages/fcl-sdo/tests/files/xsd/complex_class_extend_simple.xsd svneol=native#text/xml
+packages/fcl-sdo/tests/files/xsd/complex_class_false_array.xsd svneol=native#text/xml
+packages/fcl-sdo/tests/files/xsd/complex_class_open_type.xsd svneol=native#text/xml
+packages/fcl-sdo/tests/files/xsd/empty.xsd svneol=native#text/xml
+packages/fcl-sdo/tests/files/xsd/import_base_library.xsd svneol=native#text/xml
+packages/fcl-sdo/tests/files/xsd/import_second_library.xsd svneol=native#text/xml
+packages/fcl-sdo/tests/files/xsd/simpletype.xsd svneol=native#text/xml
+packages/fcl-sdo/tests/files/xsd/simpletypeNativeAlias.xsd svneol=native#text/xml
+packages/fcl-sdo/tests/files/xsd/simpletype_embedded.xsd svneol=native#text/xml
 packages/fcl-sdo/tests/test_suite/projects/dunit_tests.pas svneol=native#text/plain
 packages/fcl-sdo/tests/test_suite/projects/sdo_test_suite.lpi svneol=native#text/plain
 packages/fcl-sdo/tests/test_suite/projects/sdo_test_suite.lpr svneol=native#text/plain

+ 4 - 0
packages/fcl-sdo/src/base/sdo.pas

@@ -2264,6 +2264,8 @@ begin
     SetLength(locRes, ( 2 * Length(AValue) ) );
     BinToHex(PAnsiChar(@(AValue[0])),PAnsiChar(@(locRes[1])),Length(AValue));
     Result := locRes;
+  end else begin
+    Result := '';
   end;
 end;
 
@@ -2415,6 +2417,8 @@ begin
     locValue := AValue;
     SetLength(Result,( Length(locValue) div 2 ));
     HexToBin(PAnsiChar(locValue),PAnsiChar(@(Result[0])),Length(Result));
+  end else begin
+    Result := nil;
   end;
 end;
 

+ 91 - 61
packages/fcl-sdo/src/base/sdo_serialization.pas

@@ -815,17 +815,19 @@ var
     if ( q > 0 ) then begin
       pt := AItem.Prop.getType();
       FStreamer.BeginObject(AItem.Prop.getName(), pt);
-        for k := 0 to Pred(q) do begin
-          FStreamer.BeginObject(s_listChanges, pt);
-            ch := AItem.GetItem(k);
-            PushSerializationStyle(ssAttibuteSerialization);
-              FStreamer.Put(s_index, locIntType, ch.Index);
-              FStreamer.Put(s_kind, locStringType, PROP_ACTION_STRING[ch.Action]);
-            PopSerializationStyle();
-            if ( ch.Action in [mvpaChange, mvpaDelete] ) then
-              FStreamer.Put(s_dataValues, pt, ch.Value);
-          FStreamer.EndScope();
-        end;
+        FStreamer.BeginArray(s_listChanges, pt, [0,(q-1)]);
+          for k := 0 to Pred(q) do begin
+            FStreamer.BeginObject(s_listChanges, pt);
+              ch := AItem.GetItem(k);
+              PushSerializationStyle(ssAttibuteSerialization);
+                FStreamer.Put(s_index, locIntType, ch.Index);
+                FStreamer.Put(s_kind, locStringType, PROP_ACTION_STRING[ch.Action]);
+                if ( ch.Action in [mvpaChange, mvpaDelete] ) then
+                  FStreamer.Put(s_dataValues, pt, ch.Value);
+              PopSerializationStyle();
+            FStreamer.EndScope();
+          end;
+        FStreamer.EndScope();
       FStreamer.EndScope();
     end;
   end;
@@ -840,17 +842,19 @@ var
     if ( q > 0 ) then begin
       pt := AItem.Prop.getType();
       FStreamer.BeginObject(AItem.Prop.getName(), pt);
-        for k := 0 to Pred(q) do begin
-          FStreamer.BeginObject(s_listChanges, pt);
-            ch := AItem.GetItem(k);
-            PushSerializationStyle(ssAttibuteSerialization);
-              FStreamer.Put(s_index, locIntType, ch.Index);
-              FStreamer.Put(s_kind, locStringType, PROP_ACTION_STRING[ch.Action]);
-            PopSerializationStyle();
-            if ( ch.Action in [mvpaChange, mvpaDelete] ) then
-              AddPropertyRefRecallWrite(rritSettingItem,ADataObject,AItem.Prop,ch.Value.ObjectValue^);
-          FStreamer.EndScope();
-        end;
+        FStreamer.BeginArray(s_listChanges, pt, [0,(q-1)]);
+          for k := 0 to Pred(q) do begin
+            FStreamer.BeginObject(s_listChanges, pt);
+              ch := AItem.GetItem(k);
+              PushSerializationStyle(ssAttibuteSerialization);
+                FStreamer.Put(s_index, locIntType, ch.Index);
+                FStreamer.Put(s_kind, locStringType, PROP_ACTION_STRING[ch.Action]);
+              PopSerializationStyle();
+              if ( ch.Action in [mvpaChange, mvpaDelete] ) then
+                AddPropertyRefRecallWrite(rritSettingItem,ADataObject,AItem.Prop,ch.Value.ObjectValue^);
+            FStreamer.EndScope();
+          end;
+        FStreamer.EndScope();
       FStreamer.EndScope();
     end;
   end;
@@ -865,23 +869,25 @@ var
     if ( q > 0 ) then begin
       pt := AItem.Prop.getType();
       FStreamer.BeginObject(AItem.Prop.getName(), pt);
-        for k := 0 to Pred(q) do begin
-          FStreamer.BeginObject(s_listChanges, pt);
-            ch := AItem.GetItem(k);
-            PushSerializationStyle(ssAttibuteSerialization);
-              FStreamer.Put(s_index, locIntType, ch.Index);
-              FStreamer.Put(s_kind, locStringType, PROP_ACTION_STRING[ch.Action]);
-            PopSerializationStyle();
-            if ( ch.Action in [mvpaChange, mvpaDelete] ) then begin
-              case pt.getTypeEnum() of
-                StringType   :  FStreamer.Put(s_dataValues, pt, ch.Value.StringValue^);
-{$IFDEF HAS_SDO_BYTES}
-                BytesType    :  FStreamer.Put(s_dataValues, pt, ch.Value.BytesValue^);
-{$ENDIF HAS_SDO_BYTES}
+        FStreamer.BeginArray(s_listChanges, pt, [0,(q-1)]);
+          for k := 0 to Pred(q) do begin
+            FStreamer.BeginObject(s_listChanges, pt);
+              ch := AItem.GetItem(k);
+              PushSerializationStyle(ssAttibuteSerialization);
+                FStreamer.Put(s_index, locIntType, ch.Index);
+                FStreamer.Put(s_kind, locStringType, PROP_ACTION_STRING[ch.Action]);
+              PopSerializationStyle();
+              if ( ch.Action in [mvpaChange, mvpaDelete] ) then begin
+                case pt.getTypeEnum() of
+                  StringType   :  FStreamer.Put(s_dataValues, pt, ch.Value.StringValue^);
+  {$IFDEF HAS_SDO_BYTES}
+                  BytesType    :  FStreamer.Put(s_dataValues, pt, ch.Value.BytesValue^);
+  {$ENDIF HAS_SDO_BYTES}
+                end;
               end;
-            end;
-          FStreamer.EndScope();
-        end;
+            FStreamer.EndScope();
+          end;
+        FStreamer.EndScope();
       FStreamer.EndScope();
     end;
   end;
@@ -956,25 +962,49 @@ var
 begin
   r := '';
   x := AObj;
-  p := x.getContainer();
-  while ( p <> nil ) do begin
-    prp := x.getContainmentProperty();
-    if prp.isMany() then
-      r := Format('%s[%d]/%s',[prp.getName(),indexOf(x,p.getList(prp)),r])
-    else
-      r := prp.getName() + '/' + r;
-    x := p;
+  if not FChangeSummary.isDeleted(x) then begin
     p := x.getContainer();
-  end;
-  prp := FChangeSummaryList.getInstanceProperties().find(x.getType().getName());
-  if ( prp <> nil ) then begin
-    ls := FChangeSummaryList.getList(prp);
-    locPos := indexOf(x,ls) ;
-    if ( locPos > -1 ) then begin
-      if ( r = '' ) then
-        r := Format('#/%s/%s[%d]',[s_changeSummary,x.getType().getName(),locPos])
+    while ( p <> nil ) do begin
+      prp := x.getContainmentProperty();
+      if prp.isMany() then
+        r := Format('%s[%d]/%s',[prp.getName(),indexOf(x,p.getList(prp)),r])
+      else
+        r := prp.getName() + '/' + r;
+      x := p;
+      p := x.getContainer();
+    end;
+    prp := FChangeSummaryList.getInstanceProperties().find(x.getType().getName());
+    if ( prp <> nil ) then begin
+      ls := FChangeSummaryList.getList(prp);
+      locPos := indexOf(x,ls) ;
+      if ( locPos > -1 ) then begin
+        if ( r = '' ) then
+          r := Format('#/%s/%s[%d]',[s_changeSummary,x.getType().getName(),locPos])
+        else
+          r := Format('#/%s/%s[%d]/%s',[s_changeSummary,x.getType().getName(),locPos,r]);
+      end;
+    end;
+  end else begin
+    p := x.getContainer();
+    while (p <> nil) and FChangeSummary.isDeleted(p) do begin
+      prp := x.getContainmentProperty();
+      if prp.isMany() then
+        r := Format('%s[%d]/%s',[prp.getName(),indexOf(x,p.getList(prp)),r])
       else
-        r := Format('#/%s/%s[%d]/%s',[s_changeSummary,x.getType().getName(),locPos,r]);
+        r := prp.getName() + '/' + r;
+      x := p;
+      p := x.getContainer();
+    end;
+    prp := FChangeSummaryList.getInstanceProperties().find(x.getType().getName());
+    if ( prp <> nil ) then begin
+      ls := FChangeSummaryList.getList(prp);
+      locPos := indexOf(x,ls) ;
+      if ( locPos > -1 ) then begin
+        if ( r = '' ) then
+          r := Format('#/%s/%s[%d]',[s_changeSummary,x.getType().getName(),locPos])
+        else
+          r := Format('#/%s/%s[%d]/%s',[s_changeSummary,x.getType().getName(),locPos,r]);
+      end;
     end;
   end;
   Result := r;
@@ -2164,6 +2194,8 @@ var
         lsReaded := TStringList.Create();
         lsReaded.Duplicates := dupIgnore;
         lsReaded.Sorted := True;
+        lsReaded.Add(s_create);
+        lsReaded.Add(s_delete);
         changedObjList := AValue.getChangedDataObjects() as ISDOChangedDataObjectListEx;
         c := ls.Count;
         for i := 0 to Pred(c) do begin
@@ -2504,6 +2536,7 @@ procedure TSDOSerializer.WriteChangeSummary(
       p := ASetting.getProperty();
       if ASetting.isSet() then begin
         if p.getType().isDataType() then begin
+          PushSerializationStyle(getSerializationStyle(p));
           case p.getTypeEnum() of
             BooleanType :
               begin
@@ -2582,6 +2615,7 @@ procedure TSDOSerializer.WriteChangeSummary(
             else
               raise Exception.Create('NOT-IMPLEMENTED');
           end;
+          PopSerializationStyle();
         end else if p.getType().isDataObjectType() then begin
           if p.isContainment() then begin
             if ( ASetting.getDataObjectValue() = nil ) then begin
@@ -2777,17 +2811,13 @@ procedure TSDOSerializer.InternalWriteObject(
   procedure WriteArrayProp(const AProp : ISDOProperty);
   var
     ls : ISDODataObjectList;
-    k, lsCount : PtrInt;
+    k : PtrInt;
     crsr : ISDOCursor;
     wrtProc : TPropListWriterProc;
     bmk : ISDOCursorBookmark;
   begin
     ls := AObject.getList(AProp);
-    lsCount := ls.size();
-    if ( lsCount > 0 ) then
-      k := lsCount - 1
-    else
-      k := 0;
+    k := ls.size() - 1;
     crsr := ls.getCursor();
     FStreamer.BeginArray(AProp.getName(),AProp.getType(),[0,k]);
     try

+ 123 - 63
packages/fcl-sdo/src/base/sdo_serialization_binary.pas

@@ -153,12 +153,11 @@ type
   TStackItem = class
   private
     FScopeObject: PDataBuffer;
-    FScopeType: TScopeType;
   protected
     procedure CopyTo(const AClone : TStackItem);virtual;
   Public
-    constructor Create(const AScopeObject : PDataBuffer;AScopeType : TScopeType);
-    function Clone() : TStackItem;virtual; abstract;
+    constructor Create(const AScopeObject : PDataBuffer);virtual;
+    function Clone() : TStackItem;virtual;
     function GetItemCount():Integer;virtual;abstract;
     function Find(var AName : TDataName):PDataBuffer;virtual;abstract;
     function GetByIndex(const AIndex : Integer):PDataBuffer;virtual;abstract;
@@ -171,17 +170,15 @@ type
     procedure NilCurrentScope();virtual;abstract;
     function IsCurrentScopeNil():Boolean;virtual;abstract;
     property ScopeObject : PDataBuffer Read FScopeObject;
-    property ScopeType : TScopeType Read FScopeType;
 
     function GetScopeItemNames(const AReturnList : TStrings) : Integer;virtual;abstract;
   End;
+  TStackItemClass = class of TStackItem;
 
   { TObjectStackItem }
 
   TObjectStackItem = class(TStackItem)
   Public
-    constructor Create(const AScopeObject : PDataBuffer);
-    function Clone() : TStackItem; override;
     function GetItemCount():Integer;override;
     function Find(var AName : TDataName):PDataBuffer;override;
     function GetByIndex(const AIndex : Integer):PDataBuffer;override;
@@ -197,6 +194,21 @@ type
   End;
   TObjectStackItemClass = class of TObjectStackItem;
 
+
+  { TObjectBaseArrayStackItem }
+
+  TObjectBaseArrayStackItem = class(TObjectStackItem)
+  private
+    FIndex : Integer;
+    FItemName : TDataName;
+  protected
+    procedure CopyTo(const AClone : TStackItem);override;
+  public
+    function GetItemCount():Integer;override;
+    function Find(var AName : TDataName):PDataBuffer;override;
+    procedure SetItemName(const AValue : TDataName);
+  end;
+
   { TArrayStackItem }
 
   TArrayStackItem = class(TStackItem)
@@ -205,8 +217,6 @@ type
   protected
     procedure CopyTo(const AClone : TStackItem);override;
   Public
-    constructor Create(const AScopeObject : PDataBuffer);
-    function Clone() : TStackItem; override;
     function GetItemCount():Integer;override;
     function Find(var AName : TDataName):PDataBuffer;override;
     function GetByIndex(const AIndex : Integer):PDataBuffer;override;
@@ -763,7 +773,7 @@ Begin
     Exit;
   i := AStoreRdr.ReadInt32S();
   s := AStoreRdr.ReadAnsiStr();
-  If ( TDataType(i) < dtArray ) Then
+  if (TDataType(i) < dtArray) or (TDataType(i) = dtByteDynArray) then
     Result := CreateObjBuffer(TDataType(i),s);
   Case TDataType(i) Of
     dtInt8S   : Result^.Int8S := AStoreRdr.ReadInt8S();
@@ -888,8 +898,10 @@ Begin
       Begin
         eltLen := SizeOf(TDataBuffer);
         For j := 0 to Pred(AOwner^.ArrayData^.Count) Do Begin
-          ClearObj(AOwner^.ArrayData^.Items^[j]);
-          Freemem(AOwner^.ArrayData^.Items^[j],eltLen);
+          if (AOwner^.ArrayData^.Items^[j] <> nil) then begin
+            ClearObj(AOwner^.ArrayData^.Items^[j]);
+            Freemem(AOwner^.ArrayData^.Items^[j],eltLen);
+          end;
           AOwner^.ArrayData^.Items^[j] := Nil;
         End;
         i := AOwner^.ArrayData^.Count * SizeOf(PDataBuffer);
@@ -910,29 +922,81 @@ Begin
   End;
 End;
 
+{ TObjectBaseArrayStackItem }
+
+procedure TObjectBaseArrayStackItem.CopyTo(const AClone: TStackItem);
+begin
+  inherited CopyTo(AClone);
+  TObjectBaseArrayStackItem(AClone).FIndex := FIndex;
+  TObjectBaseArrayStackItem(AClone).FItemName := FItemName;
+end;
+
+function TObjectBaseArrayStackItem.GetItemCount: Integer;
+var
+  p : PObjectBufferItem;
+begin
+  Result := 0;
+  p := FScopeObject^.ObjectData^.Head;
+  while (p <> nil) do begin
+    if AnsiSameText(FItemName,p^.Data^.Name) then
+      Inc(Result);
+    p := p^.Next;
+  end;
+end;
+
+function TObjectBaseArrayStackItem.Find(var AName: TDataName): PDataBuffer;
+var
+  p : PObjectBufferItem;
+  i : Integer;
+begin
+  Result := nil;
+  if (FIndex >= ScopeObject^.ObjectData^.Count) then
+    exit;
+  i := -1;
+  p := FScopeObject^.ObjectData^.Head;
+  while (i < FIndex) and (p <> nil) do begin
+    if AnsiSameText(FItemName,p^.Data^.Name) then begin
+      Inc(i);
+      if (i = FIndex) then begin
+        Result := p^.Data;
+        Inc(FIndex);
+      end;
+    end;
+    p := p^.Next;
+  end;
+end;
+
+procedure TObjectBaseArrayStackItem.SetItemName(const AValue: TDataName);
+begin
+  FItemName := AValue;
+end;
 
 { TStackItem }
 
 procedure TStackItem.CopyTo(const AClone: TStackItem);
 begin
   AClone.FScopeObject := Self.FScopeObject;
-  AClone.FScopeType := Self.FScopeType;
 end;
 
-constructor TStackItem.Create(const AScopeObject: PDataBuffer; AScopeType: TScopeType);
+constructor TStackItem.Create(const AScopeObject: PDataBuffer);
 begin
   Assert(Assigned(AScopeObject));
   FScopeObject := AScopeObject;
-  FScopeType := AScopeType;
 end;
 
-{ TObjectStackItem }
-
-constructor TObjectStackItem.Create(const AScopeObject: PDataBuffer);
+function TStackItem.Clone() : TStackItem;
 begin
-  Inherited Create(AScopeObject,stObject);
+  Result := TStackItemClass(Self.ClassType).Create(FScopeObject);
+  try
+    CopyTo(Result);
+  except
+    FreeAndNil(Result);
+    raise;
+  end;
 end;
 
+{ TObjectStackItem }
+
 function TObjectStackItem.GetItemCount(): Integer;
 begin
   Result := ScopeObject^.ObjectData^.Count;
@@ -1003,17 +1067,6 @@ begin
   Result := AReturnList.Count;
 end;
 
-function TObjectStackItem.Clone() : TStackItem;
-begin
-  Result := TObjectStackItemClass(Self.ClassType).Create(FScopeObject);
-  try
-    CopyTo(Result);
-  except
-    FreeAndNil(Result);
-    raise;
-  end;
-end;
-
 { TSDOSerializationStreamBinary }
 
 procedure TSDOSerializationStreamBinary.ClearStack();
@@ -1027,12 +1080,16 @@ end;
 
 procedure TSDOSerializationStreamBinary.PushStack(AScopeObject: PDataBuffer;const AScopeType: TScopeType);
 begin
-  If ( AScopeType = stObject ) Then
+  if ( AScopeType = stObject ) then begin
     FStack.Push(TObjectStackItem.Create(AScopeObject))
-  Else If ( AScopeType = stArray ) Then
-    FStack.Push(TArrayStackItem.Create(AScopeObject))
-  Else
+  end else if (AScopeType = stArray) then begin
+    if (AScopeObject^.DataType = dtObject) then
+      FStack.Push(TObjectBaseArrayStackItem.Create(AScopeObject))
+    else
+      FStack.Push(TArrayStackItem.Create(AScopeObject));
+  end else begin
     Assert(False);
+  end;
 end;
 
 function TSDOSerializationStreamBinary.StackTop(): TStackItem;
@@ -1161,8 +1218,8 @@ var
 begin
   stk := StackTop();
   locNode := stk.Find(AScopeName);
-  if not Assigned(locNode) then
-    Error(SERR_ScopeNotFound,[AScopeName]);
+  if (locNode = nil) then
+    exit(-1);
   PushStack(locNode,stObject);
   Result := StackTop().GetItemCount();
 end;
@@ -1176,13 +1233,17 @@ var
   locNode : PDataBuffer;
   stk : TStackItem;
 begin
+  Result := -1;
   stk := StackTop();
   locNode := stk.Find(AScopeName);
-  if ( locNode <> nil ) then begin
-    PushStack(locNode,stArray);
+  if (locNode <> nil) then begin
+    if (locNode^.DataType <> dtArray) then begin
+      PushStack(stk.ScopeObject,stArray);
+      (StackTop() as TObjectBaseArrayStackItem).SetItemName(AItemName);
+    end else begin
+      PushStack(locNode,stArray);
+    end;
     Result := StackTop().GetItemCount();
-  end else begin
-    Result := -1;
   end;
 end;
 
@@ -1774,12 +1835,13 @@ begin
   Result := False;
   if ( AValue <> nil ) then begin
     locBM := AValue as TStreamBinaryBookmark;
-    if ( locBM.FRootData = Self.FRootData ) then begin
+    if (locBM.FRootData = Self.FRootData) then begin
       ClearStack();
       FreeAndNil(FStack);
       FStack := locBM.FStack.Clone({$IFDEF ATT_PROC_ADDRESS}@{$ENDIF}CopyStackItem);
       FSerializationStyle := locBM.SerializationStyle;
       FNameStyle := locBM.NameStyle;
+      FRootData := locBM.RootData;
       Result := True;
     end;
   end;
@@ -1792,10 +1854,19 @@ begin
     PushStack(FRootData);
 end;
 
-procedure TSDOSerializationStreamBinary.LoadFromFile(
-  const AFileName: string);
+procedure TSDOSerializationStreamBinary.LoadFromFile(const AFileName: string);
+var
+  locStream : TStream;
 begin
-
+  if not FileExists(AFileName) then
+    Error(SMSG_FileNotFound,[AFileName]);
+  locStream := TFileStream.Create(AFileName,fmOpenRead or fmShareDenyWrite);
+  try
+    locStream.Position := 0;
+    LoadFromStream(locStream);
+  finally
+    locStream.Free();
+  end;
 end;
 
 procedure TSDOSerializationStreamBinary.PutBoolean(const AName: string; const AData: TSDOBoolean);
@@ -1871,10 +1942,16 @@ begin
 {$ENDIF}
 end;
 
-procedure TSDOSerializationStreamBinary.SaveToFile(
-  const AFileName: string);
+procedure TSDOSerializationStreamBinary.SaveToFile(const AFileName: string);
+var
+  locStream : TStream;
 begin
-
+  locStream := TFileStream.Create(AFileName,fmCreate);
+  try
+    SaveToStream(locStream);
+  finally
+    locStream.Free();
+  end;
 end;
 
 procedure TSDOSerializationStreamBinary.SetNameStyle(const AValue: TNameStyle);
@@ -1885,12 +1962,6 @@ end;
 
 { TArrayStackItem }
 
-constructor TArrayStackItem.Create(const AScopeObject: PDataBuffer);
-begin
-  Inherited Create(AScopeObject,stArray);
-  FIndex := 0;
-end;
-
 function TArrayStackItem.GetItemCount(): Integer;
 begin
   Result := ScopeObject^.ArrayData^.Count;
@@ -1968,17 +2039,6 @@ begin
   TArrayStackItem(AClone).FIndex := Self.FIndex;
 end;
 
-function TArrayStackItem.Clone: TStackItem;
-begin
-  Result := TArrayStackItemClass(Self.ClassType).Create(Self.FScopeObject);
-  try
-    CopyTo(Result);
-  except
-    FreeAndNil(Result);
-    raise;
-  end;
-end;
-
 { TStreamBinaryBookmark }
 
 destructor TStreamBinaryBookmark.Destroy();

+ 0 - 3
packages/fcl-sdo/src/base/sdo_serialization_xml.pas

@@ -553,9 +553,6 @@ begin
   i := ABounds[0];
   j := ABounds[1];
   k := j - i + 1;
-  if ( k < 0 ) then begin
-    Error('Invalid array bounds.');
-  end;
   typData := AItemTypeInfo;
   if not Assigned(typData) then begin
     Error('Typeinfo not provided.');

+ 14 - 12
packages/fcl-sdo/src/base/sdo_xsdparser.pas

@@ -602,6 +602,7 @@ var
     locTmpCrs : IObjectCursor;
     locTmpNode : TDOMNode;
   begin
+    Result := nil;
     locTmpCrs := CreateCursorOn(
                    frstCrsr.Clone() as IObjectCursor,
                    ParseFilter(CreateQualifiedNameFilterStr(s_all,Context.GetXsShortNames()),TDOMNodeRttiExposer)
@@ -863,7 +864,7 @@ var
   var
     strBuffer : string;
   begin
-    Result := sdo_findCustomAttributeXsd(Context.GetXsShortNames(),AElement,s_SDO_collection,strBuffer) and AnsiSameText('true',Trim(strBuffer));
+    Result := sdo_findCustomAttributeXsd(Context.GetXsShortNames(),AElement,s_SDO_collection,strBuffer) and SameText('true',Trim(strBuffer));
   end;
 
   procedure ParseElement(AElement : TDOMNode);
@@ -945,7 +946,7 @@ var
     if locType.getBoolean(s_Unresolved) then
       AddUnresolvedLink(classDef,locType,LINK_KIND_PROP_TYPE,locProp.getString(s_Name));
 
-    if AnsiSameText(s_attribute,ExtractNameFromQName(AElement.NodeName)) then begin
+    if SameText(s_attribute,ExtractNameFromQName(AElement.NodeName)) then begin
       locProp.setBoolean(s_IsAttribute,True);
       locPartCursor := CreateCursorOn(locAttCursor.Clone() as IObjectCursor,ParseFilter(Format('%s = %s',[s_NODE_NAME,QuotedStr(s_use)]),TDOMNodeRttiExposer));
       locPartCursor.Reset();
@@ -982,7 +983,7 @@ var
     locPartCursor.Reset();
     if locPartCursor.MoveNext() then begin
       locStrBuffer := (locPartCursor.GetCurrent() as TDOMNodeRttiExposer).NodeValue;
-      if AnsiSameText(locStrBuffer,s_unbounded) then begin
+      if SameText(locStrBuffer,s_unbounded) then begin
         locMaxOccurUnbounded := True;
       end else begin
         if not TryStrToInt(locStrBuffer,locMaxOccur) then
@@ -1000,7 +1001,7 @@ var
     if not isArrayDef then begin
       SetTagValue(
         locProp,s_attribute,
-        TSDOConvertHelper.BoolToString(AnsiSameText(s_attribute,ExtractNameFromQName(AElement.NodeName)))
+        TSDOConvertHelper.BoolToString(SameText(s_attribute,ExtractNameFromQName(AElement.NodeName)))
       );
     end;
     locPartCursor := CreateCursorOn(locAttCursor.Clone() as IObjectCursor,ParseFilter(Format('%s = %s',[s_NODE_NAME,QuotedStr(s_default)]),TDOMNodeRttiExposer));
@@ -1014,7 +1015,7 @@ var
   var
     strBuffer : string;
   begin
-    Result := sdo_findCustomAttributeXsd(Context.GetXsShortNames(),FTypeNode,s_SDO_record,strBuffer) and AnsiSameText('true',Trim(strBuffer));
+    Result := sdo_findCustomAttributeXsd(Context.GetXsShortNames(),FTypeNode,s_SDO_record,strBuffer) and SameText('true',Trim(strBuffer));
   end;
 
   procedure ParseElementsAndAttributes(AEltCrs, AEltAttCrs : IObjectCursor);
@@ -1264,7 +1265,7 @@ var
   locSym : ISDODataObject;
   locContinue : Boolean;
 begin
-  if not AnsiSameText(ExtractNameFromQName(FTypeNode.NodeName),s_complexType) then
+  if not SameText(ExtractNameFromQName(FTypeNode.NodeName),s_complexType) then
     raise EXsdParserAssertException.CreateFmt(SERR_ExpectedButFound,[s_complexType,ExtractNameFromQName(FTypeNode.NodeName)]);
   Result := nil;
   CreateNodeCursors();
@@ -1286,7 +1287,7 @@ begin
     if IsStrEmpty(FContentType) then begin
       Result := ParseEmptyContent(FTypeName);
     end else begin
-      if AnsiSameText(FContentType,s_complexContent) then
+      if SameText(FContentType,s_complexContent) then
         Result := ParseComplexContent(FTypeName)
       else
         Result := ParseSimpleContent(FTypeName);
@@ -1455,7 +1456,7 @@ var
   locSym : ISDODataObject;
   locContinue : Boolean;
 begin
-  if not AnsiSameText(ExtractNameFromQName(FTypeNode.NodeName),s_simpleType) then
+  if not SameText(ExtractNameFromQName(FTypeNode.NodeName),s_simpleType) then
     raise EXsdParserAssertException.CreateFmt(SERR_ExpectedButFound,[s_simpleType,ExtractNameFromQName(FTypeNode.NodeName)]);
   Result := nil;
   CreateNodeCursors();
@@ -1631,7 +1632,7 @@ begin
       if Assigned(attCrs) then begin
         crs := CreateCursorOn(attCrs,fltr);
         crs.Reset();
-        if crs.MoveNext() and AnsiSameText(AName,TDOMNodeRttiExposer(crs.GetCurrent()).NodeValue) then begin
+        if crs.MoveNext() and SameText(AName,TDOMNodeRttiExposer(crs.GetCurrent()).NodeValue) then begin
           Dec(locOrder);
           if ( locOrder <= 0 ) then begin
             Result := curObj.InnerObject;
@@ -1784,7 +1785,7 @@ var
       typNd := FindNamedNode(crsSchemaChild,localTypeName);
     if not Assigned(typNd) then
       raise EXsdTypeNotFoundException.CreateFmt(SERR_TypeDefinitionNotFound,['1',AName]);
-    if AnsiSameText(ExtractNameFromQName(typNd.NodeName),s_element) then begin
+    if SameText(ExtractNameFromQName(typNd.NodeName),s_element) then begin
       crs := CreateCursorOn(CreateAttributesCursor(typNd,cetRttiNode),ParseFilter(Format('%s = %s',[s_NODE_NAME,QuotedStr(s_type)]),TDOMNodeRttiExposer));
       crs.Reset();
       if crs.MoveNext() then begin
@@ -1888,6 +1889,7 @@ begin
   try
     embededType := False;
     aliasType := nil;
+    typNd := nil;
     ExplodeQName(AName,localTypeName,shortNameSpace);
     if IsStrEmpty(shortNameSpace) then begin
       typeModule := FModule;
@@ -1916,9 +1918,9 @@ begin
       Result := nil;
       Init();
       if locTypeNodeFound {FindTypeNode(aliasType)} then begin
-        if AnsiSameText(ExtractNameFromQName(typNd.NodeName),s_complexType) then begin
+        if (ExtractNameFromQName(typNd.NodeName)=s_complexType) then begin
           Result := ParseComplexType();
-        end else if AnsiSameText(ExtractNameFromQName(typNd.NodeName),s_simpleType) then begin
+        end else if (ExtractNameFromQName(typNd.NodeName)=s_simpleType) then begin
           Result := ParseSimpleType();
         end;
         if not Assigned(Result) then

+ 4 - 1
packages/fcl-sdo/src/das/sdo_das_utils.pas

@@ -198,7 +198,10 @@ begin
         {$IFDEF DEFAULT_UNICODE}
           AObject.setString(AProp,AField.AsString);
         {$ELSE DEFAULT_UNICODE}
-          AObject.setString(AProp,UTF8Decode(AField.AsString));
+          if (AField.DataType in [ftWideString,ftWideMemo,ftFixedWideChar]) then
+            AObject.setString(AProp,AField.AsWideString)
+          else
+            AObject.setString(AProp,UTF8Decode(AField.AsString));
         {$ENDIF DEFAULT_UNICODE}
         end
       else

+ 38 - 0
packages/fcl-sdo/tests/files/_company.xml

@@ -0,0 +1,38 @@
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+	<xsd>
+		<schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd">
+			<xsd:complexType name="EmployeeType">
+				<xsd:attribute name="name" type="xsd:string" use="required"/>
+				<xsd:attribute name="SN" type="xsd:string" use="required"/>
+				<xsd:attribute name="manager" type="xsd:boolean" use="required"/>
+			</xsd:complexType>
+			<xsd:complexType name="DepartmentType">
+				<xsd:sequence>
+					<xsd:element name="employees" type="tns:EmployeeType" maxOccurs="unbounded"/>
+				</xsd:sequence>
+				<xsd:attribute name="name" type="xsd:string" use="required"/>
+				<xsd:attribute name="location" type="xsd:string" use="required"/>
+				<xsd:attribute name="number" type="xsd:int" use="required"/>
+			</xsd:complexType>
+			<xsd:complexType name="CompanyType">
+				<xsd:sequence>
+					<xsd:element name="departments" type="tns:DepartmentType" maxOccurs="unbounded"/>
+				</xsd:sequence>
+				<xsd:attribute name="name" type="xsd:string" use="required"/>
+				<xsd:attribute name="employeeOfTheMonth" type="xsd:string" use="required"/>
+			</xsd:complexType>
+		</schema>
+	</xsd>
+	<ns1:CompanyType name="A Sample company" employeeOfTheMonth="Inoussa">
+			<departments name="RAD Departement" location="Moon" number="2">
+					<employees name="inoussa OUEDRAOGO" SN="1122334455667" manager="1"/>
+					<employees name="SDO man" SN="867787667" manager="0"/>
+					<employees name="FPC" SN="_e-('" manager="0"/>
+			</departments>
+			<departments name="Sales Departement" location="Mars" number="2">
+					<employees name="wst man" SN="e&quot;'fsdfdf" manager="1"/>
+					<employees name="azerty" SN="jkjk_e5679" manager="0"/>
+					<employees name="qwerty" SN="_s-('" manager="0"/>
+			</departments>
+	</ns1:CompanyType>
+</sdo:datagraph>

+ 32 - 0
packages/fcl-sdo/tests/files/change_summary_bool.xml

@@ -0,0 +1,32 @@
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+  <xsd>
+    <schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+      <xsd:complexType name="Employee">
+        <xsd:sequence>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+        <xsd:attribute name="sampleProperty" type="xsd:boolean"/>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <Employee sdo:ref="#/Employee" sampleProperty="1"/>
+  </changeSummary>
+  <ns1:Employee sampleProperty="0"/>
+</sdo:datagraph>
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+  <xsd>
+    <schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+      <xsd:complexType name="Employee">
+        <xsd:sequence>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+        <xsd:attribute name="sampleProperty" type="xsd:boolean"/>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <Employee sdo:ref="#/Employee" sampleProperty="1"/>
+  </changeSummary>
+  <ns1:Employee sampleProperty="0"/>
+</sdo:datagraph>

+ 37 - 0
packages/fcl-sdo/tests/files/change_summary_byte.xml

@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<sdo:datagraph xmlns:ns1="company.xsd" xmlns:sdo="commonj.sdo">
+  <xsd>
+    <schema xmlns:sdo="commonj.sdo" xmlns:tns="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="company.xsd">
+      <xsd:complexType name="Employee">
+        <xsd:sequence>
+          <xsd:element name="sampleProperty" type="xsd:byte" minOccurs="0"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <Employee sdo:ref="#/Employee">
+      <sampleProperty>200</sampleProperty>
+    </Employee>
+  </changeSummary>
+  <ns1:Employee>
+    <sampleProperty>123</sampleProperty>
+  </ns1:Employee>
+</sdo:datagraph>
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+  <xsd>
+    <schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+      <xsd:complexType name="Employee">
+        <xsd:sequence>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+        <xsd:attribute name="sampleProperty" type="xsd:byte"/>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <Employee sdo:ref="#/Employee" sampleProperty="200"/>
+  </changeSummary>
+  <ns1:Employee sampleProperty="123"/>
+</sdo:datagraph>

+ 37 - 0
packages/fcl-sdo/tests/files/change_summary_bytes.xml

@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<sdo:datagraph xmlns:ns1="company.xsd" xmlns:sdo="commonj.sdo">
+  <xsd>
+    <schema xmlns:sdo="commonj.sdo" xmlns:tns="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="company.xsd">
+      <xsd:complexType name="Employee">
+        <xsd:sequence>
+          <xsd:element name="sampleProperty" type="xsd:hexBinary" minOccurs="0"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <Employee sdo:ref="#/Employee">
+      <sampleProperty>00010203040506070809</sampleProperty>
+    </Employee>
+  </changeSummary>
+  <ns1:Employee>
+    <sampleProperty>0104070A0D101316191C1F2225282B2E3134373A</sampleProperty>
+  </ns1:Employee>
+</sdo:datagraph>
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+  <xsd>
+    <schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+      <xsd:complexType name="Employee">
+        <xsd:sequence>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+        <xsd:attribute name="sampleProperty" type="xsd:hexBinary"/>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <Employee sdo:ref="#/Employee" sampleProperty="00010203040506070809"/>
+  </changeSummary>
+  <ns1:Employee sampleProperty="0104070A0D101316191C1F2225282B2E3134373A"/>
+</sdo:datagraph>

+ 42 - 0
packages/fcl-sdo/tests/files/change_summary_char.xml

@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<sdo:datagraph xmlns:ns1="company.xsd" xmlns:sdo="commonj.sdo">
+  <xsd>
+    <schema xmlns:sdo="commonj.sdo" xmlns:tns="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="company.xsd">
+      <xsd:complexType name="Employee">
+        <xsd:sequence>
+          <xsd:element name="sampleProperty" type="xsd:string" minOccurs="0" sdo:propertyType="sdo:Character"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <Employee sdo:ref="#/Employee">
+      <sampleProperty>a</sampleProperty>
+    </Employee>
+  </changeSummary>
+  <ns1:Employee>
+    <sampleProperty>z</sampleProperty>
+  </ns1:Employee>
+</sdo:datagraph>
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+  <xsd>
+    <schema targetNamespace="company.xsd"
+    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+    xmlns:tns="company.xsd" 
+    xmlns:sdo="commonj.sdo">
+      <xsd:complexType name="Employee">
+        <xsd:sequence>
+          <xsd:element name="changeSummary"
+          type="sdo:ChangeSummary" />
+        </xsd:sequence>
+        <xsd:attribute name="sampleProperty" type="xsd:string"
+        sdo:propertyType="sdo:Character" />
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <Employee sdo:ref="#/Employee" sampleProperty="a" />
+  </changeSummary>
+  <ns1:Employee sampleProperty="z" />
+</sdo:datagraph>

+ 43 - 0
packages/fcl-sdo/tests/files/change_summary_currency.xml

@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<sdo:datagraph xmlns:ns1="company.xsd" xmlns:sdo="commonj.sdo">
+  <xsd>
+    <schema xmlns:sdo="commonj.sdo" xmlns:tns="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="company.xsd">
+      <xsd:complexType name="Employee">
+        <xsd:sequence>
+          <xsd:element name="sampleProperty" type="xsd:decimal" minOccurs="0" sdo:propertyType="sdo:Currency"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <Employee sdo:ref="#/Employee">
+      <sampleProperty>12398745632145.6987</sampleProperty>
+    </Employee>
+  </changeSummary>
+  <ns1:Employee>
+    <sampleProperty>-45821568.7422</sampleProperty>
+  </ns1:Employee>
+</sdo:datagraph>
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+  <xsd>
+    <schema targetNamespace="company.xsd"
+    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+    xmlns:tns="company.xsd" 
+    xmlns:sdo="commonj.sdo">
+      <xsd:complexType name="Employee">
+        <xsd:sequence>
+          <xsd:element name="changeSummary"
+          type="sdo:ChangeSummary" />
+        </xsd:sequence>
+        <xsd:attribute name="sampleProperty" type="xsd:decimal"
+          sdo:propertyType="sdo:Currency" />
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <Employee sdo:ref="#/Employee"
+    sampleProperty="12398745632145.6987" />
+  </changeSummary>
+  <ns1:Employee sampleProperty="-45821568.7422" />
+</sdo:datagraph>

+ 32 - 0
packages/fcl-sdo/tests/files/change_summary_date.xml

@@ -0,0 +1,32 @@
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+  <xsd>
+    <schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+      <xsd:complexType name="Employee">
+        <xsd:sequence>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+        <xsd:attribute name="sampleProperty" type="xsd:dateTime"/>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <Employee sdo:ref="#/Employee" sampleProperty="2023-07-15T23:55:00Z"/>
+  </changeSummary>
+  <ns1:Employee sampleProperty="2006-10-10T08:00:00Z"/>
+</sdo:datagraph>
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+  <xsd>
+    <schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+      <xsd:complexType name="Employee">
+        <xsd:sequence>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+        <xsd:attribute name="sampleProperty" type="xsd:dateTime"/>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <Employee sdo:ref="#/Employee" sampleProperty="2023-07-15T23:55:00Z"/>
+  </changeSummary>
+  <ns1:Employee sampleProperty="2006-10-10T08:00:00Z"/>
+</sdo:datagraph>

+ 37 - 0
packages/fcl-sdo/tests/files/change_summary_double.xml

@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<sdo:datagraph xmlns:ns1="company.xsd" xmlns:sdo="commonj.sdo">
+  <xsd>
+    <schema xmlns:sdo="commonj.sdo" xmlns:tns="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="company.xsd">
+      <xsd:complexType name="Employee">
+        <xsd:sequence>
+          <xsd:element name="sampleProperty" type="xsd:double" minOccurs="0"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <Employee sdo:ref="#/Employee">
+      <sampleProperty>1239874567</sampleProperty>
+    </Employee>
+  </changeSummary>
+  <ns1:Employee>
+    <sampleProperty>-4582152</sampleProperty>
+  </ns1:Employee>
+</sdo:datagraph>
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+  <xsd>
+    <schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+      <xsd:complexType name="Employee">
+        <xsd:sequence>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+        <xsd:attribute name="sampleProperty" type="xsd:double"/>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <Employee sdo:ref="#/Employee" sampleProperty="1239874567"/>
+  </changeSummary>
+  <ns1:Employee sampleProperty="-4582152"/>
+</sdo:datagraph>

+ 37 - 0
packages/fcl-sdo/tests/files/change_summary_float.xml

@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<sdo:datagraph xmlns:ns1="company.xsd" xmlns:sdo="commonj.sdo">
+  <xsd>
+    <schema xmlns:sdo="commonj.sdo" xmlns:tns="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="company.xsd">
+      <xsd:complexType name="Employee">
+        <xsd:sequence>
+          <xsd:element name="sampleProperty" type="xsd:float" minOccurs="0"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <Employee sdo:ref="#/Employee">
+      <sampleProperty>1239874560</sampleProperty>
+    </Employee>
+  </changeSummary>
+  <ns1:Employee>
+    <sampleProperty>-4582152</sampleProperty>
+  </ns1:Employee>
+</sdo:datagraph>
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+  <xsd>
+    <schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+      <xsd:complexType name="Employee">
+        <xsd:sequence>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+        <xsd:attribute name="sampleProperty" type="xsd:float"/>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <Employee sdo:ref="#/Employee" sampleProperty="1239874567"/>
+  </changeSummary>
+  <ns1:Employee sampleProperty="-4582152"/>
+</sdo:datagraph>

+ 32 - 0
packages/fcl-sdo/tests/files/change_summary_integer.xml

@@ -0,0 +1,32 @@
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+  <xsd>
+    <schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+      <xsd:complexType name="Employee">
+        <xsd:sequence>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+        <xsd:attribute name="sampleProperty" type="xsd:int"/>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <Employee sdo:ref="#/Employee" sampleProperty="12345"/>
+  </changeSummary>
+  <ns1:Employee sampleProperty="-789"/>
+</sdo:datagraph>
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+  <xsd>
+    <schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+      <xsd:complexType name="Employee">
+        <xsd:sequence>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+        <xsd:attribute name="sampleProperty" type="xsd:int"/>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <Employee sdo:ref="#/Employee" sampleProperty="12345"/>
+  </changeSummary>
+  <ns1:Employee sampleProperty="-789"/>
+</sdo:datagraph>

+ 37 - 0
packages/fcl-sdo/tests/files/change_summary_long.xml

@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<sdo:datagraph xmlns:ns1="company.xsd" xmlns:sdo="commonj.sdo">
+  <xsd>
+    <schema xmlns:sdo="commonj.sdo" xmlns:tns="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="company.xsd">
+      <xsd:complexType name="Employee">
+        <xsd:sequence>
+          <xsd:element name="sampleProperty" type="xsd:long" minOccurs="0"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <Employee sdo:ref="#/Employee">
+      <sampleProperty>123987456321456987</sampleProperty>
+    </Employee>
+  </changeSummary>
+  <ns1:Employee>
+    <sampleProperty>-458215687422</sampleProperty>
+  </ns1:Employee>
+</sdo:datagraph>
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+  <xsd>
+    <schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+      <xsd:complexType name="Employee">
+        <xsd:sequence>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+        <xsd:attribute name="sampleProperty" type="xsd:long"/>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <Employee sdo:ref="#/Employee" sampleProperty="123987456321456987"/>
+  </changeSummary>
+  <ns1:Employee sampleProperty="-458215687422"/>
+</sdo:datagraph>

+ 52 - 0
packages/fcl-sdo/tests/files/change_summary_object_create.xml

@@ -0,0 +1,52 @@
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+	<xsd>
+		<schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+			<xsd:complexType name="DepartmentType">
+				<xsd:sequence>
+					<xsd:element name="Employee" type="tns:Employee" minOccurs="0"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+				</xsd:sequence>
+				<xsd:attribute name="name" type="xsd:string"/>
+				<xsd:attribute name="location" type="xsd:string"/>
+				<xsd:attribute name="number" type="xsd:int"/>
+			</xsd:complexType>
+			<xsd:complexType name="Employee">
+				<xsd:attribute name="name" type="xsd:string"/>
+				<xsd:attribute name="SN" type="xsd:string"/>
+				<xsd:attribute name="manager" type="xsd:boolean"/>
+			</xsd:complexType>
+		</schema>
+	</xsd>
+	<changeSummary create="#/DepartmentType/Employee">
+		<DepartmentType sdo:ref="#/DepartmentType" name="R &amp; D" location="Ouaga, BF" sdo:unset="number Employee"/>
+	</changeSummary>
+	<ns1:DepartmentType name="R &amp; D Department" location="Ouaga 01, BF" number="1210">
+		<Employee name="Inoussa OUEDRAOGO" SN="001" manager="1"/>
+	</ns1:DepartmentType>
+</sdo:datagraph>
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+	<xsd>
+		<schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+			<xsd:complexType name="DepartmentType">
+				<xsd:sequence>
+					<xsd:element name="Employee" type="tns:Employee" minOccurs="0"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+				</xsd:sequence>
+				<xsd:attribute name="name" type="xsd:string"/>
+				<xsd:attribute name="location" type="xsd:string"/>
+				<xsd:attribute name="number" type="xsd:int"/>
+			</xsd:complexType>
+			<xsd:complexType name="Employee">
+				<xsd:attribute name="name" type="xsd:string"/>
+				<xsd:attribute name="SN" type="xsd:string"/>
+				<xsd:attribute name="manager" type="xsd:boolean"/>
+			</xsd:complexType>
+		</schema>
+	</xsd>
+	<changeSummary create="#/DepartmentType/Employee">
+		<DepartmentType sdo:ref="#/DepartmentType" name="R &amp; D" location="Ouaga, BF" sdo:unset="number Employee"/>
+	</changeSummary>
+	<ns1:DepartmentType name="R &amp; D Department" location="Ouaga 01, BF" number="1210">
+		<Employee name="Inoussa OUEDRAOGO" SN="001" manager="1"/>
+	</ns1:DepartmentType>
+</sdo:datagraph>

+ 56 - 0
packages/fcl-sdo/tests/files/change_summary_object_create_cont_ref.xml

@@ -0,0 +1,56 @@
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+	<xsd>
+		<schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+			<xsd:complexType name="DepartmentType">
+				<xsd:sequence>
+					<xsd:element name="Employee" type="tns:Employee" minOccurs="0"/>
+					<xsd:element name="employee_ref" type="xsd:anyURI" minOccurs="0" sdo:propertyType="tns:Employee"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+				</xsd:sequence>
+				<xsd:attribute name="name" type="xsd:string"/>
+				<xsd:attribute name="location" type="xsd:string"/>
+				<xsd:attribute name="number" type="xsd:int"/>
+			</xsd:complexType>
+			<xsd:complexType name="Employee">
+				<xsd:attribute name="name" type="xsd:string"/>
+				<xsd:attribute name="SN" type="xsd:string"/>
+				<xsd:attribute name="manager" type="xsd:boolean"/>
+			</xsd:complexType>
+		</schema>
+	</xsd>
+	<changeSummary create="#/DepartmentType/Employee">
+		<DepartmentType sdo:ref="#/DepartmentType" name="R &amp; D" location="Ouaga, BF" sdo:unset="number Employee employee_ref"/>
+	</changeSummary>
+	<ns1:DepartmentType name="R &amp; D Department" location="Ouaga 01, BF" number="1210">
+		<Employee name="Inoussa OUEDRAOGO" SN="001" manager="1"/>
+		<employee_ref>#/DepartmentType/Employee</employee_ref>
+	</ns1:DepartmentType>
+</sdo:datagraph>
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+	<xsd>
+		<schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+			<xsd:complexType name="DepartmentType">
+				<xsd:sequence>
+					<xsd:element name="Employee" type="tns:Employee" minOccurs="0"/>
+					<xsd:element name="employee_ref" type="xsd:anyURI" minOccurs="0" sdo:propertyType="tns:Employee"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+				</xsd:sequence>
+				<xsd:attribute name="name" type="xsd:string"/>
+				<xsd:attribute name="location" type="xsd:string"/>
+				<xsd:attribute name="number" type="xsd:int"/>
+			</xsd:complexType>
+			<xsd:complexType name="Employee">
+				<xsd:attribute name="name" type="xsd:string"/>
+				<xsd:attribute name="SN" type="xsd:string"/>
+				<xsd:attribute name="manager" type="xsd:boolean"/>
+			</xsd:complexType>
+		</schema>
+	</xsd>
+	<changeSummary create="#/DepartmentType/Employee">
+		<DepartmentType sdo:ref="#/DepartmentType" name="R &amp; D" location="Ouaga, BF" sdo:unset="number Employee employee_ref"/>
+	</changeSummary>
+	<ns1:DepartmentType name="R &amp; D Department" location="Ouaga 01, BF" number="1210">
+		<Employee name="Inoussa OUEDRAOGO" SN="001" manager="1"/>
+		<employee_ref>#/DepartmentType/Employee</employee_ref>
+	</ns1:DepartmentType>
+</sdo:datagraph>

+ 58 - 0
packages/fcl-sdo/tests/files/change_summary_object_delete.xml

@@ -0,0 +1,58 @@
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+	<xsd>
+		<schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+			<xsd:complexType name="DepartmentType">
+				<xsd:sequence>
+					<xsd:element name="Employee" type="tns:Employee" minOccurs="0"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+				</xsd:sequence>
+				<xsd:attribute name="name" type="xsd:string"/>
+				<xsd:attribute name="location" type="xsd:string"/>
+				<xsd:attribute name="number" type="xsd:int"/>
+			</xsd:complexType>
+			<xsd:complexType name="Employee">
+				<xsd:attribute name="name" type="xsd:string"/>
+				<xsd:attribute name="SN" type="xsd:string"/>
+				<xsd:attribute name="manager" type="xsd:boolean"/>
+			</xsd:complexType>
+		</schema>
+	</xsd>
+	<changeSummary delete="#/changeSummary/Employee[0]">
+		<DepartmentType sdo:ref="#/DepartmentType" name="R &amp; D" location="Ouaga, BF" sdo:unset="number">
+			<Employee sdo:ref="#/changeSummary/Employee[0]"/>
+		</DepartmentType>
+		<Employee name="Inoussa O." SN="002" manager="1"/>
+	</changeSummary>
+	<ns1:DepartmentType name="R &amp; D Department" location="Ouaga 01, BF" number="1210">
+		<Employee xsi:nil="true"/>
+	</ns1:DepartmentType>
+</sdo:datagraph>
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+	<xsd>
+		<schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+			<xsd:complexType name="DepartmentType">
+				<xsd:sequence>
+					<xsd:element name="Employee" type="tns:Employee" minOccurs="0"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+				</xsd:sequence>
+				<xsd:attribute name="name" type="xsd:string"/>
+				<xsd:attribute name="location" type="xsd:string"/>
+				<xsd:attribute name="number" type="xsd:int"/>
+			</xsd:complexType>
+			<xsd:complexType name="Employee">
+				<xsd:attribute name="name" type="xsd:string"/>
+				<xsd:attribute name="SN" type="xsd:string"/>
+				<xsd:attribute name="manager" type="xsd:boolean"/>
+			</xsd:complexType>
+		</schema>
+	</xsd>
+	<changeSummary delete="#/changeSummary/Employee[0]">
+		<DepartmentType sdo:ref="#/DepartmentType" name="R &amp; D" location="Ouaga, BF" sdo:unset="number">
+			<Employee sdo:ref="#/changeSummary/Employee[0]"/>
+		</DepartmentType>
+		<Employee name="Inoussa O." SN="002" manager="1"/>
+	</changeSummary>
+	<ns1:DepartmentType name="R &amp; D Department" location="Ouaga 01, BF" number="1210">
+		<Employee xsi:nil="true"/>
+	</ns1:DepartmentType>
+</sdo:datagraph>

+ 94 - 0
packages/fcl-sdo/tests/files/change_summary_object_delete_nested.xml

@@ -0,0 +1,94 @@
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+	<xsd>
+		<schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+			<xsd:complexType name="a">
+				<xsd:sequence>
+					<xsd:element name="p_ab" type="tns:b" minOccurs="0"/>
+					<xsd:element name="p_ac" type="xsd:anyURI" minOccurs="0" sdo:propertyType="tns:c"/>
+					<xsd:element name="p_ad" type="xsd:anyURI" minOccurs="0" sdo:propertyType="tns:d"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+				</xsd:sequence>
+				<xsd:attribute name="p_a_str" type="xsd:string"/>
+			</xsd:complexType>
+			<xsd:complexType name="b">
+				<xsd:sequence>
+					<xsd:element name="p_bc" type="tns:c"  minOccurs="0"/>
+				</xsd:sequence>
+				<xsd:attribute name="p_b_str" type="xsd:string"/>
+			</xsd:complexType>
+			<xsd:complexType name="c">
+				<xsd:sequence>
+					<xsd:element name="p_cd" type="tns:d" minOccurs="0"/>
+				</xsd:sequence>
+				<xsd:attribute name="p_c_str" type="xsd:string"/>
+			</xsd:complexType>
+			<xsd:complexType name="d">
+				<xsd:attribute name="p_d_str" type="xsd:string"/>
+			</xsd:complexType>
+		</schema>
+	</xsd>
+	<changeSummary delete="#/changeSummary/b[0]">
+		<a sdo:ref="#/a">
+			<p_ad>#/changeSummary/b[0]/p_bc/p_cd/</p_ad>
+			<p_ac>#/changeSummary/b[0]/p_bc/</p_ac>
+			<p_ab sdo:ref="#/changeSummary/b[0]"/>
+		</a>
+		<b p_b_str="Inoussa O.">
+			<p_bc p_c_str="azerty">
+				<p_cd p_d_str="D value"/>
+			</p_bc>
+		</b>
+	</changeSummary>
+	<ns1:a p_a_str="sample A' property.">
+		<p_ab xsi:nil="true"/>
+		<p_ac xsi:nil="true"/>
+		<p_ad xsi:nil="true"/>
+	</ns1:a>
+</sdo:datagraph>
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+	<xsd>
+		<schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+			<xsd:complexType name="a">
+				<xsd:sequence>
+					<xsd:element name="p_ab" type="tns:b" minOccurs="0"/>
+					<xsd:element name="p_ac" type="xsd:anyURI" minOccurs="0" sdo:propertyType="tns:c"/>
+					<xsd:element name="p_ad" type="xsd:anyURI" minOccurs="0" sdo:propertyType="tns:d"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+				</xsd:sequence>
+				<xsd:attribute name="p_a_str" type="xsd:string"/>
+			</xsd:complexType>
+			<xsd:complexType name="b">
+				<xsd:sequence>
+					<xsd:element name="p_bc" type="tns:c"  minOccurs="0"/>
+				</xsd:sequence>
+				<xsd:attribute name="p_b_str" type="xsd:string"/>
+			</xsd:complexType>
+			<xsd:complexType name="c">
+				<xsd:sequence>
+					<xsd:element name="p_cd" type="tns:d" minOccurs="0"/>
+				</xsd:sequence>
+				<xsd:attribute name="p_c_str" type="xsd:string"/>
+			</xsd:complexType>
+			<xsd:complexType name="d">
+				<xsd:attribute name="p_d_str" type="xsd:string"/>
+			</xsd:complexType>
+		</schema>
+	</xsd>
+	<changeSummary delete="#/changeSummary/b[0]">
+		<a sdo:ref="#/a">
+			<p_ad>#/changeSummary/b[0]/p_bc/p_cd/</p_ad>
+			<p_ac>#/changeSummary/b[0]/p_bc/</p_ac>
+			<p_ab sdo:ref="#/changeSummary/b[0]"/>
+		</a>
+		<b p_b_str="Inoussa O.">
+			<p_bc p_c_str="azerty">
+				<p_cd p_d_str="D value"/>
+			</p_bc>
+		</b>
+	</changeSummary>
+	<ns1:a p_a_str="sample A' property.">
+		<p_ab xsi:nil="true"/>
+		<p_ac xsi:nil="true"/>
+		<p_ad xsi:nil="true"/>
+	</ns1:a>
+</sdo:datagraph>

+ 56 - 0
packages/fcl-sdo/tests/files/change_summary_object_modify_nested.xml

@@ -0,0 +1,56 @@
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+  <xsd>
+    <schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+      <xsd:complexType name="DepartmentType">
+        <xsd:sequence>
+          <xsd:element name="Employee" type="tns:Employee" minOccurs="0"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string"/>
+        <xsd:attribute name="location" type="xsd:string"/>
+        <xsd:attribute name="number" type="xsd:int"/>
+      </xsd:complexType>
+      <xsd:complexType name="Employee">
+        <xsd:attribute name="name" type="xsd:string"/>
+        <xsd:attribute name="SN" type="xsd:string"/>
+        <xsd:attribute name="manager" type="xsd:boolean"/>
+        <xsd:attribute name="age" type="xsd:byte"/>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <DepartmentType sdo:ref="#/DepartmentType" name="R &amp; D" location="Ouaga, BF"/>
+    <Employee sdo:ref="#/DepartmentType/Employee" name="Inoussa O." SN="002" age="12"/>
+  </changeSummary>
+  <ns1:DepartmentType name="R &amp; D Department" location="Ouaga 01, BF" number="1210">
+    <Employee name="Inoussa OUEDRAOGO" SN="001" manager="1" age="32"/>
+  </ns1:DepartmentType>
+</sdo:datagraph>
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+  <xsd>
+    <schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+      <xsd:complexType name="DepartmentType">
+        <xsd:sequence>
+          <xsd:element name="Employee" type="tns:Employee" minOccurs="0"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string"/>
+        <xsd:attribute name="location" type="xsd:string"/>
+        <xsd:attribute name="number" type="xsd:int"/>
+      </xsd:complexType>
+      <xsd:complexType name="Employee">
+        <xsd:attribute name="name" type="xsd:string"/>
+        <xsd:attribute name="SN" type="xsd:string"/>
+        <xsd:attribute name="manager" type="xsd:boolean"/>
+        <xsd:attribute name="age" type="xsd:byte"/>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <DepartmentType sdo:ref="#/DepartmentType" name="R &amp; D" location="Ouaga, BF"/>
+    <Employee sdo:ref="#/DepartmentType/Employee" name="Inoussa O." SN="002" age="12"/>
+  </changeSummary>
+  <ns1:DepartmentType name="R &amp; D Department" location="Ouaga 01, BF" number="1210">
+    <Employee name="Inoussa OUEDRAOGO" SN="001" manager="1" age="32"/>
+  </ns1:DepartmentType>
+</sdo:datagraph>

+ 4 - 0
packages/fcl-sdo/tests/files/change_summary_short.xml

@@ -0,0 +1,4 @@
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd"><xsd><schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo"><xsd:complexType name="Employee"><xsd:sequence><xsd:element name="changeSummary" type="sdo:ChangeSummary"/></xsd:sequence><xsd:attribute name="sampleProperty" type="xsd:short"/></xsd:complexType></schema>
+	</xsd><changeSummary><Employee sdo:ref="#/Employee" sampleProperty="1592"/></changeSummary><ns1:Employee sampleProperty="-9876"/></sdo:datagraph>
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd"><xsd><schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo"><xsd:complexType name="Employee"><xsd:sequence><xsd:element name="changeSummary" type="sdo:ChangeSummary"/></xsd:sequence><xsd:attribute name="sampleProperty" type="xsd:short"/></xsd:complexType></schema>
+	</xsd><changeSummary><Employee sdo:ref="#/Employee" sampleProperty="1592"/></changeSummary><ns1:Employee sampleProperty="-9876"/></sdo:datagraph>

+ 45 - 0
packages/fcl-sdo/tests/files/change_summary_simple.xml

@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<sdo:datagraph xmlns:ns1="company.xsd" xmlns:sdo="commonj.sdo">
+  <xsd>
+    <schema xmlns:sdo="commonj.sdo" xmlns:tns="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="company.xsd">
+      <xsd:complexType name="Employee">
+        <xsd:sequence>
+          <xsd:element name="name" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="SN" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+        <xsd:attribute name="manager" type="xsd:boolean"/>
+        <xsd:attribute name="age" type="xsd:byte"/>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <Employee age="30" sdo:ref="#/Employee">
+      <name>Inoussa O.</name>
+      <SN>002</SN>
+    </Employee>
+  </changeSummary>
+  <ns1:Employee age="32" manager="1">
+    <name>Inoussa OUEDRAOGO</name>
+    <SN>001</SN>
+  </ns1:Employee>
+</sdo:datagraph>
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+  <xsd>
+    <schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+      <xsd:complexType name="Employee">
+        <xsd:sequence>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string"/>
+        <xsd:attribute name="SN" type="xsd:string"/>
+        <xsd:attribute name="manager" type="xsd:boolean"/>
+        <xsd:attribute name="age" type="xsd:byte"/>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <Employee sdo:ref="#/Employee" name="Inoussa O." SN="002" age="30"/>
+  </changeSummary>
+  <ns1:Employee name="Inoussa OUEDRAOGO" SN="001" manager="1" age="32"/>
+</sdo:datagraph>

+ 32 - 0
packages/fcl-sdo/tests/files/change_summary_string.xml

@@ -0,0 +1,32 @@
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+  <xsd>
+    <schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+      <xsd:complexType name="Employee">
+        <xsd:sequence>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+        <xsd:attribute name="sampleProperty" type="xsd:string"/>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <Employee sdo:ref="#/Employee" sampleProperty="Inoussa.O"/>
+  </changeSummary>
+  <ns1:Employee sampleProperty="sdo.fpc.delphi"/>
+</sdo:datagraph>
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+  <xsd>
+    <schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+      <xsd:complexType name="Employee">
+        <xsd:sequence>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+        <xsd:attribute name="sampleProperty" type="xsd:string"/>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <Employee sdo:ref="#/Employee" sampleProperty="Inoussa.O"/>
+  </changeSummary>
+  <ns1:Employee sampleProperty="sdo.fpc.delphi"/>
+</sdo:datagraph>

+ 64 - 0
packages/fcl-sdo/tests/files/changesummary_object_2_objects_same_type_del_upd.xml

@@ -0,0 +1,64 @@
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+	<xsd>
+		<schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+			<xsd:complexType name="a">
+				<xsd:sequence>
+					<xsd:element name="p_ab1" type="tns:b" minOccurs="0"/>
+					<xsd:element name="p_ab2" type="tns:b" minOccurs="0"/>
+					<xsd:element name="p_ab3" type="tns:b" minOccurs="0"/>
+					<xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+				</xsd:sequence>
+				<xsd:attribute name="p_a_str" type="xsd:string"/>
+			</xsd:complexType>
+			<xsd:complexType name="b">
+				<xsd:attribute name="p_b_str" type="xsd:string"/>
+			</xsd:complexType>
+		</schema>
+	</xsd>
+	<changeSummary delete="#/changeSummary/b[0] #/changeSummary/b[2]">
+		<b p_b_str="p_ab1\p_b_str value"/>
+		<a sdo:ref="#/a">
+			<p_ab1 sdo:ref="#/changeSummary/b[0]"/>
+			<p_ab3 sdo:ref="#/changeSummary/b[2]"/>
+		</a>
+		<b sdo:ref="#/a/p_ab2" p_b_str="p_ab2\p_b_str value before"/>
+		<b p_b_str="p_ab3\p_b_str value"/>
+	</changeSummary>
+	<ns1:a p_a_str="sample A' property.">
+		<p_ab1 xsi:nil="true"/>
+		<p_ab2 p_b_str="p_ab3\p_b_str value after"/>
+		<p_ab3 xsi:nil="true"/>
+	</ns1:a>
+</sdo:datagraph>
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+	<xsd>
+		<schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+			<xsd:complexType name="a">
+				<xsd:sequence>
+					<xsd:element name="p_ab1" type="tns:b" minOccurs="0"/>
+					<xsd:element name="p_ab2" type="tns:b" minOccurs="0"/>
+					<xsd:element name="p_ab3" type="tns:b" minOccurs="0"/>
+					<xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+				</xsd:sequence>
+				<xsd:attribute name="p_a_str" type="xsd:string"/>
+			</xsd:complexType>
+			<xsd:complexType name="b">
+				<xsd:attribute name="p_b_str" type="xsd:string"/>
+			</xsd:complexType>
+		</schema>
+	</xsd>
+	<changeSummary delete="#/changeSummary/b[0] #/changeSummary/b[2]">
+		<b p_b_str="p_ab1\p_b_str value"/>
+		<a sdo:ref="#/a">
+			<p_ab1 sdo:ref="#/changeSummary/b[0]"/>
+			<p_ab3 sdo:ref="#/changeSummary/b[2]"/>
+		</a>
+		<b sdo:ref="#/a/p_ab2" p_b_str="p_ab2\p_b_str value before"/>
+		<b p_b_str="p_ab3\p_b_str value"/>
+	</changeSummary>
+	<ns1:a p_a_str="sample A' property.">
+		<p_ab1 xsi:nil="true"/>
+		<p_ab2 p_b_str="p_ab3\p_b_str value after"/>
+		<p_ab3 xsi:nil="true"/>
+	</ns1:a>
+</sdo:datagraph>

+ 58 - 0
packages/fcl-sdo/tests/files/changesummary_object_delete_2_objects_same_type.xml

@@ -0,0 +1,58 @@
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+	<xsd>
+		<schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+			<xsd:complexType name="a">
+				<xsd:sequence>
+					<xsd:element name="p_ab1" type="tns:b" minOccurs="0"/>
+					<xsd:element name="p_ab2" type="tns:b" minOccurs="0"/>
+					<xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+				</xsd:sequence>
+				<xsd:attribute name="p_a_str" type="xsd:string"/>
+			</xsd:complexType>
+			<xsd:complexType name="b">
+				<xsd:attribute name="p_b_str" type="xsd:string"/>
+			</xsd:complexType>
+		</schema>
+	</xsd>
+	<changeSummary delete="#/changeSummary/b[0] #/changeSummary/b[1]">
+		<b p_b_str="p_ab1\p_b_str value"/>
+		<a sdo:ref="#/a">
+			<p_ab1 sdo:ref="#/changeSummary/b[0]"/>
+			<p_ab2 sdo:ref="#/changeSummary/b[1]"/>
+		</a>
+		<b p_b_str="p_ab2\p_b_str value"/>
+	</changeSummary>
+	<ns1:a p_a_str="sample A' property.">
+		<p_ab1 xsi:nil="true"/>
+		<p_ab2 xsi:nil="true"/>
+	</ns1:a>
+</sdo:datagraph>
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+	<xsd>
+		<schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+			<xsd:complexType name="a">
+				<xsd:sequence>
+					<xsd:element name="p_ab1" type="tns:b" minOccurs="0"/>
+					<xsd:element name="p_ab2" type="tns:b" minOccurs="0"/>
+					<xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+				</xsd:sequence>
+				<xsd:attribute name="p_a_str" type="xsd:string"/>
+			</xsd:complexType>
+			<xsd:complexType name="b">
+				<xsd:attribute name="p_b_str" type="xsd:string"/>
+			</xsd:complexType>
+		</schema>
+	</xsd>
+	<changeSummary delete="#/changeSummary/b[0] #/changeSummary/b[1]">
+		<b p_b_str="p_ab1\p_b_str value"/>
+		<a sdo:ref="#/a">
+			<p_ab1 sdo:ref="#/changeSummary/b[0]"/>
+			<p_ab2 sdo:ref="#/changeSummary/b[1]"/>
+		</a>
+		<b p_b_str="p_ab2\p_b_str value"/>
+	</changeSummary>
+	<ns1:a p_a_str="sample A' property.">
+		<p_ab1 xsi:nil="true"/>
+		<p_ab2 xsi:nil="true"/>
+	</ns1:a>
+</sdo:datagraph>

+ 78 - 0
packages/fcl-sdo/tests/files/changesummary_prop_list_bool.xml

@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="utf-8"?>
+<sdo:datagraph xmlns:ns1="company.xsd" xmlns:sdo="commonj.sdo">
+  <xsd>
+    <schema xmlns:sdo="commonj.sdo" xmlns:tns="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="company.xsd">
+      <xsd:complexType name="DepartmentType">
+        <xsd:sequence>
+          <xsd:element name="name" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="location" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="number" type="xsd:int" minOccurs="0"/>
+          <xsd:element name="list_bool" type="xsd:boolean" maxOccurs="unbounded" minOccurs="0"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <DepartmentType sdo:ref="#/DepartmentType">
+      <name>R &amp; D</name>
+      <location>Ouaga, BF</location>
+      <list_bool>
+        <listChanges kind="change" index="0" dataValues="0"/>
+        <listChanges kind="append" index="3"/>
+        <listChanges kind="append" index="4"/>
+        <listChanges kind="change" index="1" dataValues="1"/>
+        <listChanges kind="delete" index="0" dataValues="1"/>
+        <listChanges kind="delete" index="1" dataValues="0"/>
+        <listChanges kind="insert" index="2"/>
+        <listChanges kind="append" index="4"/>
+      </list_bool>
+    </DepartmentType>
+  </changeSummary>
+  <ns1:DepartmentType>
+    <name>R &amp; D Department</name>
+    <location>Ouaga 01, BF</location>
+    <number>1210</number>
+    <list_bool>0</list_bool>
+    <list_bool>1</list_bool>
+    <list_bool>0</list_bool>
+    <list_bool>1</list_bool>
+    <list_bool>0</list_bool>
+  </ns1:DepartmentType>
+</sdo:datagraph>
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+  <xsd>
+    <schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+      <xsd:complexType name="DepartmentType">
+        <xsd:sequence>
+          <xsd:element name="list_bool" type="xsd:boolean" minOccurs="0" maxOccurs="unbounded"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string"/>
+        <xsd:attribute name="location" type="xsd:string"/>
+        <xsd:attribute name="number" type="xsd:int"/>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <DepartmentType sdo:ref="#/DepartmentType" name="R &amp; D" location="Ouaga, BF">
+      <list_bool>
+        <listChanges index="0" kind="change" dataValues="0"/>
+        <listChanges index="3" kind="append"/>
+        <listChanges index="4" kind="append"/>
+        <listChanges index="1" kind="change" dataValues="1"/>
+        <listChanges index="0" kind="delete" dataValues="1"/>
+        <listChanges index="1" kind="delete" dataValues="0"/>
+        <listChanges index="2" kind="insert"/>
+        <listChanges index="4" kind="append"/>
+      </list_bool>
+    </DepartmentType>
+  </changeSummary>
+  <ns1:DepartmentType name="R &amp; D Department" location="Ouaga 01, BF" number="1210">
+    <list_bool>0</list_bool>
+    <list_bool>1</list_bool>
+    <list_bool>0</list_bool>
+    <list_bool>1</list_bool>
+    <list_bool>0</list_bool>
+  </ns1:DepartmentType>
+</sdo:datagraph>

+ 78 - 0
packages/fcl-sdo/tests/files/changesummary_prop_list_byte.xml

@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="utf-8"?>
+<sdo:datagraph xmlns:ns1="company.xsd" xmlns:sdo="commonj.sdo">
+  <xsd>
+    <schema xmlns:sdo="commonj.sdo" xmlns:tns="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="company.xsd">
+      <xsd:complexType name="DepartmentType">
+        <xsd:sequence>
+          <xsd:element name="name" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="location" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="number" type="xsd:byte" minOccurs="0"/>
+          <xsd:element name="list_byte" type="xsd:byte" maxOccurs="unbounded" minOccurs="0"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <DepartmentType sdo:ref="#/DepartmentType">
+      <name>R &amp; D</name>
+      <location>Ouaga, BF</location>
+      <list_byte>
+        <listChanges kind="change" index="0" dataValues="1"/>
+        <listChanges kind="append" index="3"/>
+        <listChanges kind="append" index="4"/>
+        <listChanges kind="change" index="1" dataValues="2"/>
+        <listChanges kind="delete" index="0" dataValues="10"/>
+        <listChanges kind="delete" index="1" dataValues="3"/>
+        <listChanges kind="insert" index="2"/>
+        <listChanges kind="append" index="4"/>
+      </list_byte>
+    </DepartmentType>
+  </changeSummary>
+  <ns1:DepartmentType>
+    <name>R &amp; D Department</name>
+    <location>Ouaga 01, BF</location>
+    <number>123</number>
+    <list_byte>20</list_byte>
+    <list_byte>123</list_byte>
+    <list_byte>107</list_byte>
+    <list_byte>45</list_byte>
+    <list_byte>89</list_byte>
+  </ns1:DepartmentType>
+</sdo:datagraph>
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+  <xsd>
+    <schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+      <xsd:complexType name="DepartmentType">
+        <xsd:sequence>
+          <xsd:element name="list_byte" type="xsd:byte" minOccurs="0" maxOccurs="unbounded"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string"/>
+        <xsd:attribute name="location" type="xsd:string"/>
+        <xsd:attribute name="number" type="xsd:byte"/>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <DepartmentType sdo:ref="#/DepartmentType" name="R &amp; D" location="Ouaga, BF">
+      <list_byte>
+        <listChanges index="0" kind="change" dataValues="1"/>
+        <listChanges index="3" kind="append"/>
+        <listChanges index="4" kind="append"/>
+        <listChanges index="1" kind="change" dataValues="2"/>
+        <listChanges index="0" kind="delete" dataValues="10"/>
+        <listChanges index="1" kind="delete" dataValues="3"/>
+        <listChanges index="2" kind="insert"/>
+        <listChanges index="4" kind="append"/>
+      </list_byte>
+    </DepartmentType>
+  </changeSummary>
+  <ns1:DepartmentType name="R &amp; D Department" location="Ouaga 01, BF" number="123">
+    <list_byte>20</list_byte>
+    <list_byte>123</list_byte>
+    <list_byte>107</list_byte>
+    <list_byte>45</list_byte>
+    <list_byte>89</list_byte>
+  </ns1:DepartmentType>
+</sdo:datagraph>

+ 78 - 0
packages/fcl-sdo/tests/files/changesummary_prop_list_bytes.xml

@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="utf-8"?>
+<sdo:datagraph xmlns:ns1="company.xsd" xmlns:sdo="commonj.sdo">
+  <xsd>
+    <schema xmlns:sdo="commonj.sdo" xmlns:tns="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="company.xsd">
+      <xsd:complexType name="DepartmentType">
+        <xsd:sequence>
+          <xsd:element name="name" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="location" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="birthDate" type="xsd:dateTime" minOccurs="0"/>
+          <xsd:element name="list_bytes" type="xsd:hexBinary" maxOccurs="unbounded" minOccurs="0"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <DepartmentType sdo:ref="#/DepartmentType">
+      <name>R &amp; D</name>
+      <location>Ouaga, BF</location>
+      <list_bytes>
+        <listChanges kind="change" index="0" dataValues="00010203040506070809"/>
+        <listChanges kind="append" index="3"/>
+        <listChanges kind="append" index="4"/>
+        <listChanges kind="change" index="1" dataValues=""/>
+        <listChanges kind="delete" index="0" dataValues="0104070A0D101316191C1F2225282B2E3134373A3D404346494C4F525558"/>
+        <listChanges kind="delete" index="1" dataValues="0104070A0D101316191C1F2225282B2E3134373A"/>
+        <listChanges kind="insert" index="2"/>
+        <listChanges kind="append" index="4"/>
+      </list_bytes>
+    </DepartmentType>
+  </changeSummary>
+  <ns1:DepartmentType>
+    <name>R &amp; D Department</name>
+    <location>Ouaga 01, BF</location>
+    <birthDate>1899-12-30T00:00:00Z</birthDate>
+    <list_bytes></list_bytes>
+    <list_bytes>0104070A0D101316191C1F2225282B2E3134373A3D404346494C4F5255585B5E6164676A6D707376</list_bytes>
+    <list_bytes>0104070A0D101316191C1F2225282B2E3134373A</list_bytes>
+    <list_bytes>00010203040506070809</list_bytes>
+    <list_bytes>0104070A0D101316191C1F2225282B2E3134373A3D404346494C4F525558</list_bytes>
+  </ns1:DepartmentType>
+</sdo:datagraph>
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+  <xsd>
+    <schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+      <xsd:complexType name="DepartmentType">
+        <xsd:sequence>
+          <xsd:element name="list_bytes" type="xsd:hexBinary" minOccurs="0" maxOccurs="unbounded"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string"/>
+        <xsd:attribute name="location" type="xsd:string"/>
+        <xsd:attribute name="birthDate" type="xsd:dateTime"/>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <DepartmentType sdo:ref="#/DepartmentType" name="R &amp; D" location="Ouaga, BF">
+      <list_bytes>
+        <listChanges index="0" kind="change" dataValues="00010203040506070809"/>
+        <listChanges index="3" kind="append"/>
+        <listChanges index="4" kind="append"/>
+        <listChanges index="1" kind="change" dataValues=""/>
+        <listChanges index="0" kind="delete" dataValues="0104070A0D101316191C1F2225282B2E3134373A3D404346494C4F525558"/>
+        <listChanges index="1" kind="delete" dataValues="0104070A0D101316191C1F2225282B2E3134373A"/>
+        <listChanges index="2" kind="insert"/>
+        <listChanges index="4" kind="append"/>
+      </list_bytes>
+    </DepartmentType>
+  </changeSummary>
+  <ns1:DepartmentType name="R &amp; D Department" location="Ouaga 01, BF" birthDate="1899-12-30T00:00:00Z">
+    <list_bytes></list_bytes>
+    <list_bytes>0104070A0D101316191C1F2225282B2E3134373A3D404346494C4F5255585B5E6164676A6D707376</list_bytes>
+    <list_bytes>0104070A0D101316191C1F2225282B2E3134373A</list_bytes>
+    <list_bytes>00010203040506070809</list_bytes>
+    <list_bytes>0104070A0D101316191C1F2225282B2E3134373A3D404346494C4F525558</list_bytes>
+  </ns1:DepartmentType>
+</sdo:datagraph>

+ 85 - 0
packages/fcl-sdo/tests/files/changesummary_prop_list_char.xml

@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="utf-8"?>
+<sdo:datagraph xmlns:ns1="company.xsd" xmlns:sdo="commonj.sdo">
+  <xsd>
+    <schema xmlns:sdo="commonj.sdo" xmlns:tns="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="company.xsd">
+      <xsd:complexType name="DepartmentType">
+        <xsd:sequence>
+          <xsd:element name="name" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="location" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="number" type="xsd:byte" minOccurs="0"/>
+          <xsd:element name="list_char" type="xsd:string" maxOccurs="unbounded" minOccurs="0" sdo:propertyType="sdo:Character"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <DepartmentType sdo:ref="#/DepartmentType">
+      <name>R &amp; D</name>
+      <location>Ouaga, BF</location>
+      <list_char>
+        <listChanges kind="change" index="0" dataValues="k"/>
+        <listChanges kind="append" index="3"/>
+        <listChanges kind="append" index="4"/>
+        <listChanges kind="change" index="1" dataValues="y"/>
+        <listChanges kind="delete" index="0" dataValues="j"/>
+        <listChanges kind="delete" index="1" dataValues="g"/>
+        <listChanges kind="insert" index="2"/>
+        <listChanges kind="append" index="4"/>
+      </list_char>
+    </DepartmentType>
+  </changeSummary>
+  <ns1:DepartmentType>
+    <name>R &amp; D Department</name>
+    <location>Ouaga 01, BF</location>
+    <number>123</number>
+    <list_char>v</list_char>
+    <list_char>a</list_char>
+    <list_char>A</list_char>
+    <list_char>x</list_char>
+    <list_char>Z</list_char>
+  </ns1:DepartmentType>
+</sdo:datagraph>
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+  <xsd>
+    <schema targetNamespace="company.xsd"
+    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+    xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+      <xsd:complexType name="DepartmentType">
+        <xsd:sequence>
+          <xsd:element name="list_char" type="xsd:string"
+          minOccurs="0" maxOccurs="unbounded"
+          sdo:propertyType="sdo:Character" />
+          <xsd:element name="changeSummary"
+          type="sdo:ChangeSummary" />
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string" />
+        <xsd:attribute name="location" type="xsd:string" />
+        <xsd:attribute name="number" type="xsd:byte" />
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <DepartmentType sdo:ref="#/DepartmentType" name="R &amp; D"
+    location="Ouaga, BF">
+      <list_char>
+        <listChanges index="0" kind="change" dataValues="k" />
+        <listChanges index="3" kind="append" />
+        <listChanges index="4" kind="append" />
+        <listChanges index="1" kind="change" dataValues="y" />
+        <listChanges index="0" kind="delete" dataValues="j" />
+        <listChanges index="1" kind="delete" dataValues="g" />
+        <listChanges index="2" kind="insert" />
+        <listChanges index="4" kind="append" />
+      </list_char>
+    </DepartmentType>
+  </changeSummary>
+  <ns1:DepartmentType name="R &amp; D Department"
+  location="Ouaga 01, BF" number="123">
+    <list_char>v</list_char>
+    <list_char>a</list_char>
+    <list_char>A</list_char>
+    <list_char>x</list_char>
+    <list_char>Z</list_char>
+  </ns1:DepartmentType>
+</sdo:datagraph>

+ 89 - 0
packages/fcl-sdo/tests/files/changesummary_prop_list_currency.xml

@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="utf-8"?>
+<sdo:datagraph xmlns:ns1="company.xsd" xmlns:sdo="commonj.sdo">
+  <xsd>
+    <schema xmlns:sdo="commonj.sdo" xmlns:tns="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="company.xsd">
+      <xsd:complexType name="DepartmentType">
+        <xsd:sequence>
+          <xsd:element name="name" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="location" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="number" type="xsd:byte" minOccurs="0"/>
+          <xsd:element name="list_currency" type="xsd:decimal" maxOccurs="unbounded" minOccurs="0" sdo:propertyType="sdo:Currency"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <DepartmentType sdo:ref="#/DepartmentType">
+      <name>R &amp; D</name>
+      <location>Ouaga, BF</location>
+      <list_currency>
+        <listChanges kind="change" index="0" dataValues="1111111111111.1111"/>
+        <listChanges kind="append" index="3"/>
+        <listChanges kind="append" index="4"/>
+        <listChanges kind="change" index="1" dataValues="-222222222222.2222"/>
+        <listChanges kind="delete" index="0" dataValues="444444444444444.4444"/>
+        <listChanges kind="delete" index="1" dataValues="33333333333333.3333"/>
+        <listChanges kind="insert" index="2"/>
+        <listChanges kind="append" index="4"/>
+      </list_currency>
+    </DepartmentType>
+  </changeSummary>
+  <ns1:DepartmentType>
+    <name>R &amp; D Department</name>
+    <location>Ouaga 01, BF</location>
+    <number>123</number>
+    <list_currency>777777777777777.7777</list_currency>
+    <list_currency>555555555555555.5555</list_currency>
+    <list_currency>8.0000</list_currency>
+    <list_currency>-666666666666666.6666</list_currency>
+    <list_currency>-9.0000</list_currency>
+  </ns1:DepartmentType>
+</sdo:datagraph>
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+  <xsd>
+    <schema targetNamespace="company.xsd"
+    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+    xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+      <xsd:complexType name="DepartmentType">
+        <xsd:sequence>
+          <xsd:element name="list_currency" type="xsd:decimal"
+		  minOccurs="0" maxOccurs="unbounded" 
+          sdo:propertyType="sdo:Currency"/>
+          <xsd:element name="changeSummary"
+          type="sdo:ChangeSummary" />
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string" />
+        <xsd:attribute name="location" type="xsd:string" />
+        <xsd:attribute name="number" type="xsd:byte" />
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <DepartmentType sdo:ref="#/DepartmentType" name="R &amp; D"
+    location="Ouaga, BF">
+      <list_currency>
+        <listChanges index="0" kind="change"
+        dataValues="1111111111111.1111" />
+        <listChanges index="3" kind="append" />
+        <listChanges index="4" kind="append" />
+        <listChanges index="1" kind="change"
+        dataValues="-222222222222.2222" />
+        <listChanges index="0" kind="delete"
+        dataValues="444444444444444.4444" />
+        <listChanges index="1" kind="delete"
+        dataValues="33333333333333.3333" />
+        <listChanges index="2" kind="insert" />
+        <listChanges index="4" kind="append" />
+      </list_currency>
+    </DepartmentType>
+  </changeSummary>
+  <ns1:DepartmentType name="R &amp; D Department"
+  location="Ouaga 01, BF" number="123">
+    <list_currency>777777777777777.7777</list_currency>
+    <list_currency>555555555555555.5555</list_currency>
+    <list_currency>8.0000</list_currency>
+    <list_currency>-666666666666666.6666</list_currency>
+    <list_currency>-9.0000</list_currency>
+  </ns1:DepartmentType>
+</sdo:datagraph>

+ 78 - 0
packages/fcl-sdo/tests/files/changesummary_prop_list_date.xml

@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="utf-8"?>
+<sdo:datagraph xmlns:ns1="company.xsd" xmlns:sdo="commonj.sdo">
+  <xsd>
+    <schema xmlns:sdo="commonj.sdo" xmlns:tns="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="company.xsd">
+      <xsd:complexType name="DepartmentType">
+        <xsd:sequence>
+          <xsd:element name="name" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="location" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="birthDate" type="xsd:dateTime" minOccurs="0"/>
+          <xsd:element name="list_date" type="xsd:dateTime" maxOccurs="unbounded" minOccurs="0"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <DepartmentType sdo:ref="#/DepartmentType">
+      <name>R &amp; D</name>
+      <location>Ouaga, BF</location>
+      <list_date>
+        <listChanges kind="change" index="0" dataValues="1976-10-12T18:28:45.056Z"/>
+        <listChanges kind="append" index="3"/>
+        <listChanges kind="append" index="4"/>
+        <listChanges kind="change" index="1" dataValues="1899-12-30T00:00:00Z"/>
+        <listChanges kind="delete" index="0" dataValues="2009-09-01T01:50:00.001Z"/>
+        <listChanges kind="delete" index="1" dataValues="2008-07-08T08:57:11.012Z"/>
+        <listChanges kind="insert" index="2"/>
+        <listChanges kind="append" index="4"/>
+      </list_date>
+    </DepartmentType>
+  </changeSummary>
+  <ns1:DepartmentType>
+    <name>R &amp; D Department</name>
+    <location>Ouaga 01, BF</location>
+    <birthDate>1976-10-12T18:28:45.056Z</birthDate>
+    <list_date>1899-12-30T00:00:00Z</list_date>
+    <list_date>1900-11-08T00:49:00Z</list_date>
+    <list_date>2008-07-08T08:57:11.012Z</list_date>
+    <list_date>1976-10-12T18:28:45.056Z</list_date>
+    <list_date>2009-09-01T01:50:00.001Z</list_date>
+  </ns1:DepartmentType>
+</sdo:datagraph>
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+  <xsd>
+    <schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+      <xsd:complexType name="DepartmentType">
+        <xsd:sequence>
+          <xsd:element name="list_date" type="xsd:dateTime" minOccurs="0" maxOccurs="unbounded"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string"/>
+        <xsd:attribute name="location" type="xsd:string"/>
+        <xsd:attribute name="birthDate" type="xsd:dateTime"/>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <DepartmentType sdo:ref="#/DepartmentType" name="R &amp; D" location="Ouaga, BF">
+      <list_date>
+        <listChanges index="0" kind="change" dataValues="1976-10-12T18:28:45.056Z"/>
+        <listChanges index="3" kind="append"/>
+        <listChanges index="4" kind="append"/>
+        <listChanges index="1" kind="change" dataValues="1899-12-30T00:00:00Z"/>
+        <listChanges index="0" kind="delete" dataValues="2009-09-01T01:50:00.001Z"/>
+        <listChanges index="1" kind="delete" dataValues="2008-07-08T08:57:11.012Z"/>
+        <listChanges index="2" kind="insert"/>
+        <listChanges index="4" kind="append"/>
+      </list_date>
+    </DepartmentType>
+  </changeSummary>
+  <ns1:DepartmentType name="R &amp; D Department" location="Ouaga 01, BF" birthDate="1976-10-12T18:28:45.056Z">
+    <list_date>1899-12-30T00:00:00Z</list_date>
+    <list_date>1900-11-08T00:49:00Z</list_date>
+    <list_date>2008-07-08T08:57:11.012Z</list_date>
+    <list_date>1976-10-12T18:28:45.056Z</list_date>
+    <list_date>2009-09-01T01:50:00.001Z</list_date>
+  </ns1:DepartmentType>
+</sdo:datagraph>

+ 78 - 0
packages/fcl-sdo/tests/files/changesummary_prop_list_double.xml

@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="utf-8"?>
+<sdo:datagraph xmlns:ns1="company.xsd" xmlns:sdo="commonj.sdo">
+  <xsd>
+    <schema xmlns:sdo="commonj.sdo" xmlns:tns="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="company.xsd">
+      <xsd:complexType name="DepartmentType">
+        <xsd:sequence>
+          <xsd:element name="name" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="location" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="number" type="xsd:byte" minOccurs="0"/>
+          <xsd:element name="list_double" type="xsd:double" maxOccurs="unbounded" minOccurs="0"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <DepartmentType sdo:ref="#/DepartmentType">
+      <name>R &amp; D</name>
+      <location>Ouaga, BF</location>
+      <list_double>
+        <listChanges kind="change" index="0" dataValues="111111111"/>
+        <listChanges kind="append" index="3"/>
+        <listChanges kind="append" index="4"/>
+        <listChanges kind="change" index="1" dataValues="-22222222"/>
+        <listChanges kind="delete" index="0" dataValues="44444444"/>
+        <listChanges kind="delete" index="1" dataValues="3333333333"/>
+        <listChanges kind="insert" index="2"/>
+        <listChanges kind="append" index="4"/>
+      </list_double>
+    </DepartmentType>
+  </changeSummary>
+  <ns1:DepartmentType>
+    <name>R &amp; D Department</name>
+    <location>Ouaga 01, BF</location>
+    <number>123</number>
+    <list_double>777777777</list_double>
+    <list_double>555555555</list_double>
+    <list_double>8</list_double>
+    <list_double>-666666666</list_double>
+    <list_double>-9</list_double>
+  </ns1:DepartmentType>
+</sdo:datagraph>
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+  <xsd>
+    <schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+      <xsd:complexType name="DepartmentType">
+        <xsd:sequence>
+          <xsd:element name="list_double" type="xsd:double" minOccurs="0" maxOccurs="unbounded"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string"/>
+        <xsd:attribute name="location" type="xsd:string"/>
+        <xsd:attribute name="number" type="xsd:byte"/>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <DepartmentType sdo:ref="#/DepartmentType" name="R &amp; D" location="Ouaga, BF">
+      <list_double>
+        <listChanges index="0" kind="change" dataValues="111111111"/>
+        <listChanges index="3" kind="append"/>
+        <listChanges index="4" kind="append"/>
+        <listChanges index="1" kind="change" dataValues="-22222222"/>
+        <listChanges index="0" kind="delete" dataValues="44444444"/>
+        <listChanges index="1" kind="delete" dataValues="3333333333"/>
+        <listChanges index="2" kind="insert"/>
+        <listChanges index="4" kind="append"/>
+      </list_double>
+    </DepartmentType>
+  </changeSummary>
+  <ns1:DepartmentType name="R &amp; D Department" location="Ouaga 01, BF" number="123">
+    <list_double>777777777</list_double>
+    <list_double>555555555</list_double>
+    <list_double>8</list_double>
+    <list_double>-666666666</list_double>
+    <list_double>-9</list_double>
+  </ns1:DepartmentType>
+</sdo:datagraph>

+ 78 - 0
packages/fcl-sdo/tests/files/changesummary_prop_list_float.xml

@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="utf-8"?>
+<sdo:datagraph xmlns:ns1="company.xsd" xmlns:sdo="commonj.sdo">
+  <xsd>
+    <schema xmlns:sdo="commonj.sdo" xmlns:tns="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="company.xsd">
+      <xsd:complexType name="DepartmentType">
+        <xsd:sequence>
+          <xsd:element name="name" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="location" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="number" type="xsd:byte" minOccurs="0"/>
+          <xsd:element name="list_float" type="xsd:float" maxOccurs="unbounded" minOccurs="0"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <DepartmentType sdo:ref="#/DepartmentType">
+      <name>R &amp; D</name>
+      <location>Ouaga, BF</location>
+      <list_float>
+        <listChanges kind="change" index="0" dataValues="111111112"/>
+        <listChanges kind="append" index="3"/>
+        <listChanges kind="append" index="4"/>
+        <listChanges kind="change" index="1" dataValues="-222222224"/>
+        <listChanges kind="delete" index="0" dataValues="444444448"/>
+        <listChanges kind="delete" index="1" dataValues="333333344"/>
+        <listChanges kind="insert" index="2"/>
+        <listChanges kind="append" index="4"/>
+      </list_float>
+    </DepartmentType>
+  </changeSummary>
+  <ns1:DepartmentType>
+    <name>R &amp; D Department</name>
+    <location>Ouaga 01, BF</location>
+    <number>123</number>
+    <list_float>777777792</list_float>
+    <list_float>5555555328</list_float>
+    <list_float>8</list_float>
+    <list_float>-6666666496</list_float>
+    <list_float>-9</list_float>
+  </ns1:DepartmentType>
+</sdo:datagraph>
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+  <xsd>
+    <schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+      <xsd:complexType name="DepartmentType">
+        <xsd:sequence>
+          <xsd:element name="list_float" type="xsd:float" minOccurs="0" maxOccurs="unbounded"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string"/>
+        <xsd:attribute name="location" type="xsd:string"/>
+        <xsd:attribute name="number" type="xsd:byte"/>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <DepartmentType sdo:ref="#/DepartmentType" name="R &amp; D" location="Ouaga, BF">
+      <list_float>
+        <listChanges index="0" kind="change" dataValues="111111112"/>
+        <listChanges index="3" kind="append"/>
+        <listChanges index="4" kind="append"/>
+        <listChanges index="1" kind="change" dataValues="-222222224"/>
+        <listChanges index="0" kind="delete" dataValues="444444448"/>
+        <listChanges index="1" kind="delete" dataValues="333333344"/>
+        <listChanges index="2" kind="insert"/>
+        <listChanges index="4" kind="append"/>
+      </list_float>
+    </DepartmentType>
+  </changeSummary>
+  <ns1:DepartmentType name="R &amp; D Department" location="Ouaga 01, BF" number="123">
+    <list_float>777777792</list_float>
+    <list_float>5555555328</list_float>
+    <list_float>8</list_float>
+    <list_float>-6666666496</list_float>
+    <list_float>-9</list_float>
+  </ns1:DepartmentType>
+</sdo:datagraph>

+ 78 - 0
packages/fcl-sdo/tests/files/changesummary_prop_list_integer.xml

@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="utf-8"?>
+<sdo:datagraph xmlns:ns1="company.xsd" xmlns:sdo="commonj.sdo">
+  <xsd>
+    <schema xmlns:sdo="commonj.sdo" xmlns:tns="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="company.xsd">
+      <xsd:complexType name="DepartmentType">
+        <xsd:sequence>
+          <xsd:element name="name" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="location" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="number" type="xsd:int" minOccurs="0"/>
+          <xsd:element name="list_int" type="xsd:int" maxOccurs="unbounded" minOccurs="0"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <DepartmentType sdo:ref="#/DepartmentType">
+      <name>R &amp; D</name>
+      <location>Ouaga, BF</location>
+      <list_int>
+        <listChanges kind="change" index="0" dataValues="1"/>
+        <listChanges kind="append" index="3"/>
+        <listChanges kind="append" index="4"/>
+        <listChanges kind="change" index="1" dataValues="2"/>
+        <listChanges kind="delete" index="0" dataValues="10"/>
+        <listChanges kind="delete" index="1" dataValues="3"/>
+        <listChanges kind="insert" index="2"/>
+        <listChanges kind="append" index="4"/>
+      </list_int>
+    </DepartmentType>
+  </changeSummary>
+  <ns1:DepartmentType>
+    <name>R &amp; D Department</name>
+    <location>Ouaga 01, BF</location>
+    <number>1210</number>
+    <list_int>20</list_int>
+    <list_int>123</list_int>
+    <list_int>1076</list_int>
+    <list_int>456</list_int>
+    <list_int>789</list_int>
+  </ns1:DepartmentType>
+</sdo:datagraph>
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+	<xsd>
+		<schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+			<xsd:complexType name="DepartmentType">
+				<xsd:sequence>
+					<xsd:element name="list_int" type="xsd:int" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+				</xsd:sequence>
+				<xsd:attribute name="name" type="xsd:string"/>
+				<xsd:attribute name="location" type="xsd:string"/>
+				<xsd:attribute name="number" type="xsd:int"/>
+			</xsd:complexType>
+		</schema>
+	</xsd>
+	<changeSummary>
+		<DepartmentType sdo:ref="#/DepartmentType" name="R &amp; D" location="Ouaga, BF">
+			<list_int>
+				<listChanges index="0" kind="change" dataValues="1"/>
+				<listChanges index="3" kind="append"/>
+				<listChanges index="4" kind="append"/>
+				<listChanges index="1" kind="change" dataValues="2"/>
+				<listChanges index="0" kind="delete" dataValues="10"/>
+				<listChanges index="1" kind="delete" dataValues="3"/>
+				<listChanges index="2" kind="insert"/>
+				<listChanges index="4" kind="append"/>
+			</list_int>
+		</DepartmentType>
+	</changeSummary>
+	<ns1:DepartmentType name="R &amp; D Department" location="Ouaga 01, BF" number="1210">
+		<list_int>20</list_int>
+		<list_int>123</list_int>
+		<list_int>1076</list_int>
+		<list_int>456</list_int>
+		<list_int>789</list_int>
+	</ns1:DepartmentType>
+</sdo:datagraph>

+ 78 - 0
packages/fcl-sdo/tests/files/changesummary_prop_list_long.xml

@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="utf-8"?>
+<sdo:datagraph xmlns:ns1="company.xsd" xmlns:sdo="commonj.sdo">
+  <xsd>
+    <schema xmlns:sdo="commonj.sdo" xmlns:tns="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="company.xsd">
+      <xsd:complexType name="DepartmentType">
+        <xsd:sequence>
+          <xsd:element name="name" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="location" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="number" type="xsd:byte" minOccurs="0"/>
+          <xsd:element name="list_long" type="xsd:long" maxOccurs="unbounded" minOccurs="0"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <DepartmentType sdo:ref="#/DepartmentType">
+      <name>R &amp; D</name>
+      <location>Ouaga, BF</location>
+      <list_long>
+        <listChanges kind="change" index="0" dataValues="11111111111111111"/>
+        <listChanges kind="append" index="3"/>
+        <listChanges kind="append" index="4"/>
+        <listChanges kind="change" index="1" dataValues="-2222222222222222"/>
+        <listChanges kind="delete" index="0" dataValues="4444444444444444444"/>
+        <listChanges kind="delete" index="1" dataValues="333333333333333333"/>
+        <listChanges kind="insert" index="2"/>
+        <listChanges kind="append" index="4"/>
+      </list_long>
+    </DepartmentType>
+  </changeSummary>
+  <ns1:DepartmentType>
+    <name>R &amp; D Department</name>
+    <location>Ouaga 01, BF</location>
+    <number>123</number>
+    <list_long>7777777777777777777</list_long>
+    <list_long>5555555555555555555</list_long>
+    <list_long>8</list_long>
+    <list_long>-6666666666666666666</list_long>
+    <list_long>-9</list_long>
+  </ns1:DepartmentType>
+</sdo:datagraph>
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+  <xsd>
+    <schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+      <xsd:complexType name="DepartmentType">
+        <xsd:sequence>
+          <xsd:element name="list_long" type="xsd:long" minOccurs="0" maxOccurs="unbounded"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string"/>
+        <xsd:attribute name="location" type="xsd:string"/>
+        <xsd:attribute name="number" type="xsd:byte"/>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <DepartmentType sdo:ref="#/DepartmentType" name="R &amp; D" location="Ouaga, BF">
+      <list_long>
+        <listChanges index="0" kind="change" dataValues="11111111111111111"/>
+        <listChanges index="3" kind="append"/>
+        <listChanges index="4" kind="append"/>
+        <listChanges index="1" kind="change" dataValues="-2222222222222222"/>
+        <listChanges index="0" kind="delete" dataValues="4444444444444444444"/>
+        <listChanges index="1" kind="delete" dataValues="333333333333333333"/>
+        <listChanges index="2" kind="insert"/>
+        <listChanges index="4" kind="append"/>
+      </list_long>
+    </DepartmentType>
+  </changeSummary>
+  <ns1:DepartmentType name="R &amp; D Department" location="Ouaga 01, BF" number="123">
+    <list_long>7777777777777777777</list_long>
+    <list_long>5555555555555555555</list_long>
+    <list_long>8</list_long>
+    <list_long>-6666666666666666666</list_long>
+    <list_long>-9</list_long>
+  </ns1:DepartmentType>
+</sdo:datagraph>

+ 144 - 0
packages/fcl-sdo/tests/files/changesummary_prop_list_object.xml

@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="utf-8"?>
+<sdo:datagraph xmlns:ns1="company.xsd" xmlns:sdo="commonj.sdo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <xsd>
+    <schema xmlns:sdo="commonj.sdo" xmlns:tns="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="company.xsd">
+      <xsd:complexType name="EmployeeType">
+        <xsd:sequence>
+          <xsd:element name="name" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="SN" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="manager" type="xsd:boolean" minOccurs="0"/>
+        </xsd:sequence>
+      </xsd:complexType>
+      <xsd:complexType name="DepartmentType">
+        <xsd:sequence>
+          <xsd:element name="name" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="location" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="number" type="xsd:int" minOccurs="0"/>
+          <xsd:element name="list_object" type="tns:EmployeeType" maxOccurs="unbounded" minOccurs="0"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary create="#/DepartmentType/list_object[2] #/DepartmentType/list_object[1] #/DepartmentType/list_object[3] #/DepartmentType/list_object[0] #/DepartmentType/list_object[4]" delete="#/changeSummary/EmployeeType[0] #/changeSummary/EmployeeType[1] #/changeSummary/EmployeeType[2]">
+    <DepartmentType sdo:ref="#/DepartmentType">
+      <name>R &amp; D</name>
+      <location>Ouaga, BF</location>
+      <list_object>
+        <listChanges kind="change" index="0">
+          <dataValues sdo:ref="#/changeSummary/EmployeeType[0]"/>
+        </listChanges>
+        <listChanges kind="append" index="3"/>
+        <listChanges kind="insert" index="3"/>
+        <listChanges kind="append" index="5"/>
+        <listChanges kind="change" index="1">
+          <dataValues sdo:ref="#/changeSummary/EmployeeType[1]"/>
+        </listChanges>
+        <listChanges kind="delete" index="0">
+          <dataValues xsi:nil="true"/>
+        </listChanges>
+        <listChanges kind="delete" index="1">
+          <dataValues sdo:ref="#/changeSummary/EmployeeType[2]"/>
+        </listChanges>
+        <listChanges kind="append" index="4"/>
+      </list_object>
+    </DepartmentType>
+    <EmployeeType>
+      <name>Inoussa O.</name>
+      <SN>0001</SN>
+      <manager>1</manager>
+    </EmployeeType>
+    <EmployeeType>
+      <name>Kis O.</name>
+      <SN>0002</SN>
+      <manager>0</manager>
+    </EmployeeType>
+    <EmployeeType>
+      <name>WST</name>
+      <SN>0003</SN>
+      <manager>0</manager>
+    </EmployeeType>
+  </changeSummary>
+  <ns1:DepartmentType>
+    <name>R &amp; D Department</name>
+    <location>Ouaga 01, BF</location>
+    <number>1210</number>
+    <list_object>
+      <name>Lazarus</name>
+      <SN>0011</SN>
+      <manager>0</manager>
+    </list_object>
+    <list_object>
+      <name>FPC 5</name>
+      <SN>0050</SN>
+      <manager>0</manager>
+    </list_object>
+    <list_object>
+      <name>FPC 2 </name>
+      <SN>0020</SN>
+      <manager>1</manager>
+    </list_object>
+    <list_object>
+      <name>FPC 3</name>
+      <SN>0030</SN>
+      <manager>0</manager>
+    </list_object>
+    <list_object>
+      <name>FPC 4</name>
+      <SN>0040</SN>
+      <manager>1</manager>
+    </list_object>
+  </ns1:DepartmentType>
+</sdo:datagraph>
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns1="company.xsd">
+  <xsd>
+    <schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+      <xsd:complexType name="EmployeeType">
+        <xsd:attribute name="name" type="xsd:string"/>
+        <xsd:attribute name="SN" type="xsd:string"/>
+        <xsd:attribute name="manager" type="xsd:boolean"/>
+      </xsd:complexType>
+      <xsd:complexType name="DepartmentType">
+        <xsd:sequence>
+          <xsd:element name="list_object" type="tns:EmployeeType" minOccurs="0" maxOccurs="unbounded"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string"/>
+        <xsd:attribute name="location" type="xsd:string"/>
+        <xsd:attribute name="number" type="xsd:int"/>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary create="#/DepartmentType/list_object[2] #/DepartmentType/list_object[1] #/DepartmentType/list_object[3] #/DepartmentType/list_object[0] #/DepartmentType/list_object[4]" delete="#/changeSummary/EmployeeType[0] #/changeSummary/EmployeeType[1] #/changeSummary/EmployeeType[2]">
+    <DepartmentType sdo:ref="#/DepartmentType" name="R &amp; D" location="Ouaga, BF">
+      <list_object>
+        <listChanges index="0" kind="change">
+          <dataValues sdo:ref="#/changeSummary/EmployeeType[0]"/>
+        </listChanges>
+        <listChanges index="3" kind="append"/>
+        <listChanges index="3" kind="insert"/>
+        <listChanges index="5" kind="append"/>
+        <listChanges index="1" kind="change">
+          <dataValues sdo:ref="#/changeSummary/EmployeeType[1]"/>
+        </listChanges>
+        <listChanges index="0" kind="delete">
+          <dataValues xsi:nil="true"/>
+        </listChanges>
+        <listChanges index="1" kind="delete">
+          <dataValues sdo:ref="#/changeSummary/EmployeeType[2]"/>
+        </listChanges>
+        <listChanges index="4" kind="append"/>
+      </list_object>
+    </DepartmentType>
+    <EmployeeType name="Inoussa O." SN="0001" manager="1"/>
+    <EmployeeType name="Kis O." SN="0002" manager="0"/>
+    <EmployeeType name="WST" SN="0003" manager="0"/>
+  </changeSummary>
+  <ns1:DepartmentType name="R &amp; D Department" location="Ouaga 01, BF" number="1210">
+    <list_object name="Lazarus" SN="0011" manager="0"/>
+    <list_object name="FPC 5" SN="0050" manager="0"/>
+    <list_object name="FPC 2 " SN="0020" manager="1"/>
+    <list_object name="FPC 3" SN="0030" manager="0"/>
+    <list_object name="FPC 4" SN="0040" manager="1"/>
+  </ns1:DepartmentType>
+</sdo:datagraph>

+ 234 - 0
packages/fcl-sdo/tests/files/changesummary_prop_list_object_nested.xml

@@ -0,0 +1,234 @@
+<?xml version="1.0" encoding="utf-8"?>
+<sdo:datagraph xmlns:ns1="company.xsd" xmlns:sdo="commonj.sdo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <xsd>
+    <schema xmlns:sdo="commonj.sdo" xmlns:tns="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="company.xsd">
+      <xsd:complexType name="job">
+        <xsd:sequence>
+          <xsd:element name="title" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="MaxEmployeeCount" type="xsd:byte" minOccurs="0"/>
+        </xsd:sequence>
+      </xsd:complexType>
+      <xsd:complexType name="EmployeeType">
+        <xsd:sequence>
+          <xsd:element name="name" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="SN" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="manager" type="xsd:boolean" minOccurs="0"/>
+          <xsd:element name="jobs" type="tns:job" maxOccurs="unbounded" minOccurs="0"/>
+        </xsd:sequence>
+      </xsd:complexType>
+      <xsd:complexType name="DepartmentType">
+        <xsd:sequence>
+          <xsd:element name="name" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="location" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="number" type="xsd:int" minOccurs="0"/>
+          <xsd:element name="list_object" type="tns:EmployeeType" maxOccurs="unbounded" minOccurs="0"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary create="#/DepartmentType/list_object[2] #/DepartmentType/list_object[1] #/DepartmentType/list_object[3] #/DepartmentType/list_object[0] #/DepartmentType/list_object[4]" delete="#/changeSummary/EmployeeType[0] #/changeSummary/EmployeeType[1] #/changeSummary/EmployeeType[2]">
+    <DepartmentType sdo:ref="#/DepartmentType">
+      <name>R &amp; D</name>
+      <location>Ouaga, BF</location>
+      <list_object>
+        <listChanges kind="change" index="0">
+          <dataValues sdo:ref="#/changeSummary/EmployeeType[0]"/>
+        </listChanges>
+        <listChanges kind="append" index="3"/>
+        <listChanges kind="insert" index="3"/>
+        <listChanges kind="append" index="5"/>
+        <listChanges kind="change" index="1">
+          <dataValues sdo:ref="#/changeSummary/EmployeeType[1]"/>
+        </listChanges>
+        <listChanges kind="delete" index="0">
+          <dataValues xsi:nil="true"/>
+        </listChanges>
+        <listChanges kind="delete" index="1">
+          <dataValues sdo:ref="#/changeSummary/EmployeeType[2]"/>
+        </listChanges>
+        <listChanges kind="append" index="4"/>
+      </list_object>
+    </DepartmentType>
+    <EmployeeType>
+      <name>Inoussa O.</name>
+      <SN>0001</SN>
+      <manager>1</manager>
+      <jobs>
+        <title>Inoussa O.'s job #0</title>
+        <MaxEmployeeCount>0</MaxEmployeeCount>
+      </jobs>
+      <jobs>
+        <title>Inoussa O.'s job #1</title>
+        <MaxEmployeeCount>3</MaxEmployeeCount>
+      </jobs>
+      <jobs>
+        <title>Inoussa O.'s job #2</title>
+        <MaxEmployeeCount>6</MaxEmployeeCount>
+      </jobs>
+    </EmployeeType>
+    <EmployeeType>
+      <name>Kis O.</name>
+      <SN>0002</SN>
+      <manager>0</manager>
+      <jobs>
+        <title>Kis O.'s job #0</title>
+        <MaxEmployeeCount>0</MaxEmployeeCount>
+      </jobs>
+      <jobs>
+        <title>Kis O.'s job #1</title>
+        <MaxEmployeeCount>2</MaxEmployeeCount>
+      </jobs>
+    </EmployeeType>
+    <EmployeeType>
+      <name>WST</name>
+      <SN>0003</SN>
+      <manager>0</manager>
+      <jobs>
+        <title>WST's job #0</title>
+        <MaxEmployeeCount>0</MaxEmployeeCount>
+      </jobs>
+      <jobs>
+        <title>WST's job #1</title>
+        <MaxEmployeeCount>4</MaxEmployeeCount>
+      </jobs>
+      <jobs>
+        <title>WST's job #2</title>
+        <MaxEmployeeCount>8</MaxEmployeeCount>
+      </jobs>
+      <jobs>
+        <title>WST's job #3</title>
+        <MaxEmployeeCount>12</MaxEmployeeCount>
+      </jobs>
+    </EmployeeType>
+  </changeSummary>
+  <ns1:DepartmentType>
+    <name>R &amp; D Department</name>
+    <location>Ouaga 01, BF</location>
+    <number>1210</number>
+    <list_object>
+      <name>Lazarus</name>
+      <SN>0011</SN>
+      <manager>0</manager>
+      <jobs>
+        <title>Lazarus's job #0</title>
+        <MaxEmployeeCount>0</MaxEmployeeCount>
+      </jobs>
+      <jobs>
+        <title>Lazarus's job #1</title>
+        <MaxEmployeeCount>3</MaxEmployeeCount>
+      </jobs>
+      <jobs>
+        <title>Lazarus's job #2</title>
+        <MaxEmployeeCount>6</MaxEmployeeCount>
+      </jobs>
+    </list_object>
+    <list_object>
+      <name>FPC 5</name>
+      <SN>0050</SN>
+      <manager>0</manager>
+      <jobs>
+        <title>FPC 5's job #0</title>
+        <MaxEmployeeCount>0</MaxEmployeeCount>
+      </jobs>
+    </list_object>
+    <list_object>
+      <name>FPC 2 </name>
+      <SN>0020</SN>
+      <manager>1</manager>
+    </list_object>
+    <list_object>
+      <name>FPC 3</name>
+      <SN>0030</SN>
+      <manager>0</manager>
+    </list_object>
+    <list_object>
+      <name>FPC 4</name>
+      <SN>0040</SN>
+      <manager>1</manager>
+      <jobs>
+        <title>FPC 4's job #0</title>
+        <MaxEmployeeCount>0</MaxEmployeeCount>
+      </jobs>
+    </list_object>
+  </ns1:DepartmentType>
+</sdo:datagraph>
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns1="company.xsd">
+  <xsd>
+    <schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+      <xsd:complexType name="job">
+        <xsd:attribute name="title" type="xsd:string"/>
+        <xsd:attribute name="MaxEmployeeCount" type="xsd:byte"/>
+      </xsd:complexType>
+      <xsd:complexType name="EmployeeType">
+        <xsd:sequence>
+          <xsd:element name="jobs" type="tns:job" minOccurs="0" maxOccurs="unbounded"/>
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string"/>
+        <xsd:attribute name="SN" type="xsd:string"/>
+        <xsd:attribute name="manager" type="xsd:boolean"/>
+      </xsd:complexType>
+      <xsd:complexType name="DepartmentType">
+        <xsd:sequence>
+          <xsd:element name="list_object" type="tns:EmployeeType" minOccurs="0" maxOccurs="unbounded"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string"/>
+        <xsd:attribute name="location" type="xsd:string"/>
+        <xsd:attribute name="number" type="xsd:int"/>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary create="#/DepartmentType/list_object[2] #/DepartmentType/list_object[1] #/DepartmentType/list_object[3] #/DepartmentType/list_object[0] #/DepartmentType/list_object[4]" delete="#/changeSummary/EmployeeType[0] #/changeSummary/EmployeeType[1] #/changeSummary/EmployeeType[2]">
+    <DepartmentType sdo:ref="#/DepartmentType" name="R &amp; D" location="Ouaga, BF">
+      <list_object>
+        <listChanges index="0" kind="change">
+          <dataValues sdo:ref="#/changeSummary/EmployeeType[0]"/>
+        </listChanges>
+        <listChanges index="3" kind="append"/>
+        <listChanges index="3" kind="insert"/>
+        <listChanges index="5" kind="append"/>
+        <listChanges index="1" kind="change">
+          <dataValues sdo:ref="#/changeSummary/EmployeeType[1]"/>
+        </listChanges>
+        <listChanges index="0" kind="delete">
+          <dataValues xsi:nil="true"/>
+        </listChanges>
+        <listChanges index="1" kind="delete">
+          <dataValues sdo:ref="#/changeSummary/EmployeeType[2]"/>
+        </listChanges>
+        <listChanges index="4" kind="append"/>
+      </list_object>
+    </DepartmentType>
+    <EmployeeType name="Inoussa O." SN="0001" manager="1">
+      <jobs title="Inoussa O.'s job #0" MaxEmployeeCount="0"/>
+      <jobs title="Inoussa O.'s job #1" MaxEmployeeCount="3"/>
+      <jobs title="Inoussa O.'s job #2" MaxEmployeeCount="6"/>
+    </EmployeeType>
+    <EmployeeType name="Kis O." SN="0002" manager="0">
+      <jobs title="Kis O.'s job #0" MaxEmployeeCount="0"/>
+      <jobs title="Kis O.'s job #1" MaxEmployeeCount="2"/>
+    </EmployeeType>
+    <EmployeeType name="WST" SN="0003" manager="0">
+      <jobs title="WST's job #0" MaxEmployeeCount="0"/>
+      <jobs title="WST's job #1" MaxEmployeeCount="4"/>
+      <jobs title="WST's job #2" MaxEmployeeCount="8"/>
+      <jobs title="WST's job #3" MaxEmployeeCount="12"/>
+    </EmployeeType>
+  </changeSummary>
+  <ns1:DepartmentType name="R &amp; D Department" location="Ouaga 01, BF" number="1210">
+    <list_object name="Lazarus" SN="0011" manager="0">
+      <jobs title="Lazarus's job #0" MaxEmployeeCount="0"/>
+      <jobs title="Lazarus's job #1" MaxEmployeeCount="3"/>
+      <jobs title="Lazarus's job #2" MaxEmployeeCount="6"/>
+    </list_object>
+    <list_object name="FPC 5" SN="0050" manager="0">
+      <jobs title="FPC 5's job #0" MaxEmployeeCount="0"/>
+    </list_object>
+    <list_object name="FPC 2 " SN="0020" manager="1"/>
+    <list_object name="FPC 3" SN="0030" manager="0"/>
+    <list_object name="FPC 4" SN="0040" manager="1">
+      <jobs title="FPC 4's job #0" MaxEmployeeCount="0"/>
+    </list_object>
+  </ns1:DepartmentType>
+</sdo:datagraph>

+ 78 - 0
packages/fcl-sdo/tests/files/changesummary_prop_list_short.xml

@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="utf-8"?>
+<sdo:datagraph xmlns:ns1="company.xsd" xmlns:sdo="commonj.sdo">
+  <xsd>
+    <schema xmlns:sdo="commonj.sdo" xmlns:tns="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="company.xsd">
+      <xsd:complexType name="DepartmentType">
+        <xsd:sequence>
+          <xsd:element name="name" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="location" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="number" type="xsd:byte" minOccurs="0"/>
+          <xsd:element name="list_short" type="xsd:short" maxOccurs="unbounded" minOccurs="0"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <DepartmentType sdo:ref="#/DepartmentType">
+      <name>R &amp; D</name>
+      <location>Ouaga, BF</location>
+      <list_short>
+        <listChanges kind="change" index="0" dataValues="1"/>
+        <listChanges kind="append" index="3"/>
+        <listChanges kind="append" index="4"/>
+        <listChanges kind="change" index="1" dataValues="2"/>
+        <listChanges kind="delete" index="0" dataValues="10"/>
+        <listChanges kind="delete" index="1" dataValues="3"/>
+        <listChanges kind="insert" index="2"/>
+        <listChanges kind="append" index="4"/>
+      </list_short>
+    </DepartmentType>
+  </changeSummary>
+  <ns1:DepartmentType>
+    <name>R &amp; D Department</name>
+    <location>Ouaga 01, BF</location>
+    <number>123</number>
+    <list_short>20</list_short>
+    <list_short>12345</list_short>
+    <list_short>107</list_short>
+    <list_short>-5245</list_short>
+    <list_short>89</list_short>
+  </ns1:DepartmentType>
+</sdo:datagraph>
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+  <xsd>
+    <schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+      <xsd:complexType name="DepartmentType">
+        <xsd:sequence>
+          <xsd:element name="list_short" type="xsd:short" minOccurs="0" maxOccurs="unbounded"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string"/>
+        <xsd:attribute name="location" type="xsd:string"/>
+        <xsd:attribute name="number" type="xsd:byte"/>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <DepartmentType sdo:ref="#/DepartmentType" name="R &amp; D" location="Ouaga, BF">
+      <list_short>
+        <listChanges index="0" kind="change" dataValues="1"/>
+        <listChanges index="3" kind="append"/>
+        <listChanges index="4" kind="append"/>
+        <listChanges index="1" kind="change" dataValues="2"/>
+        <listChanges index="0" kind="delete" dataValues="10"/>
+        <listChanges index="1" kind="delete" dataValues="3"/>
+        <listChanges index="2" kind="insert"/>
+        <listChanges index="4" kind="append"/>
+      </list_short>
+    </DepartmentType>
+  </changeSummary>
+  <ns1:DepartmentType name="R &amp; D Department" location="Ouaga 01, BF" number="123">
+    <list_short>20</list_short>
+    <list_short>12345</list_short>
+    <list_short>107</list_short>
+    <list_short>-5245</list_short>
+    <list_short>89</list_short>
+  </ns1:DepartmentType>
+</sdo:datagraph>

+ 78 - 0
packages/fcl-sdo/tests/files/changesummary_prop_list_string.xml

@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="utf-8"?>
+<sdo:datagraph xmlns:ns1="company.xsd" xmlns:sdo="commonj.sdo">
+  <xsd>
+    <schema xmlns:sdo="commonj.sdo" xmlns:tns="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="company.xsd">
+      <xsd:complexType name="DepartmentType">
+        <xsd:sequence>
+          <xsd:element name="name" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="location" type="xsd:string" minOccurs="0"/>
+          <xsd:element name="number" type="xsd:int" minOccurs="0"/>
+          <xsd:element name="list_string" type="xsd:string" maxOccurs="unbounded" minOccurs="0"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+        </xsd:sequence>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary>
+    <DepartmentType sdo:ref="#/DepartmentType">
+      <name>R &amp; D</name>
+      <location>Ouaga, BF</location>
+      <list_string>
+        <listChanges kind="change" index="0" dataValues="wst"/>
+        <listChanges kind="append" index="3"/>
+        <listChanges kind="append" index="4"/>
+        <listChanges kind="change" index="1" dataValues="sdo"/>
+        <listChanges kind="delete" index="0" dataValues="azerty"/>
+        <listChanges kind="delete" index="1" dataValues="fpc-lazarus"/>
+        <listChanges kind="insert" index="2"/>
+        <listChanges kind="append" index="4"/>
+      </list_string>
+    </DepartmentType>
+  </changeSummary>
+  <ns1:DepartmentType>
+    <name>R &amp; D Department</name>
+    <location>Ouaga 01, BF</location>
+    <number>1210</number>
+    <list_string>kis</list_string>
+    <list_string>Ouagadougou</list_string>
+    <list_string>107612</list_string>
+    <list_string>BF</list_string>
+    <list_string>this is a multi words text. Lets test it!</list_string>
+  </ns1:DepartmentType>
+</sdo:datagraph>
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+	<xsd>
+		<schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd" xmlns:sdo="commonj.sdo">
+			<xsd:complexType name="DepartmentType">
+				<xsd:sequence>
+					<xsd:element name="list_string" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element name="changeSummary" type="sdo:ChangeSummary"/>
+				</xsd:sequence>
+				<xsd:attribute name="name" type="xsd:string"/>
+				<xsd:attribute name="location" type="xsd:string"/>
+				<xsd:attribute name="number" type="xsd:int"/>
+			</xsd:complexType>
+		</schema>
+	</xsd>
+	<changeSummary>
+		<DepartmentType sdo:ref="#/DepartmentType" name="R &amp; D" location="Ouaga, BF">
+			<list_string>
+				<listChanges index="0" kind="change" dataValues="wst"/>
+				<listChanges index="3" kind="append"/>
+				<listChanges index="4" kind="append"/>
+				<listChanges index="1" kind="change" dataValues="sdo"/>
+				<listChanges index="0" kind="delete" dataValues="azerty"/>
+				<listChanges index="1" kind="delete" dataValues="fpc-lazarus"/>
+				<listChanges index="2" kind="insert"/>
+				<listChanges index="4" kind="append"/>
+			</list_string>
+		</DepartmentType>
+	</changeSummary>
+	<ns1:DepartmentType name="R &amp; D Department" location="Ouaga 01, BF" number="1210">
+		<list_string>kis</list_string>
+		<list_string>Ouagadougou</list_string>
+		<list_string>107612</list_string>
+		<list_string>BF</list_string>
+		<list_string>this is a multi words text. Lets test it!</list_string>
+	</ns1:DepartmentType>
+</sdo:datagraph>

+ 78 - 0
packages/fcl-sdo/tests/files/company.one.xml

@@ -0,0 +1,78 @@
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+  <xsd>
+    <schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd">
+      <xsd:complexType name="EmployeeType">
+        <xsd:attribute name="name" type="xsd:string"/>
+        <xsd:attribute name="SN" type="xsd:string"/>
+        <xsd:attribute name="manager" type="xsd:boolean"/>
+        <xsd:attribute name="age" type="xsd:byte"/>
+      </xsd:complexType>
+      <xsd:complexType name="DepartmentType">
+        <xsd:sequence>
+          <xsd:element name="employees" type="tns:EmployeeType" minOccurs="0" maxOccurs="unbounded"/>
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string"/>
+        <xsd:attribute name="location" type="xsd:string"/>
+        <xsd:attribute name="number" type="xsd:int"/>
+      </xsd:complexType>
+      <xsd:complexType name="CompanyType">
+        <xsd:sequence>
+          <xsd:element name="departments" type="tns:DepartmentType" minOccurs="0" maxOccurs="unbounded"/>
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string"/>
+        <xsd:attribute name="employeeOfTheMonth" type="xsd:string"/>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <ns1:CompanyType name="A Sample company" employeeOfTheMonth="Inoussa">
+    <departments name="RAD Departement" location="Moon" number="2">
+      <employees name="inoussa OUEDRAOGO" SN="1122334455667" manager="1" age="32"/>
+      <employees name="SDO man" SN="867787667" manager="0" age="1"/>
+      <employees name="FPC" SN="_e-('" manager="0" age="13"/>
+    </departments>
+    <departments name="Sales Departement" location="Mars" number="2">
+      <employees name="wst man" SN="e&quot;'fsdfdf" manager="1" age="2"/>
+      <employees name="azerty" SN="jkjk_e5679" manager="0" age="0"/>
+      <employees name="qwerty" SN="_s-('" manager="0" age="0"/>
+    </departments>
+  </ns1:CompanyType>
+</sdo:datagraph>
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+  <xsd>
+    <schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd">
+      <xsd:complexType name="EmployeeType">
+        <xsd:attribute name="name" type="xsd:string"/>
+        <xsd:attribute name="SN" type="xsd:string"/>
+        <xsd:attribute name="manager" type="xsd:boolean"/>
+        <xsd:attribute name="age" type="xsd:byte"/>
+      </xsd:complexType>
+      <xsd:complexType name="DepartmentType">
+        <xsd:sequence>
+          <xsd:element name="employees" type="tns:EmployeeType" minOccurs="0" maxOccurs="unbounded"/>
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string"/>
+        <xsd:attribute name="location" type="xsd:string"/>
+        <xsd:attribute name="number" type="xsd:int"/>
+      </xsd:complexType>
+      <xsd:complexType name="CompanyType">
+        <xsd:sequence>
+          <xsd:element name="departments" type="tns:DepartmentType" minOccurs="0" maxOccurs="unbounded"/>
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string"/>
+        <xsd:attribute name="employeeOfTheMonth" type="xsd:string"/>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <ns1:CompanyType name="A Sample company" employeeOfTheMonth="Inoussa">
+    <departments name="RAD Departement" location="Moon" number="2">
+      <employees name="inoussa OUEDRAOGO" SN="1122334455667" manager="1" age="32"/>
+      <employees name="SDO man" SN="867787667" manager="0" age="1"/>
+      <employees name="FPC" SN="_e-('" manager="0" age="13"/>
+    </departments>
+    <departments name="Sales Departement" location="Mars" number="2">
+      <employees name="wst man" SN="e&quot;'fsdfdf" manager="1" age="2"/>
+      <employees name="azerty" SN="jkjk_e5679" manager="0" age="0"/>
+      <employees name="qwerty" SN="_s-('" manager="0" age="0"/>
+    </departments>
+  </ns1:CompanyType>
+</sdo:datagraph>

+ 96 - 0
packages/fcl-sdo/tests/files/company.two.xml

@@ -0,0 +1,96 @@
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+	<xsd>
+		<schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd">
+			<xsd:complexType name="EmployeeType">
+				<xsd:attribute name="name" type="xsd:string" use="required"/>
+				<xsd:attribute name="SN" type="xsd:string" use="required"/>
+				<xsd:attribute name="manager" type="xsd:boolean" use="required"/>
+        <xsd:attribute name="age" type="xsd:byte"/>
+			</xsd:complexType>
+			<xsd:complexType name="DepartmentType">
+				<xsd:sequence>
+					<xsd:element name="employees" type="tns:EmployeeType" maxOccurs="unbounded"/>
+				</xsd:sequence>
+				<xsd:attribute name="name" type="xsd:string" use="required"/>
+				<xsd:attribute name="location" type="xsd:string" use="required"/>
+				<xsd:attribute name="number" type="xsd:int" use="required"/>
+			</xsd:complexType>
+			<xsd:complexType name="CompanyType">
+				<xsd:sequence>
+					<xsd:element name="departments" type="tns:DepartmentType" maxOccurs="unbounded"/>
+				</xsd:sequence>
+				<xsd:attribute name="name" type="xsd:string" use="required"/>
+				<xsd:attribute name="employeeOfTheMonth" type="xsd:string" use="required"/>
+			</xsd:complexType>
+      <xsd:element name="Company" type="tns:CompanyType"/>
+		</schema>
+	</xsd>
+	<ns1:Company name="A Second Sample company" employeeOfTheMonth="Inoussa">
+			<departments name="RAD Departement" location="Moon" number="2">
+					<employees name="inoussa OUEDRAOGO" SN="1122334455667" manager="true" age="32"/>
+					<employees name="SDO man" SN="867787667" manager="false" age="1"/>
+					<employees name="FPC" SN="_e-('" manager="false" age="13"/>
+			</departments>
+			<departments name="Sales Departement" location="Mars" number="2">
+          <employees name="wst man" SN="e&quot;'fsdfdf" manager="1" age="2"/>
+          <employees name="azerty" SN="jkjk_e5679" manager="0" age="0"/>
+          <employees name="qwerty" SN="_s-('" manager="0" age="0"/>
+			</departments>
+	</ns1:Company>
+  
+	<ns1:Company name="Work Company" employeeOfTheMonth="Assia">
+			<departments name="OP Departement" location="Earth" number="2">
+					<employees name="Assia" SN="123" manager="true" age="23"/>
+					<employees name="AM" SN="455" manager="false" age="12"/>
+			</departments>
+	</ns1:Company>  
+  
+</sdo:datagraph>
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+	<xsd>
+		<schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd">
+			<xsd:complexType name="EmployeeType">
+				<xsd:attribute name="name" type="xsd:string" use="required"/>
+				<xsd:attribute name="SN" type="xsd:string" use="required"/>
+				<xsd:attribute name="manager" type="xsd:boolean" use="required"/>
+        <xsd:attribute name="age" type="xsd:byte"/>
+			</xsd:complexType>
+			<xsd:complexType name="DepartmentType">
+				<xsd:sequence>
+					<xsd:element name="employees" type="tns:EmployeeType" maxOccurs="unbounded"/>
+				</xsd:sequence>
+				<xsd:attribute name="name" type="xsd:string" use="required"/>
+				<xsd:attribute name="location" type="xsd:string" use="required"/>
+				<xsd:attribute name="number" type="xsd:int" use="required"/>
+			</xsd:complexType>
+			<xsd:complexType name="CompanyType">
+				<xsd:sequence>
+					<xsd:element name="departments" type="tns:DepartmentType" maxOccurs="unbounded"/>
+				</xsd:sequence>
+				<xsd:attribute name="name" type="xsd:string" use="required"/>
+				<xsd:attribute name="employeeOfTheMonth" type="xsd:string" use="required"/>
+			</xsd:complexType>
+      <xsd:element name="Company" type="tns:CompanyType"/>
+		</schema>
+	</xsd>
+	<ns1:Company name="A Second Sample company" employeeOfTheMonth="Inoussa">
+			<departments name="RAD Departement" location="Moon" number="2">
+					<employees name="inoussa OUEDRAOGO" SN="1122334455667" manager="true" age="32"/>
+					<employees name="SDO man" SN="867787667" manager="false" age="1"/>
+					<employees name="FPC" SN="_e-('" manager="false" age="13"/>
+			</departments>
+			<departments name="Sales Departement" location="Mars" number="2">
+          <employees name="wst man" SN="e&quot;'fsdfdf" manager="1" age="2"/>
+          <employees name="azerty" SN="jkjk_e5679" manager="0" age="0"/>
+          <employees name="qwerty" SN="_s-('" manager="0" age="0"/>
+			</departments>
+	</ns1:Company>
+  
+	<ns1:Company name="Work Company" employeeOfTheMonth="Assia">
+			<departments name="OP Departement" location="Earth" number="2">
+					<employees name="Assia" SN="123" manager="true" age="23"/>
+					<employees name="AM" SN="455" manager="false" age="12"/>
+			</departments>
+	</ns1:Company>  
+  
+</sdo:datagraph>

+ 78 - 0
packages/fcl-sdo/tests/files/company.xml

@@ -0,0 +1,78 @@
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+  <xsd>
+    <schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd">
+      <xsd:complexType name="EmployeeType">
+        <xsd:attribute name="name" type="xsd:string"/>
+        <xsd:attribute name="SN" type="xsd:string"/>
+        <xsd:attribute name="manager" type="xsd:boolean"/>
+        <xsd:attribute name="age" type="xsd:byte"/>
+      </xsd:complexType>
+      <xsd:complexType name="DepartmentType">
+        <xsd:sequence>
+          <xsd:element name="employees" type="tns:EmployeeType" minOccurs="0" maxOccurs="unbounded"/>
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string"/>
+        <xsd:attribute name="location" type="xsd:string"/>
+        <xsd:attribute name="number" type="xsd:int"/>
+      </xsd:complexType>
+      <xsd:complexType name="CompanyType">
+        <xsd:sequence>
+          <xsd:element name="departments" type="tns:DepartmentType" minOccurs="0" maxOccurs="unbounded"/>
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string"/>
+        <xsd:attribute name="employeeOfTheMonth" type="xsd:string"/>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <ns1:CompanyType name="A Sample company" employeeOfTheMonth="Inoussa">
+    <departments name="RAD Departement" location="Moon" number="2">
+      <employees name="inoussa OUEDRAOGO" SN="1122334455667" manager="1" age="32"/>
+      <employees name="SDO man" SN="867787667" manager="0" age="1"/>
+      <employees name="FPC" SN="_e-('" manager="0" age="13"/>
+    </departments>
+    <departments name="Sales Departement" location="Mars" number="2">
+      <employees name="wst man" SN="e&quot;'fsdfdf" manager="1" age="2"/>
+      <employees name="azerty" SN="jkjk_e5679" manager="0" age="0"/>
+      <employees name="qwerty" SN="_s-('" manager="0" age="0"/>
+    </departments>
+  </ns1:CompanyType>
+</sdo:datagraph>
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+  <xsd>
+    <schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd">
+      <xsd:complexType name="EmployeeType">
+        <xsd:attribute name="name" type="xsd:string"/>
+        <xsd:attribute name="SN" type="xsd:string"/>
+        <xsd:attribute name="manager" type="xsd:boolean"/>
+        <xsd:attribute name="age" type="xsd:byte"/>
+      </xsd:complexType>
+      <xsd:complexType name="DepartmentType">
+        <xsd:sequence>
+          <xsd:element name="employees" type="tns:EmployeeType" minOccurs="0" maxOccurs="unbounded"/>
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string"/>
+        <xsd:attribute name="location" type="xsd:string"/>
+        <xsd:attribute name="number" type="xsd:int"/>
+      </xsd:complexType>
+      <xsd:complexType name="CompanyType">
+        <xsd:sequence>
+          <xsd:element name="departments" type="tns:DepartmentType" minOccurs="0" maxOccurs="unbounded"/>
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string"/>
+        <xsd:attribute name="employeeOfTheMonth" type="xsd:string"/>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <ns1:CompanyType name="A Sample company" employeeOfTheMonth="Inoussa">
+    <departments name="RAD Departement" location="Moon" number="2">
+      <employees name="inoussa OUEDRAOGO" SN="1122334455667" manager="1" age="32"/>
+      <employees name="SDO man" SN="867787667" manager="0" age="1"/>
+      <employees name="FPC" SN="_e-('" manager="0" age="13"/>
+    </departments>
+    <departments name="Sales Departement" location="Mars" number="2">
+      <employees name="wst man" SN="e&quot;'fsdfdf" manager="1" age="2"/>
+      <employees name="azerty" SN="jkjk_e5679" manager="0" age="0"/>
+      <employees name="qwerty" SN="_s-('" manager="0" age="0"/>
+    </departments>
+  </ns1:CompanyType>
+</sdo:datagraph>

+ 88 - 0
packages/fcl-sdo/tests/files/complex_class_open_type.xsd

@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+ <xsd:schema xmlns:n="urn:wst-test" 
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+  targetNamespace="urn:wst-test">
+  
+    <xsd:complexType name="TClass_1">
+	    <xsd:sequence>
+		    <xsd:element name="intField" type="xsd:int" />
+        <xsd:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+	    </xsd:sequence>
+      <xsd:anyAttribute processContents="strict"/>
+    </xsd:complexType>
+
+    <xsd:complexType name="TClassSampleTypeAll">
+	    <xsd:all>
+		    <xsd:element name="intField" type="xsd:int" />
+        <xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+	    </xsd:all>
+	    <xsd:attribute name="strAtt" type="xsd:string"/>
+	    <xsd:anyAttribute processContents="skip"/>
+    </xsd:complexType>
+    
+    <xsd:complexType name="TClass_2">
+	    <xsd:sequence>
+		    <xsd:element name="SomeField" type="xsd:string" />
+	    </xsd:sequence>
+    </xsd:complexType>
+    
+    <xsd:complexType name="TClassSampleDerivedType">
+		  <xsd:complexContent>
+			  <xsd:extension base="n:TClass_2">    
+    	    <xsd:sequence>
+    		    <xsd:element name="intFieldEx" type="xsd:int" />
+            <xsd:element name="strFieldEx" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+            <xsd:any processContents="skip" maxOccurs="unbounded"/>
+    	    </xsd:sequence>
+    	    <xsd:attribute name="strAttEx" type="xsd:string"/>
+    	    <xsd:attribute name="intAttEx" type="xsd:int"/>
+          <xsd:anyAttribute processContents="lax"/>
+        </xsd:extension>
+      </xsd:complexContent>
+    </xsd:complexType>
+        
+</xsd:schema>
+<?xml version="1.0" encoding="UTF-8"?>
+ <xsd:schema xmlns:n="urn:wst-test" 
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+  targetNamespace="urn:wst-test">
+  
+    <xsd:complexType name="TClass_1">
+	    <xsd:sequence>
+		    <xsd:element name="intField" type="xsd:int" />
+        <xsd:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+	    </xsd:sequence>
+      <xsd:anyAttribute processContents="strict"/>
+    </xsd:complexType>
+
+    <xsd:complexType name="TClassSampleTypeAll">
+	    <xsd:all>
+		    <xsd:element name="intField" type="xsd:int" />
+        <xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+	    </xsd:all>
+	    <xsd:attribute name="strAtt" type="xsd:string"/>
+	    <xsd:anyAttribute processContents="skip"/>
+    </xsd:complexType>
+    
+    <xsd:complexType name="TClass_2">
+	    <xsd:sequence>
+		    <xsd:element name="SomeField" type="xsd:string" />
+	    </xsd:sequence>
+    </xsd:complexType>
+    
+    <xsd:complexType name="TClassSampleDerivedType">
+		  <xsd:complexContent>
+			  <xsd:extension base="n:TClass_2">    
+    	    <xsd:sequence>
+    		    <xsd:element name="intFieldEx" type="xsd:int" />
+            <xsd:element name="strFieldEx" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+            <xsd:any processContents="skip" maxOccurs="unbounded"/>
+    	    </xsd:sequence>
+    	    <xsd:attribute name="strAttEx" type="xsd:string"/>
+    	    <xsd:attribute name="intAttEx" type="xsd:int"/>
+          <xsd:anyAttribute processContents="lax"/>
+        </xsd:extension>
+      </xsd:complexContent>
+    </xsd:complexType>
+        
+</xsd:schema>

+ 47 - 0
packages/fcl-sdo/tests/files/datagraph.data

@@ -0,0 +1,47 @@
+<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+xmlns:company="company.xsd"
+xmlns:sdo="commonj.sdo">
+<xsd>
+<xsd:schema targetNamespace="company.xsd">
+<xsd:element name="company" type="company:CompanyType"/>
+<xsd:complexType name="CompanyType">
+<xsd:sequence>
+<xsd:element name="departments" type="company:DepartmentType"
+maxOccurs="unbounded"/>
+</xsd:sequence>
+<xsd:attribute name="name" type="xsd:string"/>
+<xsd:attribute name="employeeOfTheMonth" type="xsd:string"/>
+</xsd:complexType>
+<xsd:complexType name="DepartmentType">
+<xsd:sequence>
+<xsd:element name="employees" type="company:EmployeeType"
+maxOccurs="unbounded"/>
+</xsd:sequence>
+<xsd:attribute name="name" type="xsd:string"/>
+<xsd:attribute name="location" type="xsd:string"/>
+<xsd:attribute name="number" type="xsd:int"/>
+</xsd:complexType>
+<xsd:complexType name="EmployeeType">
+<xsd:attribute name="name" type="xsd:string"/>
+<xsd:attribute name="SN" type="xsd:ID"/>
+<xsd:attribute name="manager" type="xsd:boolean"/>
+</xsd:complexType>
+</xsd:schema>
+</xsd>
+<changeSummary create="E0004" delete="E0002">
+<company sdo:ref="#/company" name="ACME" employeeOfTheMonth="E0002"/>
+<departments sdo:ref="#/company/departments[1]">
+<employees sdo:ref="E0001"/>
+<employees name="Mary Smith" SN="E0002" manager="true"/>
+<employees sdo:ref="E0003"/>
+</departments>
+</changeSummary>
+<company:company name="MegaCorp" employeeOfTheMonth="E0004">
+<departments name="Advanced Technologies" location="NY" number="123">
+<employees name="John Jones" SN="E0001"/>
+<employees name="Jane Doe" SN="E0003"/>
+<employees name="Al Smith" SN="E0004" manager="true"/>
+</departments>
+</company:company>
+</sdo:datagraph>

+ 82 - 0
packages/fcl-sdo/tests/files/load_from_file_reference_property.xml

@@ -0,0 +1,82 @@
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns1="uri:sample">
+  <xsd>
+    <schema targetNamespace="uri:sample" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="uri:sample" xmlns:sdo="commonj.sdo">
+      <xsd:complexType name="ProjectList">
+        <xsd:sequence>
+          <xsd:element name="Project" type="tns:ProjectType" minOccurs="0" maxOccurs="unbounded"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary" minOccurs="0"/>
+        </xsd:sequence>
+      </xsd:complexType>
+      <xsd:complexType name="ProjectType">
+        <xsd:sequence>
+          <xsd:element name="Member" type="tns:Person" minOccurs="0" maxOccurs="unbounded"/>
+          <xsd:element name="ProjectLeader" type="xsd:anyURI" minOccurs="0" sdo:propertyType="tns:Person"/>
+        </xsd:sequence>
+        <xsd:attribute name="ProjectName" type="xsd:string"/>
+      </xsd:complexType>
+      <xsd:complexType name="Person">
+        <xsd:sequence>
+          <xsd:element name="Manager" type="xsd:anyURI" minOccurs="0" sdo:propertyType="tns:Person"/>
+        </xsd:sequence>
+        <xsd:attribute name="Name" type="xsd:string"/>
+        <xsd:attribute name="IsManager" type="xsd:boolean"/>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary />
+  <ns1:ProjectList>
+    <Project ProjectName="WST">
+      <Member Name="wst user 1" IsManager="false">
+        <Manager xsi:nil="true"/>
+      </Member>   
+      <Member Name="Inoussa O." IsManager="true">
+        <Manager xsi:nil="true"/>
+      </Member>  
+      <Member Name="wst user 2" IsManager="false">
+        <Manager>#/ProjectList/Project[0]/Member[1]</Manager>
+      </Member>        
+      <ProjectLeader>#/ProjectList/Project[0]/Member[1]</ProjectLeader>
+    </Project>    
+  </ns1:ProjectList>
+</sdo:datagraph>
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns1="uri:sample">
+  <xsd>
+    <schema targetNamespace="uri:sample" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="uri:sample" xmlns:sdo="commonj.sdo">
+      <xsd:complexType name="ProjectList">
+        <xsd:sequence>
+          <xsd:element name="Project" type="tns:ProjectType" minOccurs="0" maxOccurs="unbounded"/>
+          <xsd:element name="changeSummary" type="sdo:ChangeSummary" minOccurs="0"/>
+        </xsd:sequence>
+      </xsd:complexType>
+      <xsd:complexType name="ProjectType">
+        <xsd:sequence>
+          <xsd:element name="Member" type="tns:Person" minOccurs="0" maxOccurs="unbounded"/>
+          <xsd:element name="ProjectLeader" type="xsd:anyURI" minOccurs="0" sdo:propertyType="tns:Person"/>
+        </xsd:sequence>
+        <xsd:attribute name="ProjectName" type="xsd:string"/>
+      </xsd:complexType>
+      <xsd:complexType name="Person">
+        <xsd:sequence>
+          <xsd:element name="Manager" type="xsd:anyURI" minOccurs="0" sdo:propertyType="tns:Person"/>
+        </xsd:sequence>
+        <xsd:attribute name="Name" type="xsd:string"/>
+        <xsd:attribute name="IsManager" type="xsd:boolean"/>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <changeSummary />
+  <ns1:ProjectList>
+    <Project ProjectName="WST">
+      <Member Name="wst user 1" IsManager="false">
+        <Manager xsi:nil="true"/>
+      </Member>   
+      <Member Name="Inoussa O." IsManager="true">
+        <Manager xsi:nil="true"/>
+      </Member>  
+      <Member Name="wst user 2" IsManager="false">
+        <Manager>#/ProjectList/Project[0]/Member[1]</Manager>
+      </Member>        
+      <ProjectLeader>#/ProjectList/Project[0]/Member[1]</ProjectLeader>
+    </Project>    
+  </ns1:ProjectList>
+</sdo:datagraph>

+ 46 - 0
packages/fcl-sdo/tests/files/open_type.xml

@@ -0,0 +1,46 @@
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+  <xsd>
+    <schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd">
+      <xsd:complexType name="Datarow">
+        <xsd:sequence>
+          <xsd:any processContents="lax" maxOccurs="unbounded"/>
+        </xsd:sequence>
+        <xsd:anyAttribute processContents="lax"/>
+      </xsd:complexType>
+      <xsd:complexType name="Dataset">
+        <xsd:sequence>
+          <xsd:element name="rows" type="tns:Datarow" minOccurs="0" maxOccurs="unbounded"/>
+          <xsd:any processContents="lax" maxOccurs="unbounded"/>
+        </xsd:sequence>
+        <xsd:anyAttribute processContents="lax"/>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <ns1:Dataset>
+    <rows Name="SDO-Pascal" Description="Object Pascal implementation of SDO" Order="1"/>
+    <rows Name="WST" Description="Object Pascal Web Services Toolkit" Order="2"/>
+  </ns1:Dataset>
+</sdo:datagraph>
+<sdo:datagraph xmlns:sdo="commonj.sdo" xmlns:ns1="company.xsd">
+  <xsd>
+    <schema targetNamespace="company.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="company.xsd">
+      <xsd:complexType name="Datarow">
+        <xsd:sequence>
+          <xsd:any processContents="lax" maxOccurs="unbounded"/>
+        </xsd:sequence>
+        <xsd:anyAttribute processContents="lax"/>
+      </xsd:complexType>
+      <xsd:complexType name="Dataset">
+        <xsd:sequence>
+          <xsd:element name="rows" type="tns:Datarow" minOccurs="0" maxOccurs="unbounded"/>
+          <xsd:any processContents="lax" maxOccurs="unbounded"/>
+        </xsd:sequence>
+        <xsd:anyAttribute processContents="lax"/>
+      </xsd:complexType>
+    </schema>
+  </xsd>
+  <ns1:Dataset>
+    <rows Name="SDO-Pascal" Description="Object Pascal implementation of SDO" Order="1"/>
+    <rows Name="WST" Description="Object Pascal Web Services Toolkit" Order="2"/>
+  </ns1:Dataset>
+</sdo:datagraph>

+ 216 - 0
packages/fcl-sdo/tests/files/sdo_company.pas

@@ -0,0 +1,216 @@
+{
+This unit has been produced by ws_helper.
+  Input unit name : "sdo_company".
+  This unit name  : "sdo_company".
+  Date            : "20/09/2007 16:32:08".
+}
+unit sdo_company;
+{$IFDEF FPC}
+  {$mode objfpc} {$H+}
+{$ENDIF}
+{$IFNDEF FPC}
+  {$DEFINE WST_RECORD_RTTI}
+{$ENDIF}
+interface
+
+uses SysUtils, Classes, TypInfo, base_service_intf, service_intf;
+
+const
+  sNAME_SPACE = 'company.xsd';
+  sUNIT_NAME = 'sdo_company';
+
+type
+
+// ID = unable to resolve this symbol.
+  CompanyType_departmentsArray = class;
+  CompanyType = class;
+  DepartmentType_employeesArray = class;
+  DepartmentType = class;
+  EmployeeType = class;
+
+  CompanyType = class(TBaseComplexRemotable)
+  private
+    Fdepartments : CompanyType_departmentsArray;
+    Fname : string;
+    FemployeeOfTheMonth : string;
+  private
+    function Hasname() : Boolean;
+    function HasemployeeOfTheMonth() : Boolean;
+  public
+    constructor Create();override;
+    destructor Destroy();override;
+  published
+    property departments : CompanyType_departmentsArray read Fdepartments write Fdepartments;
+    property name : string read Fname write Fname stored Hasname;
+    property employeeOfTheMonth : string read FemployeeOfTheMonth write FemployeeOfTheMonth stored HasemployeeOfTheMonth;
+  end;
+
+  DepartmentType = class(TBaseComplexRemotable)
+  private
+    Femployees : DepartmentType_employeesArray;
+    Fname : string;
+    Flocation : string;
+    Fnumber : integer;
+  private
+    function Hasname() : Boolean;
+    function Haslocation() : Boolean;
+    function Hasnumber() : Boolean;
+  public
+    constructor Create();override;
+    destructor Destroy();override;
+  published
+    property employees : DepartmentType_employeesArray read Femployees write Femployees;
+    property name : string read Fname write Fname stored Hasname;
+    property location : string read Flocation write Flocation stored Haslocation;
+    property number : integer read Fnumber write Fnumber stored Hasnumber;
+  end;
+
+  EmployeeType = class(TBaseComplexRemotable)
+  private
+    Fname : string;
+    FSN : ID;
+    Fmanager : boolean;
+  private
+    function Hasname() : Boolean;
+    function HasSN() : Boolean;
+    function Hasmanager() : Boolean;
+  published
+    property name : string read Fname write Fname stored Hasname;
+    property SN : ID read FSN write FSN stored HasSN;
+    property manager : boolean read Fmanager write Fmanager stored Hasmanager;
+  end;
+
+  CompanyType_departmentsArray = class(TBaseObjectArrayRemotable)
+  private
+    function GetItem(AIndex: Integer): DepartmentType;
+  public
+    class function GetItemClass():TBaseRemotableClass;override;
+    property Item[AIndex:Integer] : DepartmentType Read GetItem;Default;
+  end;
+
+  DepartmentType_employeesArray = class(TBaseObjectArrayRemotable)
+  private
+    function GetItem(AIndex: Integer): EmployeeType;
+  public
+    class function GetItemClass():TBaseRemotableClass;override;
+    property Item[AIndex:Integer] : EmployeeType Read GetItem;Default;
+  end;
+
+Implementation
+uses metadata_repository, record_rtti, wst_types;
+
+{ CompanyType }
+
+constructor CompanyType.Create();
+begin
+  inherited Create();
+  Fdepartments := CompanyType_departmentsArray.Create();
+end;
+
+destructor CompanyType.Destroy();
+begin
+  if Assigned(Fdepartments) then
+    FreeAndNil(Fdepartments);
+  inherited Destroy();
+end;
+
+function CompanyType.Hasname() : Boolean;
+begin
+  Result := ( Fname <> '' );
+end;
+
+function CompanyType.HasemployeeOfTheMonth() : Boolean;
+begin
+  Result := ( FemployeeOfTheMonth <> '' );
+end;
+
+{ DepartmentType }
+
+constructor DepartmentType.Create();
+begin
+  inherited Create();
+  Femployees := DepartmentType_employeesArray.Create();
+end;
+
+destructor DepartmentType.Destroy();
+begin
+  if Assigned(Femployees) then
+    FreeAndNil(Femployees);
+  inherited Destroy();
+end;
+
+function DepartmentType.Hasname() : Boolean;
+begin
+  Result := ( Fname <> '' );
+end;
+
+function DepartmentType.Haslocation() : Boolean;
+begin
+  Result := ( Flocation <> '' );
+end;
+
+function DepartmentType.Hasnumber() : Boolean;
+begin
+  Result := ( Fnumber <> integer(0) );
+end;
+
+function EmployeeType.Hasname() : Boolean;
+begin
+  Result := ( Fname <> '' );
+end;
+
+function EmployeeType.HasSN() : Boolean;
+begin
+  Result := ( FSN <> ID(0) );
+end;
+
+function EmployeeType.Hasmanager() : Boolean;
+begin
+  Result := ( Fmanager <> boolean(0) );
+end;
+
+{ CompanyType_departmentsArray }
+
+function CompanyType_departmentsArray.GetItem(AIndex: Integer): DepartmentType;
+begin
+  Result := Inherited GetItem(AIndex) As DepartmentType;
+end;
+
+class function CompanyType_departmentsArray.GetItemClass(): TBaseRemotableClass;
+begin
+  Result:= DepartmentType;
+end;
+
+{ DepartmentType_employeesArray }
+
+function DepartmentType_employeesArray.GetItem(AIndex: Integer): EmployeeType;
+begin
+  Result := Inherited GetItem(AIndex) As EmployeeType;
+end;
+
+class function DepartmentType_employeesArray.GetItemClass(): TBaseRemotableClass;
+begin
+  Result:= EmployeeType;
+end;
+
+
+initialization
+  GetTypeRegistry().Register(sNAME_SPACE,TypeInfo(CompanyType),'CompanyType');
+  GetTypeRegistry().Register(sNAME_SPACE,TypeInfo(DepartmentType),'DepartmentType');
+  GetTypeRegistry().Register(sNAME_SPACE,TypeInfo(EmployeeType),'EmployeeType');
+  GetTypeRegistry().Register(sNAME_SPACE,TypeInfo(CompanyType_departmentsArray),'CompanyType_departmentsArray');
+  GetTypeRegistry().ItemByTypeInfo[TypeInfo(CompanyType_departmentsArray)].RegisterExternalPropertyName(sARRAY_STYLE,sEmbedded);
+  GetTypeRegistry().Register(sNAME_SPACE,TypeInfo(DepartmentType_employeesArray),'DepartmentType_employeesArray');
+  GetTypeRegistry().ItemByTypeInfo[TypeInfo(DepartmentType_employeesArray)].RegisterExternalPropertyName(sARRAY_STYLE,sEmbedded);
+
+  CompanyType.RegisterAttributeProperty('name');
+  CompanyType.RegisterAttributeProperty('employeeOfTheMonth');
+  DepartmentType.RegisterAttributeProperty('name');
+  DepartmentType.RegisterAttributeProperty('location');
+  DepartmentType.RegisterAttributeProperty('number');
+  EmployeeType.RegisterAttributeProperty('name');
+  EmployeeType.RegisterAttributeProperty('SN');
+  EmployeeType.RegisterAttributeProperty('manager');
+
+
+End.

+ 70 - 0
packages/fcl-sdo/tests/files/sdo_company.xsd

@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<xsd:schema targetNamespace="company.xsd"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+xmlns:company="company.xsd"
+xmlns:sdo="commonj.sdo"  
+>
+	<xsd:element name="company" type="company:CompanyType"/>
+	<xsd:complexType name="CompanyType">
+		<xsd:sequence>
+			<xsd:element name="departments" type="company:DepartmentType"
+			  minOccurs="0" maxOccurs="unbounded"/>
+
+			<xsd:element name="changes" type="sdo:ChangeSummary" />
+      
+      </xsd:sequence>
+		<xsd:attribute name="name" type="xsd:string" use="optional"/>
+		<xsd:attribute name="employeeOfTheMonth" type="xsd:string" use="optional"/>
+	</xsd:complexType>
+	<xsd:complexType name="DepartmentType">
+		<xsd:sequence>
+			<xsd:element name="employees" type="company:EmployeeType"
+			  minOccurs="0" maxOccurs="unbounded"/>
+		</xsd:sequence>
+		<xsd:attribute name="name" type="xsd:string" use="optional"/>
+		<xsd:attribute name="location" type="xsd:string" use="optional"/>
+		<xsd:attribute name="number" type="xsd:int" use="optional"/>
+	</xsd:complexType>
+	<xsd:complexType name="EmployeeType">
+		<xsd:attribute name="name" type="xsd:string" use="optional"/>
+		<xsd:attribute name="SN" type="xsd:ID" use="optional"/>
+		<xsd:attribute name="manager" type="xsd:boolean" use="optional"/>
+	</xsd:complexType>
+</xsd:schema>
+<?xml version="1.0" encoding="UTF-8"?>
+
+<xsd:schema targetNamespace="company.xsd"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+xmlns:company="company.xsd"
+xmlns:sdo="commonj.sdo"  
+>
+	<xsd:element name="company" type="company:CompanyType"/>
+	<xsd:complexType name="CompanyType">
+		<xsd:sequence>
+			<xsd:element name="departments" type="company:DepartmentType"
+			  minOccurs="0" maxOccurs="unbounded"/>
+
+			<xsd:element name="changes" type="sdo:ChangeSummary" />
+      
+      </xsd:sequence>
+		<xsd:attribute name="name" type="xsd:string" use="optional"/>
+		<xsd:attribute name="employeeOfTheMonth" type="xsd:string" use="optional"/>
+	</xsd:complexType>
+	<xsd:complexType name="DepartmentType">
+		<xsd:sequence>
+			<xsd:element name="employees" type="company:EmployeeType"
+			  minOccurs="0" maxOccurs="unbounded"/>
+		</xsd:sequence>
+		<xsd:attribute name="name" type="xsd:string" use="optional"/>
+		<xsd:attribute name="location" type="xsd:string" use="optional"/>
+		<xsd:attribute name="number" type="xsd:int" use="optional"/>
+	</xsd:complexType>
+	<xsd:complexType name="EmployeeType">
+		<xsd:attribute name="name" type="xsd:string" use="optional"/>
+		<xsd:attribute name="SN" type="xsd:ID" use="optional"/>
+		<xsd:attribute name="manager" type="xsd:boolean" use="optional"/>
+	</xsd:complexType>
+</xsd:schema>

+ 32 - 0
packages/fcl-sdo/tests/files/sdo_company_original.xsd

@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<xsd:schema targetNamespace="company.xsd"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+xmlns:company="company.xsd"
+xmlns:sdo="commonj.sdo"  
+>
+	<xsd:element name="company" type="company:CompanyType"/>
+	<xsd:complexType name="CompanyType">
+		<xsd:sequence>
+			<xsd:element name="departments" type="company:DepartmentType"
+			maxOccurs="unbounded"/>
+		</xsd:sequence>
+		<xsd:attribute name="name" type="xsd:string"/>
+		<xsd:attribute name="employeeOfTheMonth" type="xsd:string"/>
+	</xsd:complexType>
+	<xsd:complexType name="DepartmentType">
+		<xsd:sequence>
+			<xsd:element name="employees" type="company:EmployeeType"
+			maxOccurs="unbounded"/>
+		</xsd:sequence>
+		<xsd:attribute name="name" type="xsd:string"/>
+		<xsd:attribute name="location" type="xsd:string"/>
+		<xsd:attribute name="number" type="xsd:int"/>
+	</xsd:complexType>
+	<xsd:complexType name="EmployeeType">
+		<xsd:attribute name="name" type="xsd:string"/>
+		<xsd:attribute name="SN" type="xsd:ID"/>
+		<xsd:attribute name="manager" type="xsd:boolean"/>
+	</xsd:complexType>
+</xsd:schema>

+ 8 - 0
packages/fcl-sdo/tests/files/test_company_res.txt

@@ -0,0 +1,8 @@
+ws_helper, Web Service Toolkit 0.5 Copyright (c) 2006, 2007 by Inoussa OUEDRAOGO
+Parsing the file : C:\Programmes\lazarus\sdo\tests\files\sdo_company.xsd
+Information : Parsing "company" ...
+Information : Parsing "CompanyType" ...
+Information : Parsing "DepartmentType" ...
+Information : Parsing "EmployeeType" ...
+Interface file generation...
+File "C:\Programmes\lazarus\sdo\tests\files\sdo_company.xsd" parsed succesfully.

+ 42 - 0
packages/fcl-sdo/tests/files/xsd/array_sequence_item_name.xsd

@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+ <xsd:schema xmlns:tns="urn:wst-test" 
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+  targetNamespace="urn:wst-test">
+  
+    <xsd:complexType name="ArrayOfEmailAddress">
+     <xsd:sequence>
+       <xsd:element minOccurs="0" maxOccurs="unbounded" name="EmailAddress" nillable="true" type="tns:EmailAddress"/>
+     </xsd:sequence>
+    </xsd:complexType>
+    
+    <xsd:complexType name="EmailAddress">
+     <xsd:sequence>
+       <xsd:element minOccurs="1" maxOccurs="1" name="ContactAgreement" type="xsd:boolean"/>
+       <xsd:element minOccurs="0" maxOccurs="1" name="Email" type="xsd:string"/>
+       <xsd:element minOccurs="0" maxOccurs="1" name="EmailType" type="xsd:string"/>
+       <xsd:element minOccurs="1" maxOccurs="1" name="Preference" nillable="true" type="xsd:int"/>
+     </xsd:sequence>
+    </xsd:complexType>  
+  
+ </xsd:schema>
+<?xml version="1.0" encoding="UTF-8"?>
+ <xsd:schema xmlns:tns="urn:wst-test" 
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+  targetNamespace="urn:wst-test">
+  
+    <xsd:complexType name="ArrayOfEmailAddress">
+     <xsd:sequence>
+       <xsd:element minOccurs="0" maxOccurs="unbounded" name="EmailAddress" nillable="true" type="tns:EmailAddress"/>
+     </xsd:sequence>
+    </xsd:complexType>
+    
+    <xsd:complexType name="EmailAddress">
+     <xsd:sequence>
+       <xsd:element minOccurs="1" maxOccurs="1" name="ContactAgreement" type="xsd:boolean"/>
+       <xsd:element minOccurs="0" maxOccurs="1" name="Email" type="xsd:string"/>
+       <xsd:element minOccurs="0" maxOccurs="1" name="EmailType" type="xsd:string"/>
+       <xsd:element minOccurs="1" maxOccurs="1" name="Preference" nillable="true" type="xsd:int"/>
+     </xsd:sequence>
+    </xsd:complexType>  
+  
+ </xsd:schema>

+ 36 - 0
packages/fcl-sdo/tests/files/xsd/class_properties_extended_metadata.xsd

@@ -0,0 +1,36 @@
+<schema targetNamespace="urn:wst-test" 
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+  xmlns:tns="urn:wst-test"
+  xmlns:ns3="uri-4"
+  xmlns:ns4="uri-5"
+  >
+  
+	<xsd:complexType name="TClassSampleType">
+		<xsd:sequence>
+			<xsd:element name="intField" type="xsd:int" ns3:a="1210" ns3:b="ns4:xx"/>
+			<xsd:element name="strField" type="xsd:string" default="azerty" ns3:a="xsd:int"/>
+			<xsd:element name="floatField" type="xsd:float"/>
+		</xsd:sequence>
+		<xsd:attribute name="strAtt" type="xsd:string" default="attribute azerty" use="required" ns3:a="optional"/>
+		<xsd:attribute name="intAtt" type="xsd:int" use="required"/>
+	</xsd:complexType>
+  
+</schema>
+<schema targetNamespace="urn:wst-test" 
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+  xmlns:tns="urn:wst-test"
+  xmlns:ns3="uri-4"
+  xmlns:ns4="uri-5"
+  >
+  
+	<xsd:complexType name="TClassSampleType">
+		<xsd:sequence>
+			<xsd:element name="intField" type="xsd:int" ns3:a="1210" ns3:b="ns4:xx"/>
+			<xsd:element name="strField" type="xsd:string" default="azerty" ns3:a="xsd:int"/>
+			<xsd:element name="floatField" type="xsd:float"/>
+		</xsd:sequence>
+		<xsd:attribute name="strAtt" type="xsd:string" default="attribute azerty" use="required" ns3:a="optional"/>
+		<xsd:attribute name="intAtt" type="xsd:int" use="required"/>
+	</xsd:complexType>
+  
+</schema>

+ 46 - 0
packages/fcl-sdo/tests/files/xsd/class_properties_extended_metadata_2.xsd

@@ -0,0 +1,46 @@
+<schema targetNamespace="uri:sample" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="uri:sample" xmlns:sdo="commonj.sdo">
+  <xsd:complexType name="ProjectList">
+    <xsd:sequence>
+      <xsd:element name="Project" type="tns:ProjectType" minOccurs="0" maxOccurs="unbounded"/>
+      <xsd:element name="changeSummary" type="sdo:ChangeSummary" minOccurs="0"/>
+    </xsd:sequence>
+  </xsd:complexType>
+  <xsd:complexType name="ProjectType">
+    <xsd:sequence>
+      <xsd:element name="Member" type="tns:Person" minOccurs="0" maxOccurs="unbounded"/>
+      <xsd:element name="ProjectLeader" type="xsd:anyURI" minOccurs="0" sdo:propertyType="tns:Person"/>
+      <xsd:element name="ProjectLeaderArray" type="xsd:anyURI" minOccurs="0" maxOccurs="unbounded" sdo:propertyType="tns:Person"/>
+    </xsd:sequence>
+    <xsd:attribute name="ProjectName" type="xsd:string"/>
+  </xsd:complexType>
+  <xsd:complexType name="Person">
+    <xsd:sequence>
+      <xsd:element name="Manager" type="xsd:anyURI" minOccurs="0" sdo:propertyType="tns:Person"/>
+    </xsd:sequence>
+    <xsd:attribute name="Name" type="xsd:string"/>
+    <xsd:attribute name="IsManager" type="xsd:boolean"/>
+  </xsd:complexType>
+</schema>
+<schema targetNamespace="uri:sample" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="uri:sample" xmlns:sdo="commonj.sdo">
+  <xsd:complexType name="ProjectList">
+    <xsd:sequence>
+      <xsd:element name="Project" type="tns:ProjectType" minOccurs="0" maxOccurs="unbounded"/>
+      <xsd:element name="changeSummary" type="sdo:ChangeSummary" minOccurs="0"/>
+    </xsd:sequence>
+  </xsd:complexType>
+  <xsd:complexType name="ProjectType">
+    <xsd:sequence>
+      <xsd:element name="Member" type="tns:Person" minOccurs="0" maxOccurs="unbounded"/>
+      <xsd:element name="ProjectLeader" type="xsd:anyURI" minOccurs="0" sdo:propertyType="tns:Person"/>
+      <xsd:element name="ProjectLeaderArray" type="xsd:anyURI" minOccurs="0" maxOccurs="unbounded" sdo:propertyType="tns:Person"/>
+    </xsd:sequence>
+    <xsd:attribute name="ProjectName" type="xsd:string"/>
+  </xsd:complexType>
+  <xsd:complexType name="Person">
+    <xsd:sequence>
+      <xsd:element name="Manager" type="xsd:anyURI" minOccurs="0" sdo:propertyType="tns:Person"/>
+    </xsd:sequence>
+    <xsd:attribute name="Name" type="xsd:string"/>
+    <xsd:attribute name="IsManager" type="xsd:boolean"/>
+  </xsd:complexType>
+</schema>

+ 16 - 0
packages/fcl-sdo/tests/files/xsd/class_property_composed_name.xsd

@@ -0,0 +1,16 @@
+<schema targetNamespace="urn_sample" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="urn_sample" xmlns:wst="urn:wst_base">
+  <xsd:complexType name="TSampleClass">
+    <xsd:sequence>
+      <xsd:element name="one-prop" type="xsd:string" />
+    </xsd:sequence>
+    <xsd:attribute name="one-two-prop" type="xsd:string"/>
+  </xsd:complexType>
+</schema>
+<schema targetNamespace="urn_sample" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="urn_sample" xmlns:wst="urn:wst_base">
+  <xsd:complexType name="TSampleClass">
+    <xsd:sequence>
+      <xsd:element name="one-prop" type="xsd:string" />
+    </xsd:sequence>
+    <xsd:attribute name="one-two-prop" type="xsd:string"/>
+  </xsd:complexType>
+</schema>

+ 62 - 0
packages/fcl-sdo/tests/files/xsd/complex_array_sequence.xsd

@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+ <xsd:schema xmlns:n="urn:wst-test" 
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+  targetNamespace="urn:wst-test">
+  
+    <xsd:complexType name="TArrayIntFieldType">
+	    <xsd:sequence>
+		    <xsd:element name="intField" type="xsd:int" minOccurs="0" maxOccurs="unbounded" />
+	    </xsd:sequence>
+    </xsd:complexType>
+
+    <xsd:complexType name="TArrayItemType">
+	    <xsd:sequence>
+		    <xsd:element name="Item" minOccurs="0" maxOccurs="unbounded" >
+            <xsd:complexType>
+        	    <xsd:sequence>
+        		    <xsd:element name="intField" type="xsd:int" />
+                <xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+                <xsd:element name="floatField" type="xsd:float" minOccurs="0" maxOccurs="1"/>
+                <xsd:element name="byteField" type="xsd:byte" maxOccurs="1"/>
+                <xsd:element name="charField" type="xsd:char" minOccurs="1"/>
+                <xsd:element name="longField" type="xsd:long" minOccurs="0"/>
+        	    </xsd:sequence>
+        	    <xsd:attribute name="strAtt" type="xsd:string"/>
+        	    <xsd:attribute name="intAtt" type="xsd:int"/>
+            </xsd:complexType>       
+        </xsd:element>    
+	    </xsd:sequence>
+    </xsd:complexType>
+    
+</xsd:schema>
+<?xml version="1.0" encoding="UTF-8"?>
+ <xsd:schema xmlns:n="urn:wst-test" 
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+  targetNamespace="urn:wst-test">
+  
+    <xsd:complexType name="TArrayIntFieldType">
+	    <xsd:sequence>
+		    <xsd:element name="intField" type="xsd:int" minOccurs="0" maxOccurs="unbounded" />
+	    </xsd:sequence>
+    </xsd:complexType>
+
+    <xsd:complexType name="TArrayItemType">
+	    <xsd:sequence>
+		    <xsd:element name="Item" minOccurs="0" maxOccurs="unbounded" >
+            <xsd:complexType>
+        	    <xsd:sequence>
+        		    <xsd:element name="intField" type="xsd:int" />
+                <xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+                <xsd:element name="floatField" type="xsd:float" minOccurs="0" maxOccurs="1"/>
+                <xsd:element name="byteField" type="xsd:byte" maxOccurs="1"/>
+                <xsd:element name="charField" type="xsd:char" minOccurs="1"/>
+                <xsd:element name="longField" type="xsd:long" minOccurs="0"/>
+        	    </xsd:sequence>
+        	    <xsd:attribute name="strAtt" type="xsd:string"/>
+        	    <xsd:attribute name="intAtt" type="xsd:int"/>
+            </xsd:complexType>       
+        </xsd:element>    
+	    </xsd:sequence>
+    </xsd:complexType>
+    
+</xsd:schema>

+ 70 - 0
packages/fcl-sdo/tests/files/xsd/complex_array_sequence_embedded.xsd

@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+ <xsd:schema xmlns:n="urn:wst-test" 
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+  targetNamespace="urn:wst-test">
+  
+  <xsd:element name="TArrayIntFieldType">  
+    <xsd:complexType>
+	    <xsd:sequence>
+		    <xsd:element name="intField" type="xsd:int" minOccurs="0" maxOccurs="unbounded" />
+	    </xsd:sequence>
+    </xsd:complexType>
+  </xsd:element> 
+
+  <xsd:element name="TArrayItemType">  
+    <xsd:complexType>
+	    <xsd:sequence>
+		    <xsd:element name="Item" minOccurs="0" maxOccurs="unbounded" >
+            <xsd:complexType>
+        	    <xsd:sequence>
+        		    <xsd:element name="intField" type="xsd:int" />
+                <xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+                <xsd:element name="floatField" type="xsd:float" minOccurs="0" maxOccurs="1"/>
+                <xsd:element name="byteField" type="xsd:byte" maxOccurs="1"/>
+                <xsd:element name="charField" type="xsd:char" minOccurs="1"/>
+                <xsd:element name="longField" type="xsd:long" minOccurs="0"/>
+        	    </xsd:sequence>
+        	    <xsd:attribute name="strAtt" type="xsd:string"/>
+        	    <xsd:attribute name="intAtt" type="xsd:int"/>
+            </xsd:complexType>       
+        </xsd:element>    
+	    </xsd:sequence>
+    </xsd:complexType>
+  </xsd:element>
+    
+</xsd:schema>
+<?xml version="1.0" encoding="UTF-8"?>
+ <xsd:schema xmlns:n="urn:wst-test" 
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+  targetNamespace="urn:wst-test">
+  
+  <xsd:element name="TArrayIntFieldType">  
+    <xsd:complexType>
+	    <xsd:sequence>
+		    <xsd:element name="intField" type="xsd:int" minOccurs="0" maxOccurs="unbounded" />
+	    </xsd:sequence>
+    </xsd:complexType>
+  </xsd:element> 
+
+  <xsd:element name="TArrayItemType">  
+    <xsd:complexType>
+	    <xsd:sequence>
+		    <xsd:element name="Item" minOccurs="0" maxOccurs="unbounded" >
+            <xsd:complexType>
+        	    <xsd:sequence>
+        		    <xsd:element name="intField" type="xsd:int" />
+                <xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+                <xsd:element name="floatField" type="xsd:float" minOccurs="0" maxOccurs="1"/>
+                <xsd:element name="byteField" type="xsd:byte" maxOccurs="1"/>
+                <xsd:element name="charField" type="xsd:char" minOccurs="1"/>
+                <xsd:element name="longField" type="xsd:long" minOccurs="0"/>
+        	    </xsd:sequence>
+        	    <xsd:attribute name="strAtt" type="xsd:string"/>
+        	    <xsd:attribute name="intAtt" type="xsd:int"/>
+            </xsd:complexType>       
+        </xsd:element>    
+	    </xsd:sequence>
+    </xsd:complexType>
+  </xsd:element>
+    
+</xsd:schema>

+ 94 - 0
packages/fcl-sdo/tests/files/xsd/complex_class.xsd

@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+ <xsd:schema xmlns:n="urn:wst-test" 
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+  targetNamespace="urn:wst-test">
+  
+    <xsd:complexType name="TClassSampleType">
+	    <xsd:sequence>
+		    <xsd:element name="intField" type="xsd:int" />
+        <xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+        <xsd:element name="floatField" type="xsd:float" minOccurs="0" maxOccurs="1"/>
+        <xsd:element name="byteField" type="xsd:byte" maxOccurs="1"/>
+        <xsd:element name="charField" type="xsd:char" minOccurs="1"/>
+        <xsd:element name="longField" type="xsd:long" minOccurs="0"/>
+	    </xsd:sequence>
+	    <xsd:attribute name="strAtt" type="xsd:string"/>
+	    <xsd:attribute name="intAtt" type="xsd:int"/>
+    </xsd:complexType>
+
+    <xsd:element name="TClassSample" type="n:TClassSampleType"/>
+
+    <xsd:complexType name="TClassSampleTypeAll">
+	    <xsd:all>
+		    <xsd:element name="intField" type="xsd:int" />
+        <xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+        <xsd:element name="floatField" type="xsd:float" minOccurs="0" maxOccurs="1"/>
+        <xsd:element name="byteField" type="xsd:byte" maxOccurs="1"/>
+        <xsd:element name="charField" type="xsd:char" minOccurs="1"/>
+        <xsd:element name="longField" type="xsd:long" minOccurs="0"/>
+	    </xsd:all>
+	    <xsd:attribute name="strAtt" type="xsd:string"/>
+	    <xsd:attribute name="intAtt" type="xsd:int"/>
+    </xsd:complexType>
+    
+    <xsd:complexType name="TClassSampleDerivedType">
+		  <xsd:complexContent>
+			  <xsd:extension base="n:TClassSampleType">    
+    	    <xsd:sequence>
+    		    <xsd:element name="intFieldEx" type="xsd:int" />
+            <xsd:element name="strFieldEx" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+    	    </xsd:sequence>
+    	    <xsd:attribute name="strAttEx" type="xsd:string"/>
+    	    <xsd:attribute name="intAttEx" type="xsd:int"/>
+        </xsd:extension>
+      </xsd:complexContent>
+    </xsd:complexType>
+        
+</xsd:schema>
+<?xml version="1.0" encoding="UTF-8"?>
+ <xsd:schema xmlns:n="urn:wst-test" 
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+  targetNamespace="urn:wst-test">
+  
+    <xsd:complexType name="TClassSampleType">
+	    <xsd:sequence>
+		    <xsd:element name="intField" type="xsd:int" />
+        <xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+        <xsd:element name="floatField" type="xsd:float" minOccurs="0" maxOccurs="1"/>
+        <xsd:element name="byteField" type="xsd:byte" maxOccurs="1"/>
+        <xsd:element name="charField" type="xsd:char" minOccurs="1"/>
+        <xsd:element name="longField" type="xsd:long" minOccurs="0"/>
+	    </xsd:sequence>
+	    <xsd:attribute name="strAtt" type="xsd:string"/>
+	    <xsd:attribute name="intAtt" type="xsd:int"/>
+    </xsd:complexType>
+
+    <xsd:element name="TClassSample" type="n:TClassSampleType"/>
+
+    <xsd:complexType name="TClassSampleTypeAll">
+	    <xsd:all>
+		    <xsd:element name="intField" type="xsd:int" />
+        <xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+        <xsd:element name="floatField" type="xsd:float" minOccurs="0" maxOccurs="1"/>
+        <xsd:element name="byteField" type="xsd:byte" maxOccurs="1"/>
+        <xsd:element name="charField" type="xsd:char" minOccurs="1"/>
+        <xsd:element name="longField" type="xsd:long" minOccurs="0"/>
+	    </xsd:all>
+	    <xsd:attribute name="strAtt" type="xsd:string"/>
+	    <xsd:attribute name="intAtt" type="xsd:int"/>
+    </xsd:complexType>
+    
+    <xsd:complexType name="TClassSampleDerivedType">
+		  <xsd:complexContent>
+			  <xsd:extension base="n:TClassSampleType">    
+    	    <xsd:sequence>
+    		    <xsd:element name="intFieldEx" type="xsd:int" />
+            <xsd:element name="strFieldEx" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+    	    </xsd:sequence>
+    	    <xsd:attribute name="strAttEx" type="xsd:string"/>
+    	    <xsd:attribute name="intAttEx" type="xsd:int"/>
+        </xsd:extension>
+      </xsd:complexContent>
+    </xsd:complexType>
+        
+</xsd:schema>

+ 38 - 0
packages/fcl-sdo/tests/files/xsd/complex_class_default.xsd

@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+ <xsd:schema  
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+  targetNamespace="urn:wst-test">
+  
+    <xsd:complexType name="TClassSampleType">
+	    <xsd:sequence>
+		    <xsd:element name="intField" type="xsd:int" default="1210"/>
+        <xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1" default="azerty"/>
+        <xsd:element name="floatField" type="xsd:float" minOccurs="0" maxOccurs="1" default="1234"/>
+        <xsd:element name="byteField" type="xsd:byte" maxOccurs="1" default="23"/>
+        <xsd:element name="charField" type="xsd:char" minOccurs="1" default="i"/>
+        <xsd:element name="longField" type="xsd:long" minOccurs="0" default="567"/>
+	    </xsd:sequence>
+	    <xsd:attribute name="strAtt" type="xsd:string" default="attribute azerty"/>
+	    <xsd:attribute name="intAtt" type="xsd:int" default="789"/>
+    </xsd:complexType>
+       
+</xsd:schema>
+<?xml version="1.0" encoding="UTF-8"?>
+ <xsd:schema  
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+  targetNamespace="urn:wst-test">
+  
+    <xsd:complexType name="TClassSampleType">
+	    <xsd:sequence>
+		    <xsd:element name="intField" type="xsd:int" default="1210"/>
+        <xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1" default="azerty"/>
+        <xsd:element name="floatField" type="xsd:float" minOccurs="0" maxOccurs="1" default="1234"/>
+        <xsd:element name="byteField" type="xsd:byte" maxOccurs="1" default="23"/>
+        <xsd:element name="charField" type="xsd:char" minOccurs="1" default="i"/>
+        <xsd:element name="longField" type="xsd:long" minOccurs="0" default="567"/>
+	    </xsd:sequence>
+	    <xsd:attribute name="strAtt" type="xsd:string" default="attribute azerty"/>
+	    <xsd:attribute name="intAtt" type="xsd:int" default="789"/>
+    </xsd:complexType>
+       
+</xsd:schema>

+ 92 - 0
packages/fcl-sdo/tests/files/xsd/complex_class_embedded.xsd

@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8"?>
+ <xsd:schema xmlns:n="urn:wst-test" 
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+  targetNamespace="urn:wst-test">
+  
+  <xsd:element name="TClassSampleType">
+    <xsd:complexType >
+	    <xsd:sequence>
+		    <xsd:element name="intField" type="xsd:int" />
+        <xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+        <xsd:element name="floatField" type="xsd:float" minOccurs="0" maxOccurs="1"/>
+        <xsd:element name="byteField" type="xsd:byte" maxOccurs="1"/>
+        <xsd:element name="longField" type="xsd:long" minOccurs="0"/>
+
+        <xsd:element name="classField" >
+            <xsd:complexType >
+        	    <xsd:sequence>            
+        		    <xsd:element name="intFieldE" type="xsd:int" />
+                <xsd:element name="strFieldE" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="strAttE" type="xsd:string"/>
+              <xsd:attribute name="intAttE" type="xsd:int"/>
+              </xsd:complexType>
+        </xsd:element>
+
+        <xsd:element name="enumField" >
+        	<xsd:simpleType>
+        		<xsd:restriction base="xsd:token">
+        			<xsd:enumeration value="esOne">	</xsd:enumeration>
+        			<xsd:enumeration value="esTwo">	</xsd:enumeration>
+        			<xsd:enumeration value="esThree">	</xsd:enumeration>
+              <xsd:enumeration value="begin">	</xsd:enumeration>
+              <xsd:enumeration value="finally">	</xsd:enumeration>
+              <xsd:enumeration value="True">	</xsd:enumeration>
+              <xsd:enumeration value="False">	</xsd:enumeration>
+        		</xsd:restriction>
+        	</xsd:simpleType>
+        </xsd:element>           
+
+        </xsd:sequence>
+	    <xsd:attribute name="strAtt" type="xsd:string"/>
+	    <xsd:attribute name="intAtt" type="xsd:int"/>
+    </xsd:complexType>
+  </xsd:element>
+    
+</xsd:schema>
+<?xml version="1.0" encoding="UTF-8"?>
+ <xsd:schema xmlns:n="urn:wst-test" 
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+  targetNamespace="urn:wst-test">
+  
+  <xsd:element name="TClassSampleType">
+    <xsd:complexType >
+	    <xsd:sequence>
+		    <xsd:element name="intField" type="xsd:int" />
+        <xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+        <xsd:element name="floatField" type="xsd:float" minOccurs="0" maxOccurs="1"/>
+        <xsd:element name="byteField" type="xsd:byte" maxOccurs="1"/>
+        <xsd:element name="longField" type="xsd:long" minOccurs="0"/>
+
+        <xsd:element name="classField" >
+            <xsd:complexType >
+        	    <xsd:sequence>            
+        		    <xsd:element name="intFieldE" type="xsd:int" />
+                <xsd:element name="strFieldE" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="strAttE" type="xsd:string"/>
+              <xsd:attribute name="intAttE" type="xsd:int"/>
+              </xsd:complexType>
+        </xsd:element>
+
+        <xsd:element name="enumField" >
+        	<xsd:simpleType>
+        		<xsd:restriction base="xsd:token">
+        			<xsd:enumeration value="esOne">	</xsd:enumeration>
+        			<xsd:enumeration value="esTwo">	</xsd:enumeration>
+        			<xsd:enumeration value="esThree">	</xsd:enumeration>
+              <xsd:enumeration value="begin">	</xsd:enumeration>
+              <xsd:enumeration value="finally">	</xsd:enumeration>
+              <xsd:enumeration value="True">	</xsd:enumeration>
+              <xsd:enumeration value="False">	</xsd:enumeration>
+        		</xsd:restriction>
+        	</xsd:simpleType>
+        </xsd:element>           
+
+        </xsd:sequence>
+	    <xsd:attribute name="strAtt" type="xsd:string"/>
+	    <xsd:attribute name="intAtt" type="xsd:int"/>
+    </xsd:complexType>
+  </xsd:element>
+    
+</xsd:schema>

+ 48 - 0
packages/fcl-sdo/tests/files/xsd/complex_class_extend_simple.xsd

@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+ <xsd:schema xmlns:n="urn:wst-test" 
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+  targetNamespace="urn:wst-test">
+  
+	<xsd:complexType name="TClassSampleType">
+		<xsd:simpleContent>
+			<xsd:extension base="xsd:string">
+				<xsd:attribute name="intField" type="xsd:int">
+				</xsd:attribute>
+			</xsd:extension>
+		</xsd:simpleContent>
+	</xsd:complexType> 
+ 
+	<xsd:complexType name="TClassSampleTypeA">
+		<xsd:simpleContent>
+			<xsd:extension base="xsd:base64Binary">
+				<xsd:attribute name="floatField" type="xsd:float">
+				</xsd:attribute>
+			</xsd:extension>
+		</xsd:simpleContent>
+	</xsd:complexType> 
+      
+</xsd:schema>
+<?xml version="1.0" encoding="UTF-8"?>
+ <xsd:schema xmlns:n="urn:wst-test" 
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+  targetNamespace="urn:wst-test">
+  
+	<xsd:complexType name="TClassSampleType">
+		<xsd:simpleContent>
+			<xsd:extension base="xsd:string">
+				<xsd:attribute name="intField" type="xsd:int">
+				</xsd:attribute>
+			</xsd:extension>
+		</xsd:simpleContent>
+	</xsd:complexType> 
+ 
+	<xsd:complexType name="TClassSampleTypeA">
+		<xsd:simpleContent>
+			<xsd:extension base="xsd:base64Binary">
+				<xsd:attribute name="floatField" type="xsd:float">
+				</xsd:attribute>
+			</xsd:extension>
+		</xsd:simpleContent>
+	</xsd:complexType> 
+      
+</xsd:schema>

+ 46 - 0
packages/fcl-sdo/tests/files/xsd/complex_class_false_array.xsd

@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+ <xsd:schema xmlns:n="urn:wst-test" 
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+  targetNamespace="urn:wst-test">
+  
+          <xsd:complexType name="TClassSampleType">
+      	    <xsd:sequence>
+      		    <xsd:element name="intField" type="xsd:int" />
+              <xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+      	    </xsd:sequence>
+          </xsd:complexType>
+
+        <xsd:complexType name="TClassSampleDerivedType">
+    		  <xsd:complexContent>
+    			  <xsd:extension base="n:TClassSampleType">    
+        	    <xsd:sequence>
+        		    <xsd:element name="intFieldEx" type="xsd:int" minOccurs="0" maxOccurs="unbounded" />
+        	    </xsd:sequence>
+            </xsd:extension>
+          </xsd:complexContent>
+        </xsd:complexType>  
+  
+ </xsd:schema>
+<?xml version="1.0" encoding="UTF-8"?>
+ <xsd:schema xmlns:n="urn:wst-test" 
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+  targetNamespace="urn:wst-test">
+  
+          <xsd:complexType name="TClassSampleType">
+      	    <xsd:sequence>
+      		    <xsd:element name="intField" type="xsd:int" />
+              <xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+      	    </xsd:sequence>
+          </xsd:complexType>
+
+        <xsd:complexType name="TClassSampleDerivedType">
+    		  <xsd:complexContent>
+    			  <xsd:extension base="n:TClassSampleType">    
+        	    <xsd:sequence>
+        		    <xsd:element name="intFieldEx" type="xsd:int" minOccurs="0" maxOccurs="unbounded" />
+        	    </xsd:sequence>
+            </xsd:extension>
+          </xsd:complexContent>
+        </xsd:complexType>  
+  
+ </xsd:schema>

+ 88 - 0
packages/fcl-sdo/tests/files/xsd/complex_class_open_type.xsd

@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+ <xsd:schema xmlns:n="urn:wst-test" 
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+  targetNamespace="urn:wst-test">
+  
+    <xsd:complexType name="TClass_1">
+	    <xsd:sequence>
+		    <xsd:element name="intField" type="xsd:int" />
+        <xsd:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+	    </xsd:sequence>
+      <xsd:anyAttribute processContents="strict"/>
+    </xsd:complexType>
+
+    <xsd:complexType name="TClassSampleTypeAll">
+	    <xsd:all>
+		    <xsd:element name="intField" type="xsd:int" />
+        <xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+	    </xsd:all>
+	    <xsd:attribute name="strAtt" type="xsd:string"/>
+	    <xsd:anyAttribute processContents="skip"/>
+    </xsd:complexType>
+    
+    <xsd:complexType name="TClass_2">
+	    <xsd:sequence>
+		    <xsd:element name="SomeField" type="xsd:string" />
+	    </xsd:sequence>
+    </xsd:complexType>
+    
+    <xsd:complexType name="TClassSampleDerivedType">
+		  <xsd:complexContent>
+			  <xsd:extension base="n:TClass_2">    
+    	    <xsd:sequence>
+    		    <xsd:element name="intFieldEx" type="xsd:int" />
+            <xsd:element name="strFieldEx" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+            <xsd:any processContents="skip" maxOccurs="unbounded"/>
+    	    </xsd:sequence>
+    	    <xsd:attribute name="strAttEx" type="xsd:string"/>
+    	    <xsd:attribute name="intAttEx" type="xsd:int"/>
+          <xsd:anyAttribute processContents="lax"/>
+        </xsd:extension>
+      </xsd:complexContent>
+    </xsd:complexType>
+        
+</xsd:schema>
+<?xml version="1.0" encoding="UTF-8"?>
+ <xsd:schema xmlns:n="urn:wst-test" 
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+  targetNamespace="urn:wst-test">
+  
+    <xsd:complexType name="TClass_1">
+	    <xsd:sequence>
+		    <xsd:element name="intField" type="xsd:int" />
+        <xsd:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+	    </xsd:sequence>
+      <xsd:anyAttribute processContents="strict"/>
+    </xsd:complexType>
+
+    <xsd:complexType name="TClassSampleTypeAll">
+	    <xsd:all>
+		    <xsd:element name="intField" type="xsd:int" />
+        <xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+	    </xsd:all>
+	    <xsd:attribute name="strAtt" type="xsd:string"/>
+	    <xsd:anyAttribute processContents="skip"/>
+    </xsd:complexType>
+    
+    <xsd:complexType name="TClass_2">
+	    <xsd:sequence>
+		    <xsd:element name="SomeField" type="xsd:string" />
+	    </xsd:sequence>
+    </xsd:complexType>
+    
+    <xsd:complexType name="TClassSampleDerivedType">
+		  <xsd:complexContent>
+			  <xsd:extension base="n:TClass_2">    
+    	    <xsd:sequence>
+    		    <xsd:element name="intFieldEx" type="xsd:int" />
+            <xsd:element name="strFieldEx" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+            <xsd:any processContents="skip" maxOccurs="unbounded"/>
+    	    </xsd:sequence>
+    	    <xsd:attribute name="strAttEx" type="xsd:string"/>
+    	    <xsd:attribute name="intAttEx" type="xsd:int"/>
+          <xsd:anyAttribute processContents="lax"/>
+        </xsd:extension>
+      </xsd:complexContent>
+    </xsd:complexType>
+        
+</xsd:schema>

+ 10 - 0
packages/fcl-sdo/tests/files/xsd/empty.xsd

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+ <xsd:schema xmlns:n="urn:wst-test" 
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+  targetNamespace="urn:wst-test">
+ </xsd:schema>
+<?xml version="1.0" encoding="UTF-8"?>
+ <xsd:schema xmlns:n="urn:wst-test" 
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+  targetNamespace="urn:wst-test">
+ </xsd:schema>

+ 22 - 0
packages/fcl-sdo/tests/files/xsd/import_base_library.xsd

@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<schema xmlns:tns="urn:base-library" 
+        xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+        targetNamespace="urn:base-library">
+  <xsd:complexType name="SampleBase_Type">
+    <xsd:sequence>
+      <xsd:element name="Name" type="xsd:string"/>
+      <xsd:element name="Identifier" type="xsd:int"/>
+    </xsd:sequence>
+  </xsd:complexType>
+</schema>
+<?xml version="1.0"?>
+<schema xmlns:tns="urn:base-library" 
+        xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+        targetNamespace="urn:base-library">
+  <xsd:complexType name="SampleBase_Type">
+    <xsd:sequence>
+      <xsd:element name="Name" type="xsd:string"/>
+      <xsd:element name="Identifier" type="xsd:int"/>
+    </xsd:sequence>
+  </xsd:complexType>
+</schema>

+ 32 - 0
packages/fcl-sdo/tests/files/xsd/import_second_library.xsd

@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<schema xmlns:tns="urn:second-library" 
+        xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+        xmlns:bx="urn:base-library"
+        targetNamespace="urn:second-library">
+  <xsd:import
+    namespace = "urn:base-library"
+    schemaLocation = "import_base_library.xsd"
+  />
+  
+  <xsd:complexType name="Second_Type">
+    <xsd:sequence>
+      <xsd:element name="SampleProperty" type="bx:SampleBase_Type"/>
+    </xsd:sequence>
+  </xsd:complexType>
+</schema>
+<?xml version="1.0"?>
+<schema xmlns:tns="urn:second-library" 
+        xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+        xmlns:bx="urn:base-library"
+        targetNamespace="urn:second-library">
+  <xsd:import
+    namespace = "urn:base-library"
+    schemaLocation = "import_base_library.xsd"
+  />
+  
+  <xsd:complexType name="Second_Type">
+    <xsd:sequence>
+      <xsd:element name="SampleProperty" type="bx:SampleBase_Type"/>
+    </xsd:sequence>
+  </xsd:complexType>
+</schema>

+ 40 - 0
packages/fcl-sdo/tests/files/xsd/simpletype.xsd

@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+ <xsd:schema xmlns:n="urn:wst-test" 
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+  targetNamespace="urn:wst-test">
+  
+	<xsd:simpleType name="EnumSampleType">
+		<xsd:restriction base="xsd:token">
+			<xsd:enumeration value="esOne"/>
+			<xsd:enumeration value="esTwo"/>
+			<xsd:enumeration value="esThree"/>
+      <xsd:enumeration value="begin"/>
+      <xsd:enumeration value="finally"/>
+      <xsd:enumeration value="True"/>
+      <xsd:enumeration value="False"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+  
+  <xsd:element name="EnumSample" type="n:EnumSampleType"/>
+  
+ </xsd:schema>
+<?xml version="1.0" encoding="UTF-8"?>
+ <xsd:schema xmlns:n="urn:wst-test" 
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+  targetNamespace="urn:wst-test">
+  
+	<xsd:simpleType name="EnumSampleType">
+		<xsd:restriction base="xsd:token">
+			<xsd:enumeration value="esOne">	</xsd:enumeration>
+			<xsd:enumeration value="esTwo">	</xsd:enumeration>
+			<xsd:enumeration value="esThree">	</xsd:enumeration>
+      <xsd:enumeration value="begin">	</xsd:enumeration>
+      <xsd:enumeration value="finally">	</xsd:enumeration>
+      <xsd:enumeration value="True">	</xsd:enumeration>
+      <xsd:enumeration value="False">	</xsd:enumeration>
+		</xsd:restriction>
+	</xsd:simpleType>
+  
+  <xsd:element name="EnumSample" type="n:EnumSampleType"/>
+  
+ </xsd:schema>

+ 18 - 0
packages/fcl-sdo/tests/files/xsd/simpletypeNativeAlias.xsd

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+ <xsd:schema 
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+  targetNamespace="urn:wst-test">
+  
+  <xsd:element name="AliasString" type="xsd:string"/>
+  <xsd:element name="AliasInt" type="xsd:int"/>
+  
+ </xsd:schema>
+<?xml version="1.0" encoding="UTF-8"?>
+ <xsd:schema 
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+  targetNamespace="urn:wst-test">
+  
+  <xsd:element name="AliasString" type="xsd:string"/>
+  <xsd:element name="AliasInt" type="xsd:int"/>
+  
+ </xsd:schema>

+ 40 - 0
packages/fcl-sdo/tests/files/xsd/simpletype_embedded.xsd

@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+ <xsd:schema 
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+  targetNamespace="urn:wst-test">
+  
+  <xsd:element name="EnumSampleType">
+  	<xsd:simpleType>
+  		<xsd:restriction base="xsd:token">
+  			<xsd:enumeration value="esOne">	</xsd:enumeration>
+  			<xsd:enumeration value="esTwo">	</xsd:enumeration>
+  			<xsd:enumeration value="esThree">	</xsd:enumeration>
+        <xsd:enumeration value="begin">	</xsd:enumeration>
+        <xsd:enumeration value="finally">	</xsd:enumeration>
+        <xsd:enumeration value="True">	</xsd:enumeration>
+        <xsd:enumeration value="False">	</xsd:enumeration>
+  		</xsd:restriction>
+  	</xsd:simpleType>
+  </xsd:element>
+  
+ </xsd:schema>
+<?xml version="1.0" encoding="UTF-8"?>
+ <xsd:schema 
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+  targetNamespace="urn:wst-test">
+  
+  <xsd:element name="EnumSampleType">
+  	<xsd:simpleType>
+  		<xsd:restriction base="xsd:token">
+  			<xsd:enumeration value="esOne">	</xsd:enumeration>
+  			<xsd:enumeration value="esTwo">	</xsd:enumeration>
+  			<xsd:enumeration value="esThree">	</xsd:enumeration>
+        <xsd:enumeration value="begin">	</xsd:enumeration>
+        <xsd:enumeration value="finally">	</xsd:enumeration>
+        <xsd:enumeration value="True">	</xsd:enumeration>
+        <xsd:enumeration value="False">	</xsd:enumeration>
+  		</xsd:restriction>
+  	</xsd:simpleType>
+  </xsd:element>
+  
+ </xsd:schema>

+ 5 - 5
packages/fcl-sdo/tests/test_suite/projects/testrunner.pp

@@ -7,13 +7,13 @@ uses HeapTrc,
   custapp, Classes, SysUtils, fpcunit, testregistry, xmltestreport, plaintestreport,
 
   sdo, sdo_datafactory, sdo_dataobject,
-  sdo_dataobjectlist, sdo_field_imp, sdo_imp_utils, sdo_linked_list,
-  sdo_property, sdo_type, test_type, test_field_imp, test_dataobjectlist,
+  sdo_field_imp, sdo_imp_utils, sdo_linked_list,
+  sdo_type, test_type, test_field_imp, test_dataobjectlist,
   test_dataobject, test_utils, test_xsdhelper, test_serializer,
   test_equalityhelper, test_changesummary, test_suite_utils, sdo_xsd_helper,
-  test_xpathhelper, sdo_xpath_helper, sdo_copyhelper, test_copyhelper,
-  sdo_consts, sdo_equalityhelper, sdo_serialization, sdo_serialization_utils,
-  sdo_types, sdo_utils, sdo_changesummary, sdo_convert_helper,
+  test_xpathhelper, sdo_xpath_helper, test_copyhelper,
+  sdo_consts, sdo_serialization, sdo_serialization_utils,
+  sdo_types, sdo_utils, sdo_changesummary,
   sdo_serialization_xml, test_convert_helper, test_property, test_xsdparser;
 
 

+ 2 - 2
packages/fcl-sdo/tests/test_suite/test_changesummary.pas

@@ -539,8 +539,8 @@ type
 implementation
 
 uses
-  sdo_datafactory, Math, sdo_copyhelper, sdo_equalityhelper,
-  sdo_consts, sdo_convert_helper, DateUtils, sdo_date_utils;
+  sdo_datafactory, Math,
+  sdo_consts, DateUtils, sdo_date_utils;
 
 const
   s_uri              = 'urn-test';

+ 7 - 4
packages/fcl-sdo/tests/test_suite/test_convert_helper.pas

@@ -10,7 +10,7 @@ uses
 {$IFNDEF FPC}
   ,TestFrameWork
 {$ENDIF}
-  , test_suite_utils, sdo, sdo_types, sdo_convert_helper ;
+  , test_suite_utils, sdo, sdo_types;
 
 type
 
@@ -570,14 +570,17 @@ var
   i : Integer;
 begin
   locObj := getObject();
+
+  buff := nil;
+  strBuff := locObj.BytesToString(buff);
+  CheckEquals('', strBuff);
+
   SetLength(buff,LEN);
   for i := 0 to Pred(LEN) do
     buff[i] := ( i mod High(TSDOByte) );
 
-  CheckEquals('', locObj.BytesToString(nil));
-
   SetLength(ansiStrBuff,LEN * 2);
-  BinToHex(PAnsiChar(buff),PAnsiChar(ansiStrBuff),LEN);
+  BinToHex(PAnsiChar(@buff[Low(buff)]),PAnsiChar(@ansiStrBuff[1]),LEN);
   strBuff := ansiStrBuff;
   CheckEquals(strBuff,locObj.BytesToString(buff));
 end;

+ 1 - 1
packages/fcl-sdo/tests/test_suite/test_copyhelper.pas

@@ -10,7 +10,7 @@ uses
 {$IFNDEF FPC}
   ,TestFrameWork
 {$ENDIF}
-  , sdo, sdo_types, sdo_copyhelper, sdo_equalityhelper, test_suite_utils ;
+  , sdo, sdo_types, test_suite_utils ;
 
 type
 

+ 2 - 2
packages/fcl-sdo/tests/test_suite/test_dataobjectlist.pas

@@ -9,7 +9,7 @@ uses SysUtils
 {$IFNDEF FPC}
   ,TestFrameWork
 {$ENDIF}
-  , test_suite_utils, sdo, sdo_type, sdo_types, sdo_dataobjectlist, sdo_linked_list ;
+  , test_suite_utils, sdo, sdo_type, sdo_types, sdo_linked_list ;
 
 type
 
@@ -160,7 +160,7 @@ implementation
 
 uses
   Math, sdo_datafactory, sdo_dataobject,
-  sdo_equalityhelper, DateUtils, sdo_date_utils;
+  DateUtils, sdo_date_utils;
 
 const s_URI_1  = 'uri:1';
       s_TYPE_1 = 'type1';

+ 1 - 1
packages/fcl-sdo/tests/test_suite/test_equalityhelper.pas

@@ -10,7 +10,7 @@ uses
 {$IFNDEF FPC}
   ,TestFrameWork
 {$ENDIF}
-  , sdo, sdo_types, sdo_equalityhelper, test_suite_utils;
+  , sdo, sdo_types, test_suite_utils;
 
 type
 

+ 9 - 5
packages/fcl-sdo/tests/test_suite/test_field_imp.pas

@@ -284,8 +284,7 @@ type
 implementation
 
 uses
-  sdo_imp_utils, sdo_datafactory, sdo_changesummary, sdo_date_utils, DateUtils,
-  sdo_convert_helper;
+  sdo_imp_utils, sdo_datafactory, sdo_changesummary, sdo_date_utils, DateUtils;
 
 const s_URI_1  = 'uri:1'; s_URI_3 = 'uri:3';
       s_TYPE_1 = 'type1'; s_TYPE_2 = 'type2'; s_TYPE_3 = 'type3';
@@ -8975,6 +8974,7 @@ var
   trueBuffer : array[0..100] of Byte;
   buffer, tmpBuffer, attributeBuffer : PByte;
   valBuffer : PPSDOBytes;
+  s : TSDOString;
 begin
   SetConstants();
 
@@ -9001,7 +9001,9 @@ begin
     valBuffer^^ := VAL_2;
       SetBit(attributeBuffer^,BIT_ORDER_SET,True);
         SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
-        CheckEquals(BytesToString(VAL_2),obj.getString(buffer,F_OFFSET_0));
+        s := obj.getString(buffer,F_OFFSET_0);
+        CheckEquals(BytesToString(VAL_2),s,'x1');
+        //CheckEquals(BytesToString(VAL_2),obj.getString(buffer,F_OFFSET_0),'1');
       SetBit(attributeBuffer^,BIT_ORDER_SET,False);
         SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
         CheckEquals(BytesToString(VAL_2),obj.getString(buffer,F_OFFSET_0));
@@ -9039,7 +9041,9 @@ begin
     valBuffer^^ := VAL_2;
       SetBit(attributeBuffer^,BIT_ORDER_SET,True);
         SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
-        CheckEquals(BytesToString(VAL_2),obj.getString(buffer,F_OFFSET_1));
+        s := obj.getString(buffer,F_OFFSET_0);
+        CheckEquals(BytesToString(VAL_2),s);
+        //CheckEquals(BytesToString(VAL_2),obj.getString(buffer,F_OFFSET_1));
       SetBit(attributeBuffer^,BIT_ORDER_SET,False);
         SetBit(attributeBuffer^,BIT_ORDER_NULL,False);
         CheckEquals(BytesToString(VAL_2),obj.getString(buffer,F_OFFSET_1));
@@ -10269,4 +10273,4 @@ initialization
 {$IFDEF HAS_SDO_FLOAT}
   RegisterTest(TSDOFloatField_Test.GetTestSuitePath(),TSDOFloatField_Test.Suite);
 {$ENDIF HAS_SDO_FLOAT}
-end.
+end.

+ 2 - 2
packages/fcl-sdo/tests/test_suite/test_property.pas

@@ -9,7 +9,7 @@ uses SysUtils
 {$IFNDEF FPC}
   ,TestFrameWork
 {$ENDIF}
-  ,test_suite_utils, sdo, sdo_type, sdo_types, sdo_property ;
+  ,test_suite_utils, sdo, sdo_type, sdo_types;
 
 type
 
@@ -1032,4 +1032,4 @@ end;
 initialization
   RegisterTest('Metadata',TSDOProperty_Test.Suite);
 
-end.
+end.

File diff suppressed because it is too large
+ 2707 - 30
packages/fcl-sdo/tests/test_suite/test_serializer.pas


+ 4 - 0
packages/fcl-sdo/tests/test_suite/test_suite_utils.pas

@@ -106,6 +106,8 @@ begin
     SetLength(locRes, ( 2 * Length(AValue) ) );
     BinToHex(PAnsiChar(@(AValue[0])),PAnsiChar(@(locRes[1])),Length(AValue));
     Result := locRes;
+  end else begin
+    Result := '';
   end;
 end;
 
@@ -117,6 +119,8 @@ begin
     SetLength(locRes, ( 2 * Length(AValue) ) );
     BinToHex(PAnsiChar(@(AValue[0])),PAnsiChar(@(locRes[1])),Length(AValue));
     Result := locRes;
+  end else begin
+    Result := '';
   end;
 end;
 

+ 2 - 2
packages/fcl-sdo/tests/test_suite/test_utils.pas

@@ -41,8 +41,8 @@ type
 
 implementation
 uses
-  Contnrs, sdo_imp_utils, sdo, sdo_dataobjectlist, sdo_datafactory,
-  sdo_copyhelper, Math, test_suite_utils;
+  Contnrs, sdo_imp_utils, sdo, sdo_datafactory, sdo_dataobject,
+  Math, test_suite_utils;
 
 
 const

+ 1 - 1
packages/fcl-sdo/tests/test_suite/test_xpathhelper.pas

@@ -78,7 +78,7 @@ type
 implementation
 
 uses
-  sdo_datafactory, sdo_date_utils, sdo_convert_helper;
+  sdo_datafactory, sdo_date_utils;
 
 const
   s_uri              = 'urn-test';

+ 16 - 16
packages/fcl-sdo/tests/test_suite/test_xsdhelper.pas

@@ -76,7 +76,7 @@ uses
 {$ENDIF}
   sdo_xsdintf,
   test_suite_utils, sdo_datafactory, sdo_xsdparser, sdo_type, xsd_consts,
-  parserutils;
+  sdo_parserutils;
 
 
 const
@@ -369,7 +369,7 @@ procedure TXsdHelper_Test.GenerateFile();
 var
   helper : IXSDHelper;
   fct : ISDODataFactory;
-  xsdPrsr : IXsdPaser;
+  xsdPrsr : IXsdParser;
   locTree : ISDODataObject;
   locDoc : TXMLDocument;
   locFileName : string;
@@ -385,7 +385,7 @@ begin
     locPasFactory := TSDODataFactory.Create();
     AddTypeTree(locPasFactory);
     locTree := locPasFactory.CreateNew(s_XsdParserNS,s_TypeTreeType);
-    xsdPrsr := TXsdParser.Create(locDoc,locTree,'') as IXsdPaser;
+    xsdPrsr := TXsdParser.Create(locDoc,locTree,'') as IXsdParser;
     xsdPrsr.ParseTypes();
     CompareModule(locTree.getDataObject(s_CurrentModule),fct,locTree);
   finally
@@ -398,7 +398,7 @@ procedure TXsdHelper_Test.GenerateStream();
 var
   helper : IXSDHelper;
   fct : ISDODataFactory;
-  xsdPrsr : IXsdPaser;
+  xsdPrsr : IXsdParser;
   locTree : ISDODataObject;
   locDoc : TXMLDocument;
   locStream : TStringStream;
@@ -416,7 +416,7 @@ begin
       locPasFactory := TSDODataFactory.Create();
       AddTypeTree(locPasFactory);
       locTree := locPasFactory.CreateNew(s_XsdParserNS,s_TypeTreeType);
-      xsdPrsr := TXsdParser.Create(locDoc,locTree,'') as IXsdPaser;
+      xsdPrsr := TXsdParser.Create(locDoc,locTree,'') as IXsdParser;
       xsdPrsr.ParseTypes();
       CompareModule(locTree.getDataObject(s_CurrentModule),fct,locTree);
     finally
@@ -432,7 +432,7 @@ procedure TXsdHelper_Test.GenerateString();
 var
   helper : IXSDHelper;
   fct : ISDODataFactory;
-  xsdPrsr : IXsdPaser;
+  xsdPrsr : IXsdParser;
   locTree : ISDODataObject;
   locDoc : TXMLDocument;
   locStream : TStringStream;
@@ -452,7 +452,7 @@ begin
       locPasFactory := TSDODataFactory.Create();
       AddTypeTree(locPasFactory);
       locTree := locPasFactory.CreateNew(s_XsdParserNS,s_TypeTreeType);
-      xsdPrsr := TXsdParser.Create(locDoc,locTree,'') as IXsdPaser;
+      xsdPrsr := TXsdParser.Create(locDoc,locTree,'') as IXsdParser;
       xsdPrsr.ParseTypes();
       CompareModule(locTree.getDataObject(s_CurrentModule),fct,locTree);
     finally
@@ -473,7 +473,7 @@ procedure TXsdHelper_Test.LoadFromFile();
 var
   helper : IXSDHelper;
   fct : ISDODataFactory;
-  xsdPrsr : IXsdPaser;
+  xsdPrsr : IXsdParser;
   locTree : ISDODataObject;
   locDoc : TXMLDocument;
   locPasFactory : ISDODataFactory;
@@ -488,7 +488,7 @@ begin
   locTree := locPasFactory.CreateNew(s_XsdParserNS,s_TypeTreeType);
   try
     ReadXMLFile(locDoc,GetFileName());
-    xsdPrsr := TXsdParser.Create(locDoc,locTree,'') as IXsdPaser;
+    xsdPrsr := TXsdParser.Create(locDoc,locTree,'') as IXsdParser;
     xsdPrsr.ParseTypes();
     CompareModule(locTree.getDataObject(s_CurrentModule),fct,locTree);
   finally
@@ -501,7 +501,7 @@ procedure TXsdHelper_Test.LoadFromStream();
 var
   helper : IXSDHelper;
   fct : ISDODataFactory;
-  xsdPrsr : IXsdPaser;
+  xsdPrsr : IXsdParser;
   locTree : ISDODataObject;
   locDoc : TXMLDocument;
   locStream : TMemoryStream;
@@ -521,7 +521,7 @@ begin
     locTree := locPasFactory.CreateNew(s_XsdParserNS,s_TypeTreeType);
     try
       ReadXMLFile(locDoc,GetFileName());
-      xsdPrsr := TXsdParser.Create(locDoc,locTree,'') as IXsdPaser;
+      xsdPrsr := TXsdParser.Create(locDoc,locTree,'') as IXsdParser;
       xsdPrsr.ParseTypes();
       CompareModule(locTree.getDataObject(s_CurrentModule),fct,locTree);
     finally
@@ -538,7 +538,7 @@ procedure TXsdHelper_Test.LoadFromString();
 var
   helper : IXSDHelper;
   fct : ISDODataFactory;
-  xsdPrsr : IXsdPaser;
+  xsdPrsr : IXsdParser;
   locTree : ISDODataObject;
   locDoc : TXMLDocument;
   locStream : TMemoryStream;
@@ -561,7 +561,7 @@ begin
     locTree := locPasFactory.CreateNew(s_XsdParserNS,s_TypeTreeType);
     try
       ReadXMLFile(locDoc,GetFileName());
-      xsdPrsr := TXsdParser.Create(locDoc,locTree,'') as IXsdPaser;
+      xsdPrsr := TXsdParser.Create(locDoc,locTree,'') as IXsdParser;
       xsdPrsr.ParseTypes();
       CompareModule(locTree.getDataObject(s_CurrentModule),fct,locTree);
     finally
@@ -739,7 +739,7 @@ procedure TXsdHelper_Test.TypeDerivation();
 var
   helper : IXSDHelper;
   fct : ISDODataFactory;
-  xsdPrsr : IXsdPaser;
+  xsdPrsr : IXsdParser;
   locTree : ISDODataObject;
   locDoc : TXMLDocument;
   locFileName : string;
@@ -755,7 +755,7 @@ begin
     locPasFactory := TSDODataFactory.Create();
     AddTypeTree(locPasFactory);
     locTree := locPasFactory.CreateNew(s_XsdParserNS,s_TypeTreeType);
-    xsdPrsr := TXsdParser.Create(locDoc,locTree,'') as IXsdPaser;
+    xsdPrsr := TXsdParser.Create(locDoc,locTree,'') as IXsdParser;
     xsdPrsr.ParseTypes();
     CompareModule(s_uri,FindModule(locTree,s_uri),fct);
   finally
@@ -787,7 +787,7 @@ procedure TXsdHelper_Test.TypeDerivation2();
 var
   helper : IXSDHelper;
   fct, fctLoaded : ISDODataFactory;
-  xsdPrsr : IXsdPaser;
+  xsdPrsr : IXsdParser;
   locTree : ISDODataObject;
   locFileName : string;
 begin

+ 2 - 2
packages/fcl-sdo/tests/test_suite/test_xsdparser.pas

@@ -103,7 +103,7 @@ type
 
 implementation
 uses
-  xsd_consts, sdo_xsdintf, test_suite_utils, sdo_datafactory, locators, sdo_imp_utils;
+  xsd_consts, sdo_xsdintf, test_suite_utils, sdo_datafactory, sdo_locators, sdo_imp_utils;
 
 const
   x_complexType_SampleArrayIntFieldType     = 'TArrayIntFieldType';
@@ -1196,7 +1196,7 @@ end;
 function TTest_XsdParser.ParseDoc(var AFactory : ISDODataFactory; const ADoc: string): ISDODataObject;
 var
   locDoc : TXMLDocument;
-  prs : IXsdPaser;
+  prs : IXsdParser;
   prsCtx : IParserContext;
   fileName : string;
 begin

Some files were not shown because too many files changed in this diff