@@ -66,6 +66,26 @@ class DHS
66
66
const kDHS_URL_INDICATORS =
67
67
'http://api.dhsprogram.com/rest/dhs/indicators/fields?f=json ' ;
68
68
69
+ /**
70
+ * <h4>DHS data descriptors URL.</h4>
71
+ *
72
+ * This constant holds the <i>DHS data descriptors URL</i>.
73
+ *
74
+ * @var string
75
+ */
76
+ const kDHS_URL_DATA_INDICATORS =
77
+ 'http://api.dhsprogram.com/rest/dhs/data/fields?f=json ' ;
78
+
79
+ /**
80
+ * <h4>DHS country descriptors URL.</h4>
81
+ *
82
+ * This constant holds the <i>DHS country descriptors URL</i>.
83
+ *
84
+ * @var string
85
+ */
86
+ const kDHS_URL_COUNTRY_INDICATORS =
87
+ 'http://api.dhsprogram.com/rest/dhs/countries/fields?f=json ' ;
88
+
69
89
/**
70
90
* <h4>Wrapper object.</h4>
71
91
*
@@ -215,8 +235,8 @@ public function InitTypes()
215
235
$ ns [ kTAG_LID ] = self ::kDHS_NAMESPACE;
216
236
$ ns [ kTAG_NAME ] = [ 'en ' => "Demographic and Health Surveys (DHS) Program " ];
217
237
$ ns [ kTAG_DESCRIPTION ] = [ 'en ' => "This namespace groups all metadata " .
218
- "regarding the USAID Demographic and Health " .
219
- "Surveys " ];
238
+ "regarding the USAID Demographic and Health " .
239
+ "Surveys " ];
220
240
$ ns ->Store ();
221
241
222
242
//
@@ -291,15 +311,15 @@ public function InitTypes()
291
311
292
312
293
313
/*===================================================================================
294
- * InitBaseDescriptors *
314
+ * InitIndicators *
295
315
*==================================================================================*/
296
316
297
317
/**
298
318
* <h4>Initialise base descriptors.</h4>
299
319
*
300
320
* This method will load the base descriptors and load the descriptor match table.
301
321
*/
302
- public function InitBaseDescriptors ()
322
+ public function InitIndicators ()
303
323
{
304
324
//
305
325
// Init local storage.
@@ -418,7 +438,7 @@ public function InitBaseDescriptors()
418
438
$ terms ->FindByKey (
419
439
$ descriptor [ kTAG_GID ],
420
440
[ kTOKEN_OPT_MANY => FALSE ,
421
- kTOKEN_OPT_FORMAT => kTOKEN_OPT_FORMAT_HANDLE ] ),
441
+ kTOKEN_OPT_FORMAT => kTOKEN_OPT_FORMAT_HANDLE ] ),
422
442
$ handle );
423
443
$ pred ->Store ();
424
444
$ this ->mDatabase ->SetDescriptor ( $ descriptor );
@@ -441,9 +461,133 @@ public function InitBaseDescriptors()
441
461
} // Setting enumerated types.
442
462
443
463
} // Loading descriptors.
444
- print_r ( $ this ->mDatabase ->GetDescriptor ( "@9 " ) );
445
464
446
- } // InitBaseDescriptors.
465
+ } // InitIndicators.
466
+
467
+
468
+ /*===================================================================================
469
+ * InitDataIndicators *
470
+ *==================================================================================*/
471
+
472
+ /**
473
+ * <h4>Initialise data descriptors.</h4>
474
+ *
475
+ * This method will load the data descriptors and load the descriptor match table.
476
+ */
477
+ public function InitDataIndicators ()
478
+ {
479
+ //
480
+ // Init local storage.
481
+ //
482
+ $ types = $ this ->mDatabase ->NewTypesCollection ();
483
+ $ terms = $ this ->mDatabase ->NewTermsCollection ();
484
+ $ descriptors = $ this ->mDatabase ->NewDescriptorsCollection ();
485
+
486
+ //
487
+ // Load base descriptors.
488
+ //
489
+ $ indicators =
490
+ json_decode ( file_get_contents ( self ::kDHS_URL_DATA_INDICATORS ), TRUE )
491
+ [ 'Data ' ];
492
+
493
+ //
494
+ // Load match table.
495
+ //
496
+ foreach ( $ indicators as $ indicator )
497
+ {
498
+ //
499
+ // Init descriptor.
500
+ //
501
+ $ descriptor = new \Milko \PHPLib \Descriptor ( $ descriptors );
502
+
503
+ //
504
+ // Set identifiers.
505
+ //
506
+ $ descriptor [ kTAG_NS ] = self ::kDHS_NAMESPACE;
507
+ $ descriptor [ kTAG_LID ] = $ indicator [ 'fieldname ' ];
508
+ $ descriptor [ kTAG_SYMBOL ] = $ indicator [ 'fieldname ' ];
509
+
510
+ //
511
+ // Set names.
512
+ //
513
+ $ descriptor [ kTAG_NAME ] = [ 'en ' => $ indicator [ 'fieldname ' ] ];
514
+ $ descriptor [ kTAG_DESCRIPTION ] =
515
+ [ 'en ' => str_replace ( "\t" , '' , $ indicator [ 'fieldDescription ' ] ) ];
516
+
517
+ //
518
+ // Set data types.
519
+ //
520
+ switch ( $ indicator [ 'fieldname ' ] )
521
+ {
522
+ case 'Indicator ' :
523
+ case 'CountryName ' :
524
+ case 'SurveyId ' :
525
+ case 'IndicatorId ' :
526
+ case 'CharacteristicLabel ' :
527
+ case 'ByVariableLabel ' :
528
+ case 'SurveyYearLabel ' :
529
+ $ descriptor [ kTAG_DATA_TYPE ] = kTYPE_STRING;
530
+ $ descriptor [ kTAG_DATA_KIND ] = [ kKIND_DISCRETE ];
531
+ break ;
532
+
533
+ case 'CharacteristicCategory ' :
534
+ case 'CharacteristicId ' :
535
+ case 'RegionId ' :
536
+ case 'SurveyType ' :
537
+ $ descriptor [ kTAG_DATA_TYPE ] = kTYPE_STRING;
538
+ $ descriptor [ kTAG_DATA_KIND ] = [ kKIND_CATEGORICAL, kKIND_SUMMARY ];
539
+ break ;
540
+
541
+ case 'DataId ' :
542
+ case 'Precision ' :
543
+ case 'SurveyYear ' :
544
+ case 'CharacteristicOrder ' :
545
+ case 'ByVariableId ' :
546
+ $ descriptor [ kTAG_DATA_TYPE ] = kTYPE_INT;
547
+ $ descriptor [ kTAG_DATA_KIND ] = [ kKIND_DISCRETE ];
548
+ break ;
549
+
550
+ case 'DenominatorWeighted ' :
551
+ case 'DenominatorUnweighted ' :
552
+ $ descriptor [ kTAG_DATA_TYPE ] = kTYPE_INT;
553
+ $ descriptor [ kTAG_DATA_KIND ] = [ kKIND_QUANTITATIVE ];
554
+ break ;
555
+
556
+ case 'Value ' :
557
+ case 'CILow ' :
558
+ case 'CIHigh ' :
559
+ $ descriptor [ kTAG_DATA_TYPE ] = kTYPE_FLOAT;
560
+ $ descriptor [ kTAG_DATA_KIND ] = [ kKIND_QUANTITATIVE ];
561
+ break ;
562
+
563
+ case 'DHS_CountryCode ' :
564
+ $ descriptor [ kTAG_DATA_TYPE ] = kTYPE_ENUM;
565
+ $ descriptor [ kTAG_DATA_KIND ] = [ kKIND_CATEGORICAL ];
566
+ break ;
567
+
568
+ case 'IsTotal ' :
569
+ case 'IsPreferred ' :
570
+ $ descriptor [ kTAG_DATA_TYPE ] = kTYPE_BOOLEAN;
571
+ $ descriptor [ kTAG_DATA_KIND ] = [ kKIND_DISCRETE ];
572
+ break ;
573
+
574
+ } // Setting data types.
575
+
576
+ //
577
+ // Store descriptor.
578
+ //
579
+ $ handle = $ descriptor ->Store ();
580
+
581
+ //
582
+ // Set match table entry.
583
+ //
584
+ if ( ! array_key_exists ( $ indicator [ 'fieldname ' ], $ this ->mMatchTable ) )
585
+ $ this ->mMatchTable [ $ indicator [ 'fieldname ' ] ]
586
+ = $ descriptor [ $ descriptors ->KeyOffset () ];
587
+
588
+ } // Loading descriptors.
589
+
590
+ } // InitDataIndicators.
447
591
448
592
449
593
0 commit comments