blob: 63085584105a3f3a4dd1a52826cfe273233ad3a7 (
plain)
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
|
<?php
namespace SMW\Serializers;
use OutOfBoundsException;
use Serializers\Serializer;
use SMW\SemanticData;
/**
* @license GNU GPL v2+
* @since 1.9
*
* @author mwjames
*/
class SemanticDataSerializer implements Serializer {
/**
* @see Serializer::serialize
*
* @since 1.9
*/
public function serialize( $semanticData ) {
if ( !$semanticData instanceof SemanticData ) {
throw new OutOfBoundsException( 'Object is not supported' );
}
return $this->doSerialize( $semanticData ) + [ 'serializer' => __CLASS__, 'version' => 2 ];
}
private function doSerialize( SemanticData $semanticData ) {
$data = [
'subject' => $semanticData->getSubject()->getSerialization(),
'data' => $this->doSerializeProperty( $semanticData )
];
$subobjects = $this->doSerializeSubSemanticData(
$semanticData->getSubSemanticData()
);
if ( $subobjects !== [] ) {
$data['sobj'] = $subobjects;
}
return $data;
}
/**
* Build property and dataItem serialization record
*
* @return array
*/
private function doSerializeProperty( $semanticData ) {
$properties = [];
foreach ( $semanticData->getProperties() as $property ) {
$properties[] = [
'property' => $property->getSerialization(),
'dataitem' => $this->doSerializeDataItem( $semanticData, $property )
];
}
return $properties;
}
/**
* Returns DataItem serialization
*
* @note 'type' is added to ensure that during unserialization the type
* definition of the requested data is in alignment with the definition found
* in the system (type changes that can occur during the time between
* serialization and unserialization)
*
* @return array
*/
private function doSerializeDataItem( $semanticData, $property ) {
$dataItems = [];
foreach ( $semanticData->getPropertyValues( $property ) as $dataItem ) {
$dataItems[] = [
'type' => $dataItem->getDIType(),
'item' => $dataItem->getSerialization()
];
}
return $dataItems;
}
/**
* Returns all subobjects of a SemanticData instance
*
* @return array
*/
protected function doSerializeSubSemanticData( $subSemanticData ) {
$subobjects = [];
foreach ( $subSemanticData as $semanticData ) {
$subobjects[] = $this->doSerialize( $semanticData );
}
return $subobjects;
}
}
|