author | ymh <ymh.work@gmail.com> |
Tue, 17 Nov 2015 13:11:55 +0100 | |
changeset 18 | f2a40bbc27f6 |
child 19 | eadaf0b8f02e |
permissions | -rw-r--r-- |
18
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
1 |
<?php |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
2 |
namespace CorpusParole\Libraries\Mergers; |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
3 |
|
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
4 |
|
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
5 |
use EasyRdf\RdfNamespace; |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
6 |
use EasyRdf\Graph; |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
7 |
|
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
8 |
RdfNamespace::set('edm', 'http://www.europeana.eu/schemas/edm/'); |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
9 |
RdfNamespace::set('ore', 'http://www.openarchives.org/ore/terms/'); |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
10 |
RdfNamespace::set('crdo', 'http://crdo.risc.cnrs.fr/schemas/'); |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
11 |
RdfNamespace::set('olac', 'http://www.language-archives.org/OLAC/1.1/'); |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
12 |
RdfNamespace::set('skos', 'http://www.w3.org/2004/02/skos/core#'); |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
13 |
|
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
14 |
abstract class CocoonAbstractRdfMerger implements RdfMerger { |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
15 |
|
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
16 |
const ORIGIN_BASE = 0; |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
17 |
const ORIGIN_SRC = 1; |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
18 |
|
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
19 |
abstract protected function getTypeMergeMethodMap(); |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
20 |
|
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
21 |
/** |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
22 |
* Merge an Rdf Graph from one model to another |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
23 |
* |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
24 |
* @param EasyRdf\Graph $baseGraph The graph used as base for the merge |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
25 |
* @param EasyRdf\Graph $srcGraph The source graph with the new triples to add |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
26 |
* |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
27 |
* @return EasyRdf\Graph The new merged graph |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
28 |
*/ |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
29 |
function mergeGraph($baseGraph, $srcGraph) { |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
30 |
|
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
31 |
$this->mergedArray = []; |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
32 |
$this->resGraph = new Graph($baseGraph->getUri()); |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
33 |
$this->bnodeMerge = []; |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
34 |
$this->baseGraph = $baseGraph; |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
35 |
$this->srcGraph = $srcGraph; |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
36 |
|
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
37 |
|
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
38 |
$typeMergeMethodMap = $this->getTypeMergeMethodMap(); |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
39 |
|
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
40 |
foreach ( $typeMergeMethodMap as $nodeType => $mergeMethod) { |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
41 |
|
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
42 |
foreach($baseGraph->allOfType($nodeType) as $baseResource) { |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
43 |
if($baseResource->isBNode()) { |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
44 |
continue; |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
45 |
} |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
46 |
$this->mergedArray[$baseResource->getUri()] = $baseGraph->toRdfPhp()[$baseResource->getUri()]; |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
47 |
} |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
48 |
foreach($srcGraph->allOfType($nodeType) as $srcResource) { |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
49 |
if($baseResource->isBNode()) { |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
50 |
continue; |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
51 |
} |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
52 |
if(empty($baseGraph->propertyUris($srcResource->getUri()))) { |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
53 |
$this->mergedArray[$srcResource->getUri()] = $srcGraph->toRdfPhp()[$srcResource->getUri()]; |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
54 |
} |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
55 |
else { |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
56 |
$baseResource = $baseGraph->resource($srcResource->getUri()); |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
57 |
$this->mergedArray[$srcResource->getUri()] = $baseGraph->toRdfPhp()[$baseResource->getUri()]; |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
58 |
call_user_func(array($this, $mergeMethod), $baseResource, $srcResource); |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
59 |
} |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
60 |
} |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
61 |
} |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
62 |
|
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
63 |
// merge blank node |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
64 |
reset($this->bnodeMerge); |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
65 |
while(list($bnodeId, $bnodeDef) = each($this->bnodeMerge)) { |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
66 |
|
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
67 |
$srcUrl = isset($bnodeDef['src_url'])?$bnodeDef['src_url']:null; |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
68 |
$baseUrl = isset($bnodeDef['base_url'])?$bnodeDef['base_url']:null; |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
69 |
|
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
70 |
if(is_null($srcUrl) && !is_null($baseUrl)) { |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
71 |
$this->mergedArray[$bnodeId] = $this->copyResource($baseGraph->toRdfPhp()[$baseUrl],CocoonAbstractRdfMerger::ORIGIN_BASE); |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
72 |
} |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
73 |
elseif (is_null($baseUrl) && !is_null($srcUrl)) { |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
74 |
$this->mergedArray[$bnodeId] = $this->copyResource($srcGraph->toRdfPhp()[$srcUrl],CocoonAbstractRdfMerger::ORIGIN_SRC); |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
75 |
} |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
76 |
elseif (!is_null($baseUrl) && !is_null($srcUrl)) { |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
77 |
|
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
78 |
$baseResource = $baseGraph->resource($baseUrl); |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
79 |
$srcResource = $srcGraph->resource($srcUrl); |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
80 |
|
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
81 |
$mergeMethod = $typeMergeMethodMap[$baseResource->typeAsResource()->getUri()]; |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
82 |
$this->mergedArray[$bnodeId] = []; |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
83 |
|
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
84 |
call_user_func(array($this, $mergeMethod), $baseResource, $srcResource, $bnodeId); |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
85 |
|
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
86 |
} |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
87 |
|
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
88 |
} |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
89 |
|
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
90 |
//echo "MERGED ARRAY:\n"; |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
91 |
$this->resGraph->parse($this->mergedArray); |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
92 |
return $this->resGraph; |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
93 |
} |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
94 |
|
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
95 |
/** |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
96 |
* Copy a full resource node |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
97 |
* |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
98 |
*/ |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
99 |
protected function copyResource($origArray, $origin) { |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
100 |
$resArray = []; |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
101 |
foreach($origArray as $prop => $propValues) { |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
102 |
$resArray[$prop] = $this->buildValueList($propValues, $origin); |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
103 |
} |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
104 |
return $resArray; |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
105 |
} |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
106 |
|
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
107 |
/** |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
108 |
* Build a value list. replace the blank node reference. |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
109 |
* @param $srcValues array The original values |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
110 |
* @param $origin int values are 'ORIGIN_BASE' if bnode from base graph or 'ORIGIN_SRC' from source graph |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
111 |
*/ |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
112 |
protected function buildValueList($srcValues, $origin) { |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
113 |
$srcArrayProps = []; |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
114 |
foreach ($srcValues as $propValue) { |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
115 |
if(is_array($propValue) && array_key_exists('type', $propValue) && $propValue['type'] == 'bnode') { |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
116 |
$newBNodeId = $this->resGraph->newBNodeId(); |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
117 |
if($origin == CocoonAbstractRdfMerger::ORIGIN_SRC) { |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
118 |
$this->bnodeMerge[$newBNodeId] = ['src_url' => $propValue['value'], 'base_url' => null]; |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
119 |
} |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
120 |
else { |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
121 |
$this->bnodeMerge[$newBNodeId] = ['base_url' => $propValue['value'], 'src_url' => null]; |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
122 |
} |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
123 |
|
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
124 |
$propValue['value'] = $newBNodeId; |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
125 |
} |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
126 |
$srcArrayProps[] = $propValue; |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
127 |
} |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
128 |
return $srcArrayProps; |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
129 |
} |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
130 |
|
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
131 |
protected function mergePropertySingleValue($prop, &$targetArray, $baseArray, $srcArray) { |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
132 |
|
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
133 |
if(isset($baseArray[$prop])) { |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
134 |
$targetArray[$prop] = $this->buildValueList($baseArray[$prop], CocoonAbstractRdfMerger::ORIGIN_BASE); |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
135 |
} |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
136 |
elseif(isset($srcArray[$prop])) { |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
137 |
$targetArray[$prop] = $this->buildValueList($srcArray[$prop], CocoonAbstractRdfMerger::ORIGIN_SRC); |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
138 |
} |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
139 |
} |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
140 |
|
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
141 |
protected function mergePropertyMultiplevalue($prop, &$targetArray, $baseArray, $srcArray) { |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
142 |
$propArray = $this->buildValueList(isset($baseArray[$prop])?$baseArray[$prop]:[], CocoonAbstractRdfMerger::ORIGIN_BASE); |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
143 |
if(isset($srcArray[$prop])) { |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
144 |
$mergedArray = array_merge($propArray, $this->buildValueList($srcArray[$prop], CocoonAbstractRdfMerger::ORIGIN_BASE)); |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
145 |
//yes, this is real. Array_unique does not work on multidimentional arrays. Most work-around suggest the use of serialize to compare sub arrays... |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
146 |
$propArray = array_values(array_intersect_key($mergedArray, array_unique(array_map('md5',array_map('serialize', $mergedArray))))); |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
147 |
} |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
148 |
|
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
149 |
if(!empty($propArray)) { |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
150 |
$targetArray[$prop] = $propArray; |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
151 |
} |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
152 |
} |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
153 |
|
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
154 |
protected function mergePropertySingleBNode($prop, &$targetArray, $baseArray, $srcArray) { |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
155 |
|
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
156 |
$newBNodeId = $this->resGraph->newBNodeId(); |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
157 |
|
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
158 |
$srcUrl = null; |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
159 |
$baseUrl = null; |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
160 |
|
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
161 |
// in src but not in base |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
162 |
if(array_key_exists($prop, $baseArray) && |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
163 |
!empty($baseArray[$prop]) && |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
164 |
array_key_exists('type',$baseArray[$prop][0]) && |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
165 |
array_key_exists('value',$baseArray[$prop][0]) && |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
166 |
$baseArray[$prop][0]['type'] === 'bnode') { |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
167 |
$baseUrl = $baseArray[$prop][0]['value']; |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
168 |
} |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
169 |
|
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
170 |
if(array_key_exists($prop, $srcArray) && |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
171 |
!empty($srcArray[$prop]) && |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
172 |
array_key_exists('type',$srcArray[$prop][0]) && |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
173 |
array_key_exists('value',$srcArray[$prop][0]) && |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
174 |
$srcArray[$prop][0]['type'] === 'bnode') { |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
175 |
$srcUrl = $srcArray[$prop][0]['value']; |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
176 |
} |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
177 |
|
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
178 |
$this->bnodeMerge[$newBNodeId] = ['src_url' => $srcUrl, 'base_url' => $baseUrl]; |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
179 |
|
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
180 |
$targetArray[$prop] = [ [ 'type' => 'bnode', 'value' => $newBNodeId], ]; |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
181 |
|
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
182 |
} |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
183 |
|
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
184 |
|
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
185 |
protected function mergeProperties($singleBNodeProperties, $singleProperties, &$targetArray, $baseRes, $srcRes) { |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
186 |
$srcArray = $this->srcGraph->toRdfPhp()[$srcRes->getUri()]; |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
187 |
$baseArray = $this->baseGraph->toRdfPhp()[$baseRes->getUri()]; |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
188 |
foreach($srcRes->propertyUris() as $prop) { |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
189 |
if(in_array($prop, $singleBNodeProperties)) { |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
190 |
$this->mergePropertySingleBNode($prop, $targetArray, $baseArray, $srcArray); |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
191 |
} |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
192 |
elseif(in_array($prop, $singleProperties)) { |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
193 |
$this->mergePropertySingleValue($prop, $targetArray, $baseArray, $srcArray); |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
194 |
} |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
195 |
else { |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
196 |
$this->mergePropertyMultiplevalue($prop, $targetArray, $baseArray, $srcArray); |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
197 |
} |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
198 |
} |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
199 |
} |
f2a40bbc27f6
add rdf mapper + merger + basic database model
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
200 |
} |