simple.pas 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. program simple;
  2. {$mode objfpc}{$H+}
  3. uses
  4. SysUtils,
  5. sdo, sdo_datafactory, sdo_serialization,
  6. sdo_serialization_xml, sdo_xsd_helper;
  7. const
  8. s_manager = 'Manager';
  9. s_is_manager = 'IsManager';
  10. s_member = 'Member';
  11. s_name = 'Name';
  12. s_person_type = 'Person';
  13. s_project_leader = 'ProjectLeader';
  14. s_project_list_type = 'ProjectList';
  15. s_project_name = 'ProjectName';
  16. s_project = 'Project';
  17. s_project_type = 'ProjectType';
  18. s_uri = 'uri:sample';
  19. procedure PopulateFactoryByCode(AFactory : ISDODataFactory);
  20. begin
  21. // add the types
  22. AFactory.AddType(s_uri,s_project_list_type,[]);
  23. AFactory.AddType(s_uri,s_project_type,[]);
  24. AFactory.AddType(s_uri,s_person_type,[]);
  25. // Fill the informations of the project list type
  26. AFactory.addProperty(s_uri,s_project_list_type,s_project,s_uri,s_project_type,[pfIsMany,pfIsContainment]);
  27. // Fill the informations of the project type
  28. AFactory.addProperty(s_uri,s_project_type,s_project_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  29. AFactory.addProperty(s_uri,s_project_type,s_member,s_uri,s_person_type,[pfIsMany,pfIsContainment]);
  30. AFactory.addProperty(s_uri,s_project_type,s_project_leader,s_uri,s_person_type,[]);
  31. // Fill the informations of the person type
  32. AFactory.addProperty(s_uri,s_person_type,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  33. AFactory.addProperty(s_uri,s_person_type,s_is_manager,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsAttribute]);
  34. AFactory.addProperty(s_uri,s_person_type,s_manager,s_uri,s_person_type,[]);
  35. end;
  36. procedure GenerateSchemaFileFromFactory(AFactory : ISDODataFactory; AFileName : string);
  37. var
  38. xsdHelper : IXSDHelper;
  39. begin
  40. xsdHelper := TXSDHelper.Create(AFactory);
  41. xsdHelper.Generate(AFactory.getTypes(),s_uri,AFileName);
  42. end;
  43. procedure PopulateFactoryBySchemaFile(AFactory : ISDODataFactory; AFileName : string);
  44. var
  45. xsdHelper : IXSDHelper;
  46. begin
  47. xsdHelper := TXSDHelper.Create(AFactory);
  48. xsdHelper.LoadFromFile(AFileName);
  49. end;
  50. procedure MainProc();
  51. var
  52. fact : ISDODataFactory;
  53. projList, proj, pers,b : ISDODataObject;
  54. serializer : ISDOSerializer;
  55. locSchemaFileName : string;
  56. begin
  57. fact := TSDODataFactory.Create();
  58. locSchemaFileName := ExpandFileName('.' + PathDelim + 'schema.xsd');
  59. PopulateFactoryByCode(fact);
  60. GenerateSchemaFileFromFactory(fact,locSchemaFileName);
  61. WriteLn('Schema file generated !');
  62. projList := fact.createNew(s_uri,s_project_list_type);
  63. //Add some data
  64. proj := projList.createDataObject(s_project);
  65. //add the project object to the list
  66. projList.getList(s_project).append(proj);
  67. proj.setString(s_project_name,'WST');
  68. pers := proj.createDataObject(s_member);
  69. proj.getList(s_member).append(pers);
  70. pers.setString(s_name,'Inoussa O.');
  71. pers.setBoolean(s_is_manager,True);
  72. //Add some data
  73. proj := projList.createDataObject(s_project);
  74. //add the project object to the list
  75. projList.getList(s_project).append(proj);
  76. proj.setString(s_project_name,'sample project');
  77. pers := proj.createDataObject(s_member);
  78. proj.getList(s_member).append(pers);
  79. pers.setString(s_name,'Inoussa O.');
  80. pers.setBoolean(s_is_manager,True);
  81. pers := proj.createDataObject(s_member);
  82. proj.getList(s_member).append(pers);
  83. pers.setString(s_name,'David KIS');
  84. // this demonstrates object finding by sdo xpath expression
  85. pers.setDataObject(s_manager,proj.getDataObject('Member[Name="Inoussa O."]'));
  86. pers := proj.createDataObject(s_member);
  87. proj.getList(s_member).append(pers);
  88. pers.setString(s_name,'Kis');
  89. pers.setBoolean(s_is_manager,False);
  90. // this demonstrates object finding by sdo xpath expression
  91. pers.setDataObject(s_manager,projList.getDataObject('Project[0]/Member[Name="Inoussa O."]'));
  92. projList.setDataObject('Project[0]/ProjectLeader',projList.getDataObject('Project[0]/Member[Name="Inoussa O."]'));
  93. proj := projList.createDataObject(s_project);
  94. projList.getList(s_project).append(proj);
  95. proj.setString(s_project_name,'SDO');
  96. pers := proj.createDataObject(s_member);
  97. proj.getList(s_member).append(pers);
  98. pers.setString(s_name,'SDO dev manager');
  99. pers.setBoolean(s_is_manager,True);
  100. pers := proj.createDataObject(s_member);
  101. proj.getList(s_member).append(pers);
  102. pers.setString(s_name,'SDO dev 1');
  103. pers.setDataObject(s_manager,projList.getDataObject('Project[ProjectName="SDO"]/Member[Name="SDO dev manager"]'));
  104. pers := proj.createDataObject(s_member);
  105. proj.getList(s_member).append(pers);
  106. pers.setString(s_name,'SDO dev 2');
  107. pers.setDataObject(s_manager,projList.getDataObject('Project[2]/Member[Name="SDO dev manager"]'));
  108. proj.setDataObject('ProjectLeader',proj.getDataObject('Member[Name="SDO dev manager"]'));
  109. //save it now to file
  110. serializer := TSDOSerializer.Create(fact,TSDOSerializerStreamXML.Create());
  111. serializer.setOptions([]);
  112. serializer.save(s_project_list_type,projList,'data-with-schema.xml');
  113. serializer.setOptions([soExcludeSchema]);
  114. serializer.save(s_project_list_type,projList,'data-without-schema.xml');
  115. WriteLn('Data files created.');
  116. end;
  117. begin
  118. MainProc();
  119. end.