File: reference.xml

package info (click to toggle)
php-doc 20061001-1
  • links: PTS
  • area: non-free
  • in suites: etch, etch-m68k
  • size: 45,764 kB
  • ctags: 1,611
  • sloc: xml: 502,485; php: 7,645; cpp: 500; makefile: 297; perl: 161; sh: 141; awk: 28
file content (1070 lines) | stat: -rw-r--r-- 32,903 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision: 1.18 $ -->
<!-- Purpose: xml -->
<!-- Membership: pecl -->
<!-- State: experimental -->

<reference id="ref.sdo-das-xml">
 <title>SDO XML Data Access Service Functions</title>
 <titleabbrev>SDO DAS XML</titleabbrev>

 <partintro>
  <section id="sdo-das-xml.intro">
   &reftitle.intro;
   <para>
    <!-- This warns that the extension is experimental -->
    &warn.experimental;
   </para>
   <para>
    In order to use the XML Data Access Service for Service Data Objects,
    you will need to understand some of the concepts behind SDO:
    the data graph, the data object, XPath and property expressions,
    and so on.
    If you are not familiar with these ideas, you might want to look first at
    <link linkend='ref.sdo'>the section on SDO</link>.
   </para>
   <para>
    The job of the XML DAS is to move data between the
    application and an XML data source, which can be either a file or
    a URL. SDOs are always created and maintained according to a model 
    which defines type names and what property names each type may have.
    For data which is from XML, this SDO model is built from a schema file 
    written in XML schema language (an xsd file). This schema file is 
    usually passed to the create method when the XMLDAS is initialised. 
    The 
    <ulink url='&url.ibm.sdo;'>SDO 2.0 specification</ulink>
    defines the mapping between XML types and SDO types.
    There are a number of small limitations in the PHP support -
    not everything which is in the specification can be done - and
    these limitations are summarised in a later section.
   </para>
  </section>

  <section id="sdo-das-xml.requirements">
   &reftitle.required;
   <para>
    The SDO XML Data Access Service requires PHP 5.1 or higher.
    It is packaged with the SDO extension and requires
    SDO to have been installed.
    See the
    <link linkend="sdo.installation">SDO installation instructions</link>
    for the details of how to do this.
   </para>
  </section>

  <section id="sdo-das-xml.installation">
   &reftitle.install;
   <para>
    The XML Data Access Service is packaged and installed as part of the
    <link linkend='ref.sdo'>SDO extension</link>. Please Refer 
    <link linkend="sdo.installation">SDO installation instructions</link>.
   </para>
  </section>
 
  <section id='sdo-das-xml.examples'>
   &reftitle.examples;
   <para>
    Several of the following examples are based on the
    <link linkend="sdo.sample.sequence">letter example</link>
    described in the
    <link linkend="ref.sdo">SDO documentation</link>.
    The examples assume the XML Schema for the letter is contained in a file
    <filename>letter.xsd</filename>
    and the letter instance is in the file
    <filename>letter.xml</filename>.
    These two files are reproduced here:
   </para>
   <para>
    <programlisting role="xml">
<![CDATA[
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:letter="http://letterSchema"
  targetNamespace="http://letterSchema">
  <xsd:element name="letters" type="letter:FormLetter"/>
  <xsd:complexType name="FormLetter" mixed="true">
    <xsd:sequence>
      <xsd:element name="date" minOccurs="0" type="xsd:string"/>
      <xsd:element name="firstName" minOccurs="0" type="xsd:string"/>
      <xsd:element name="lastName" minOccurs="0" type="xsd:string"/>
    </xsd:sequence>
  </xsd:complexType>
</xsd:schema>
]]>
    </programlisting>
   </para>
 
   <para>
    <programlisting role="xml">
<![CDATA[
<letter:letters xmlns:letter="http://letterSchema">
  <date>March 1, 2005</date>
  Mutual of Omaha
  Wild Kingdom, USA
  Dear
  <firstName>Casy</firstName>
  <lastName>Crocodile</lastName>
  Please buy more shark repellent.
  Your premium is past due.
</letter:letters>
]]>
    </programlisting>
   </para>
    
   <example>
    <title>Loading, altering, and saving an XML document</title>
    
    <para>
     The following example shows how an XML document can be loaded from a file,
     altered, and written back. 
    </para>

    <programlisting role="php" id="sdo-das-xml.examples.loadfromfile">
     <![CDATA[
<?php
/**
 * Load, update, and save an XML document
 */
try {
   $xmldas = SDO_DAS_XML::create("letter.xsd");
   $document = $xmldas->loadFile("letter.xml");
   $root_data_object = $document->getRootDataObject();
   $root_data_object->date = "September 03, 2004";
   $root_data_object->firstName = "Anantoju";
   $root_data_object->lastName = "Madhu";
   $xmldas->saveFile($document, "letter-out.xml");
   echo "New file has been written:\n";
   print file_get_contents("letter-out.xml");
} catch (SDO_Exception $e) {
   print($e->getMessage());
}
?> ]]>
    </programlisting>

    <para>
     An instance of the XML DAS is first obtained from the 
     <function>SDO_DAS_XML::create</function>
     method, 
     which is a static method of the 
     <classname>SDO_DAS_XML</classname>
     class.
     The location of the xsd is passed as a parameter. 
     Once we have an instance of the XML DAS initialised
     with a given schema,
     we can use it to load the instance document using the 
     <function>loadFile</function>
     method.
     There is also a 
     <function>loadString</function>
     method if you want to load an XML 
     instance document from a string.
     If the instance document loads successfully, 
     you will be returned an object of type 
     <classname>SDO_DAS_XML_Document</classname>,
     on which you can call the 
     <function>getRootDataObject</function>
     method to get the SDO data object which is the root
     of the SDO data graph. 
     You can then use SDO operations to change the graph. 
     In this example we alter the 
     <varname>date</varname>, 
     <varname>firstName</varname>, and
     <varname>lastName</varname> properties.
     Then we use the 
     <function>saveFile</function>
     method to write the changed document back to the file system.
     The saveFile method has an optional extra integer argument which if specified
     will cause the XML DAS to format the XML, using the integer as the amount to 
     indent by at each change in level on the document. 
    </para>

    <para>
     This will write the following to <filename>letter-out.xml</filename>.
    </para>

    <programlisting role="xml" id="sdo-das-xml.examples.loadfromfile.output">
     <![CDATA[
<?xml version="1.0" encoding="UTF-8"?>
<FormLetter xmlns="http://letterSchema" xsi:type="FormLetter" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <date>September 03, 2004</date>
  Mutual of Omaha
  Wild Kingdom, USA
  Dear
  <firstName>Anantoju</firstName>
  <lastName>Madhu</lastName>
  Please buy more shark repellent.
  Your premium is past due.
</FormLetter>     
]]>
   </programlisting>
    
   </example>

   <example>

    <title>Creating a new XML document</title>

    <para>
     The previous example loaded the document from a file. 
     This example shows how to create an SDO data graph in memory.
     In this example it is then saved to an XML string.
     Furthermore, because the letter contains both structured and 
     unstructured content, it uses
     <link linkend="sdo.sample.sequence">the Sequence API</link>
     as well assignments to properties to construct the data graph.
    </para>

    <programlisting role="php" id="sdo-das-xml.examples.create">
     <![CDATA[
<?php
/**
 * Create an XML document from scratch
 */
try {
   $xmldas = SDO_DAS_XML::create("letter.xsd");
   try {
       $doc = $xmldas->createDocument();
       $rdo = $doc->getRootDataObject();
       $seq = $rdo->getSequence();
       $seq->insert("April 09, 2005", NULL, 'date');
       $seq->insert("Acme Inc. ", NULL, NULL);
       $seq->insert("United Kingdom. ");
       $seq->insert("Dear", NULL, NULL);
       $seq->insert("Tarun", NULL, "firstName");
       $seq->insert("Nayaraaa", NULL, "lastName");
       $rdo->lastName = "Nayar";
       $seq->insert("Please note that your order number ");
       $seq->insert(12345);
       $seq->insert(" has been dispatched today. Thanks for your business with us.");
       print($xmldas->saveString($doc));
   } catch (SDO_Exception $e) {
       print($e);
   }
} catch (SDO_Exception $e) {
   print("Problem creating an XML document: " . $e->getMessage());
}
?>
     ]]>
    </programlisting>

   </example>

   <para>
    The 
    <function>createDocument</function>
    method on the XML DAS returns a document object 
    with a single root data object corresponding to an empty document element. 
    The element name of the document element is known from the schema file. 
    If there is any ambiguity about what the document element is, as there can be 
    when more than one schema has been loaded into the same XML DAS, 
    the element name and the namespace URI can be passed to the 
    <function>createDocument</function> 
    method.
   </para>

   <para>
    This will emit the following output (line breaks have been inserted for readability):
   </para>

   <programlisting role="xml" id="sdo-das-xml.examples.create.output">
     <![CDATA[
<?xml version="1.0" encoding="UTF-8"?>
<FormLetter xmlns="http://letterSchema" xsi:type="FormLetter" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<date>April 09, 2005</date>
Acme Inc. United Kingdom. 
Dear
<firstName>Tarun</firstName>
<lastName>Nayar</lastName>
Please note that your order number 12345 has been 
dispatched today. Thanks for your business with us.
</FormLetter>
]]>
   </programlisting>


   <example>

    <title>Setting XML document properties</title>

    <para>
     This third example shows you how to set the XML version and
     encoding on the document object. 
     These will be used when the XML is written out.
     If no XML declaration is wanted at all
     (perhaps you want to generate the XML as a string to embed
     in something) then you can use the 
     <function>setXMLDeclaration</function>
     method to suppress it. 
    </para>

    <programlisting role="php" id="sdo-das-xml.examples.Example3">
     <![CDATA[
<?php
/**
 * Illustrate the calls that control the XML declaration
 */
   $xmldas = SDO_DAS_XML::create("letter.xsd");
   $document = $xmldas->loadFile("letter.xml");
   $document->setXMLVersion("1.1");
   $document->setEncoding("ISO-8859-1");
   print($xmldas->saveString($document));
?> ]]>
    </programlisting>

    <para>
     The XML version and encoding are set in the XML declaration at the top 
     of the XML document.
    </para>

    <programlisting role="xml" id="sdo-das-xml.examples.sdo_das_xml_document.output">
<![CDATA[
<?xml version="1.1" encoding="ISO-8859-1"?>
.../...
]]>
   </programlisting>
    
   </example>
   
   
   <example>
    <title>Using an open type</title>
    <para>
     This fourth example illustrates the use of an SDO open type 
     and the use of the 
     <function>createDataObject</function>
     method.
     For this example we use the following two 
     schema:
   </para>
   <para>
    <programlisting role="xml">
<![CDATA[
<schema  
  xmlns="http://www.w3.org/2001/XMLSchema">
  
  <element name="jungle">
    <complexType>
      <sequence>
        <any minOccurs="0" maxOccurs="unbounded"/>
      </sequence>
    </complexType>
  </element>
  
</schema>
]]>
    </programlisting>
   </para>

   <para>
     Note the presence of the 
     <varname>any</varname> 
     element in the definition.
     This first schema defines the 
     <varname>jungle</varname> 
     complex type as containing a sequence of 
     any other type. 
     The other types that the example will use are defined in a 
     second schema file:
    </para>
     
   <para>
    <programlisting role="xml">
<![CDATA[
<schema xmlns= "http://www.w3.org/2001/XMLSchema">

   <complexType name="snakeType">
     <sequence>
       <element name= "name" type="string"/>
       <element name= "length" type="positiveInteger" />
     </sequence>
   </complexType>

   <complexType name="bearType">
     <sequence>
       <element name= "name" type="string"/>
       <element name= "weight" type="positiveInteger" />
     </sequence>
   </complexType>

   <complexType name="pantherType">
     <sequence>
       <element name= "name" type="string"/>
       <element name= "colour" type="string" />
     </sequence>
   </complexType>

</schema>
]]>
    </programlisting>
   </para>
     
   <para>
    Here is the example PHP code that uses these two schema files:
   </para>
   
   <para>
    <programlisting role="php" id="sdo-das-xml.examples.Example4">
     <![CDATA[
<?php

/**
 * Illustrate open types and the use of the addTypes() method
 */

$xmldas = SDO_DAS_XML::create();
$xmldas->addTypes("jungle.xsd"); // this is an open type i.e. the xsd specifies it can contain "any" type
$xmldas->addTypes('animalTypes.xsd');

$baloo 			= $xmldas->createDataObject('','bearType');
$baloo->name 	= "Baloo";
$baloo->weight 	= 800;

$bagheera 		= $xmldas->createDataObject('','pantherType');
$bagheera->name = "Bagheera";
$bagheera->colour = 'inky black';

$kaa 			= $xmldas->createDataObject('','snakeType');
$kaa->name 		= "Kaa";
$kaa->length 	= 25;

$document 		= $xmldas->createDocument();
$do 			= $document->getRootDataObject();
$do->bear 		= $baloo;
$do->panther 	= $bagheera;
$do->snake 		= $kaa;

print($xmldas->saveString($document,2));

?>			
 ]]>
    </programlisting>
   </para>
   <para>
    These two schema files are loaded into the XML DAS with first the 
    <function>create</function> 
    and 
    <function>addTypes</function>
     methods. 
    The 
    <function>createDataObject</function> 
    method is used to create three separate data objects. 
    In each case the namespaceURI and typename of the type are passed to the 
    <function>createDataObject</function> 
    method: in this example the namespace URI is blank because no
    namespace is used in the schema. 
    Once the three data objects - representing a bear, a panther and a snake - 
    have been created, a document object is created with the 
    <function>createDocument</function> 
    method. 
    In this case there is no ambiguity about what the document element of the
    document should be - as the second schema file only defines complex types, 
    the document element can only be the global 
    <varname>jungle</varname> 
    element defined 
    in the first schema. 
    This document will have a single root data object corresponding to an 
    empty document element <varname>jungle</varname>. 
    As this is an open type, properties can be added at will. 
    When the first assignment is made to <varname>$do->bear</varname>,
    a property 
    <varname>bear</varname> 
    is added to the root data object: 
    likewise for the next two assignments.
    When the document is written out by the 
    <function>saveString</function> 
    method, the resulting document is:
   </para>
   
   <para>
    <programlisting role="xml">
<![CDATA[
<?xml version="1.0" encoding="UTF-8"?>
<jungle xsi:type="jungle" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <bear xsi:type="bearType">
    <name>Baloo</name>
    <weight>800</weight>
  </bear>
  <panther xsi:type="pantherType">
    <name>Bagheera</name>
    <colour>inky black</colour>
  </panther>
  <snake xsi:type="snakeType">
    <name>Kaa</name>
    <length>25</length>
  </snake>
</jungle>
]]>
    </programlisting>
   </para>
       
   </example>

   <example>

    <title>Finding out what you can from the document</title>

    <para>
     This example is intended to illustrate how you can find the 
     element name and 
     namespace of the document element from the XML Document object, and 
     the SDO type and namespace from the root data object of the XML data 
     object, and how they relate to one another.
     This can be difficult to understand because there are four method calls:
     two can be made against the Document object, and two that can be made 
     against any data object including the root data object.
     Because of the rules that define how the SDO model is derived
     from the XML model, when the data object concerned is the 
     root object that represents the document object for the document, 
     only three possible values can come back from these 
     four method calls.
     
    </para>

    <para>
     The two method calls that can be made against the document
     are <function>getRootElementName</function> and
     <function>getRootEelementURI</function>.
     These return the element name and namespace of the document element,
     respectively. 
    </para>
    
    <para>
     The two method calls that can be made against any data object are 
     <function>getTypeName</function>
     and 
     <function>getTypeNamespaceURI</function>.
     These return the SDO type name and type namespace of the data object, 
     respectively.
    </para>
    
    <para>
     Always, calling <function>getRootElementURI</function>
     on the document object will return the same value as 
     calling <function>getNamespaceURI</function> on the
     root data object. 
     Essentially, the information is all derived from the first few lines of the 
     schema file,
     where there are three distinct pieces of information.
     For illustration, here again are the first few lines of the 
     letter.xsd that we used above.
    </para>
    
    <programlisting role="xml">
<![CDATA[
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:letter="http://letterSchema"
            targetNamespace="http://letterSchema">
            
  <xsd:element name="letters" type="letter:FormLetter"/>
  
  <xsd:complexType name="FormLetter" mixed="true">
    .../...
]]>
    </programlisting>
 
   <para>
    The three important values are:    
    <itemizedlist>
     <listitem>
      <para>
       <varname>letters</varname>, the name of the document element
      </para>
     </listitem>
     <listitem>
      <para>
       <varname>FormLetter</varname>, the name of the complex type of the document element.
       This is also the name of the SDO type of the root data object.
      </para>
     </listitem>
     <listitem>
      <para>
       <varname>http://letterSchema</varname>, the namespace to which the document element belongs.
       This is also the namespaceURI of the SDO type of the root data object.
      </para>
     </listitem>
    </itemizedlist>
    It is part of the XML-SDO mapping rules that 
    when the SDO model is built from the schema file,
    the typename and namespaceURI of the SDO types for the root element
    are taken
    from those of the complex type of the document element, where it exists.
    Hence in this example the typename of the root data object is FormLetter.
    In the event that there is no separate complex type definition
    for the document element, when the the type is defined inline and is 
    anonymous, 
    the SDO type name will be the same as the element name. 
   </para>
   
   <para>
    The following program loads the letter document and checks the 
    return values from each of the four calls. 
   </para> 
    <programlisting role="php" id="sdo-das-xml.examples.Example5">
     <![CDATA[
<?php
/**
 * Finding out what you can about the document and document element
 * This can be quite hard to understand because there are four calls
 * Two calls are made against the document
 * Two calls are made against the root data object and its model
 * Because of the SDO-XML mapping rules and how the SDO model is derived
 * from the XML model, only three possible values can come back from these four calls.
 * Always, $document->getRootElementURI() == (type of root data object)->namespaceURI 
 * Essentially, it all comes form the first few lines of the xsd:
 * <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 *   xmlns:letter="http://letterSchema"
 *   targetNamespace="http://letterSchema">
 *   <xsd:element name="letters" type="letter:FormLetter"/>
 */

$xmldas = SDO_DAS_XML::create("letter.xsd");
$document = $xmldas->loadFile("letter.xml");
$root_do = $document->getRootDataObject();

/**
 * The "root element name" is the element name of the document element
 * in this case 'letters'
 * This matches the 'name' attribute of the document element in the xsd and matches
 * the element name from the xml
 */
echo "The document element name is " . $document->getRootElementName() . "\n";
assert($document->getRootElementName() == 'letters'); // a property of the document

/**
 * The "root element URI" is the namespace part of the element name of the document element
 * in this case 'http://letterSchema' since 'letters' is in that namespace
 * This is taken from the xsd and matches the namespace picked up from the xml
 */
echo "The document element is in the namespace " . $document->getRootElementURI() . "\n";
assert($document->getRootElementURI() == 'http://letterSchema'); // a property of the document

/**
 * The type name is taken from the SDO model
 * The XML-SDO mapping rules make this either:
 *   The name of the complexType if there is one (in this case there is)
 *   The document element name if there no complexType
 * This is taken from the xsd 
 */
echo "The type name of the root data object is " . $root_do->getTypeName() . "\n";
assert($root_do->getTypeName() == 'FormLetter');  

/**
 * The type's namespaceURI is taken from the SDO model
 * The XML-SDO mapping rules ensure that this will always be the same as 
 * the namepace URI of the document element
 */
echo "The namespaceURI of the root data object is " . $root_do->getTypeNamespaceURI() . "\n";
assert($root_do->getTypeNamespaceURI() == 'http://letterSchema'); 

?>
  ]]>
    </programlisting>
    <para>
     The output from this program is as follows:
   </para>
   <programlisting role="xml" id="sdo-das-xml.examples.Example5.output">
<![CDATA[
The document element name is letters
The document element is in the namespace http://letterSchema
The type name of the root data object is FormLetter
The namespaceURI of the root data object is http://letterSchema
]]>
   </programlisting>
    
   </example>
   
   <example>

    <title>Printing the SDO model</title>

    <para>
     The XML DAS provides a simple means to see what types and properties 
     have been loaded. The php "print" or "echo" instruction will 
     print out the types and properties. 
    </para>

    <programlisting role="php" id="sdo-das-xml.examples.Example6">
     <![CDATA[
<?php
/**
 * Illustrate printing out the model
 */

$xmldas = SDO_DAS_XML::create("letter.xsd");
print $xmldas;

?>
]]>
    </programlisting>

    <para>
     The output from this program is as follows:
   </para>
   <programlisting role="xml" id="sdo-das-xml.examples.Example6.output">
<![CDATA[
object(SDO_XML_DAS)#1 {
18 types have been defined. The types and their properties are::
1. commonj.sdo:BigDecimal
2. commonj.sdo:BigInteger
3. commonj.sdo:Boolean
4. commonj.sdo:Byte
5. commonj.sdo:Bytes
6. commonj.sdo:ChangeSummary
7. commonj.sdo:Character
8. commonj.sdo:DataObject
9. commonj.sdo:Date
10. commonj.sdo:Double
11. commonj.sdo:Float
12. commonj.sdo:Integer
13. commonj.sdo:Long
14. commonj.sdo:Short
15. commonj.sdo:String
16. commonj.sdo:URI
17. http://letterSchema:FormLetter
    - date (commonj.sdo:String)
    - firstName (commonj.sdo:String)
    - lastName (commonj.sdo:String)
18. http://letterSchema:RootType
    - letters (http://letterSchema:FormLetter)
]]>
   </programlisting>

   </example>

   
  </section>


  <!-- class definition section -->
  <section id='sdo-das-xml.classes'>
  &reftitle.classes;
   <para>
    The XML DAS provides two main classes.
    The first is SDO_DAS_XML which is the main class used to fetch the
    data from the XML source and used to write the data back.
    The second is the SDO_DAS_XML_Document class,
    which represents the data in the XML document.
   </para>
   <para>
    There are also some exception classes which can be thrown
    if errors are found when looking for or parsing the xsd or 
    xml files. 
   </para>

   <section id='sdo-das-xml.class.sdo_das_xml'>
    <title>
     <classname>SDO_DAS_XML</classname>
    </title>
    <para>
     This is the main class of the XML DAS,
     which is used fetch the data from the xml source
     and also used to write the data back.
     Other than the methods to load and save xml files,
    </para>
    <section id='sdo-das-xml.class.SDO_DAS_XML.methods'>
     &reftitle.methods;

     <itemizedlist>

      <listitem>
       <para>
        <link linkend='function.SDO-DAS-XML-create'>create</link>
        This is a static method available in the SDO_DAS_XML class.
        Used to construct an SDO_DAS_XML object.
       </para>
      </listitem>
      <listitem>
       <para>
        <link linkend='function.SDO-DAS-XML-addTypes'>addTypes</link>
        Works in much the same way as <function>create</function> but used
        to add the contents of a second or subsequent schema file to 
        an XML DAS that has already been created.
       </para>
      </listitem>
      <listitem>
       <para>
        <link linkend='function.SDO-DAS-XML-createDataObject'>createDataObject</link>
        Can be used to construct an SDO data object of a given type.
       </para>
      </listitem>
      <listitem>
       <para>
        <link linkend='function.SDO-DAS-XML-createDocument'>createDocument</link>
        Can be used to construct an XML Document object from scratch.
       </para>
      </listitem>
      <listitem>
       <para>
        <link linkend='function.SDO-DAS-XML-loadFile'>loadFile</link>
        Loads the xml instance document from a file.
        This file can be at local file system or it can be on a remote host.
       </para>
      </listitem>
      <listitem>
       <para>
        <link linkend='function.SDO-DAS-XML-loadString'>loadString</link>
        same as the above method.
        Loads the xml instance which is available as string.
       </para>
      </listitem>
      <listitem>
       <para>
        <link linkend='function.SDO-DAS-XML-saveFile'>saveFile</link>
        save SDO_DAS_XML_Document object as a xml file.
       </para>
      </listitem>
      <listitem>
       <para>
        <link linkend='function.SDO-DAS-XML-saveString'>saveString</link>
        save SDO_DAS_XML_Document object as a xml string.
       </para>
      </listitem>

     </itemizedlist>

    </section>
   </section>


   <section id='sdo-das-xml.class.sdo_das_xml_document'>
    <title>
     <classname>SDO_DAS_XML_Document</classname>
    </title>
    <para>
     This class can be used to get to the name and namespace of the document element,
     and to get to the root data object of the document. 
     Lastly, it can also be used to set the XML version and encoding
     of a document on output.
    </para>
    <section id='sdo-das-xml.class.SDO_DAS_XML_Document.methods'>
     &reftitle.methods;
     <itemizedlist>
      <listitem>
       <para>
        <link linkend='function.SDO-DAS-XML-Document-getRootDataObject'>getRootDataObject</link>
        gets the root DataObject.
       </para>
      </listitem>
      <listitem>
       <para>
        <link linkend='function.SDO-DAS-XML-Document-getRootElementName'>getRootElementName</link>
        gets the root DataObject's name.
       </para>
      </listitem>

      <listitem>
       <para>
        <link linkend='function.SDO-DAS-XML-Document-getRootElementURI'>getRootElementURI</link>
        gets the root DataObject's URI.
       </para>
      </listitem>

      <listitem>
       <para>
        <link linkend='function.SDO-DAS-XML-Document-setEncoding'>setEncoding</link>
        sets the encoding string with the given value.
       </para>
      </listitem>

      <listitem>
       <para>
        <link linkend='function.SDO-DAS-XML-Document-setXMLDeclaration'>setXMLDeclaraion</link>
        to set/unset the xml declaration.
       </para>
      </listitem>

      <listitem>
       <para>
        <link linkend='function.SDO-DAS-XML-Document-setXMLVersion'>setXMLVersion</link>
        sets the xml version with the given value.
       </para>
      </listitem>
     </itemizedlist>
    </section>
   </section>

   <section id='sdo-das-xml.class.sdo_das_xml_parserexception'>
    <title>
     <classname>SDO_DAS_XML_ParserException</classname>
    </title>
    <para>
     Is a subclass of
     <classname>SDO_Exception</classname>.
     Thrown for any parser errors while loading the xsd/xml file.
    </para>
   </section>

   <section id='sdo-das-xml.class.sdo_das_xml_fileexception'>
    <title>
     <classname>SDO_DAS_XML_FileException</classname>
    </title>
    <para>
     Is a subclass of
     <classname>SDO_Exception</classname>.
     Thrown by any of the methods that load data from a file, when the file
     cannot be found. 
    </para>
   </section>

  </section>

  <section id='sdo-das-xml.limitations'>
   <title>Limitations compared with SDO 2.0 specification</title>
   <para>
    The 
    <ulink url='&url.ibm.sdo;'>SDO 2.0 specification</ulink>
    defines the mapping between XML types and SDO types.
    With Java SDO, this mapping is implemented by the XMLHelper.
    With SDO for PHP, this mapping is implemented by the
    XML Data Access Service.
    The XML DAS implements the mapping described in the
    SDO 2.0 specification with some restrictions. 
    A detailed list is of the limitations is:
   </para>

   <procedure id='sdo-das-xml.limitations.simpletypes'>
    <title>XML Simple Types</title>
    <step>
     <para>
      Simple Type with sdoJava:instanceClass
      - no PHP equivalent provided.
     </para>
    </step>
    <step>
     <para>
      Simple Type with sdoJava:extendedInstanceClass
      - no PHP equivalent provided.
     </para>
    </step>
    <step>
     <para>
      Simple Type with list of itemType.
     </para>
    </step>
    <step>
     <para>
      Simple Type with union.
     </para>
    </step>
   </procedure>

   <procedure id='sdo-das-xml.limitations.complextypes'>
    <title>XML Complex Types</title>
    <step>
     <para>
      Complex Type with sdo:aliasName
      - no PHP support for SDO Type aliases.
     </para>
    </step>
   </procedure>

   <procedure id='sdo-das-xml.limitations.attribute'>
    <title>XSD Attribute</title>
    <step>
     <para>
      Attribute with sdo:aliasName
      - no PHP support for SDO property aliases.
     </para>
    </step>
    <step>
     <para>
      Attribute with default value
      - no PHP support for SDO property defaults.
     </para>
    </step>
    <step>
     <para>
      Attribute with fixed value
      - no PHP support for SDO read-only properties or default values.
     </para>
    </step>
    <step>
     <para>
      Attribute referencing a DataObject with
      sdo:propertyType - no support for sdo:propertyType="...".
     </para>
    </step>
    <step>
     <para>
      Attribute with bi-directional property to a DataObject with
      sdo:oppositeProperty and sdo:propertyType
      - no PHP support for SDO opposite.
     </para>
    </step>
   </procedure>

   <procedure id='sdo-das-xml.limitations.elements'>
    <title>XSD Elements</title>
    <step>
     <para>
      Element with sdo:aliasName
      - no PHP support for SDO property aliases.
     </para>
    </step>
    <step>
     <para>
      Element with substitution group.
     </para>
    </step>
   </procedure>

   <procedure id='sdo-das-xml.limitations.elementsimpletype'>
    <title>XSD Elements with Simple Type</title>
    <step>
     <para>
      Element of SimpleType with default
      - no PHP support for SDO defaults
     </para>
    </step>
    <step>
     <para>
      Element of SimpleType with fixed value
      - no PHP support for SDO read-only properties or default values.
     </para>
    </step>
    <step>
     <para>
      Element of SimpleType with sdo:string
      - no support for sdo:string="true".
     </para>
    </step>
    <step>
     <para>
      Element referencing a DataObject with
      sdo:propertyType  - no support for sdo:propertyType="..."
     </para>
    </step>
    <step>
     <para>
      Element with bi-directional reference to a DataObject with
      sdo:oppositeProperty and sdo:propertyType
      - no PHP support for SDO opposite.
     </para>
    </step>
   </procedure>
  </section>

 </partintro>
 &reference.sdo-das-xml.functions;
</reference>

<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->