19declare(strict_types=1);
49 \SimpleXMLElement $xml,
52 $set = $this->scaffold_provider->set();
55 if (!empty($xml->Lifecycle)) {
58 if (!empty($xml->{
'Meta-Metadata'})) {
59 $this->prepareAddingOfMetaMetadata($set, $xml->{
'Meta-Metadata'});
61 if (!empty($xml->Technical)) {
62 $this->prepareAddingOfTechnical($set, $xml->Technical);
64 if (!empty($xml->Educational)) {
65 $this->prepareAddingOfEducational($set, $xml->Educational);
67 if (!empty($xml->Rights)) {
68 $this->prepareAddingOfRights($set, $xml->Rights);
70 foreach ($xml->Relation as $relation_xml) {
71 $this->prepareAddingOfRelation($set, $relation_xml);
73 foreach ($xml->Annotation as $annotation_xml) {
74 $this->prepareAddingOfAnnotation($set, $annotation_xml);
76 foreach ($xml->Classification as $classification_xml) {
77 $this->prepareAddingOfClassification($set, $classification_xml);
85 \SimpleXMLElement $xml
87 $general = $this->addScaffoldAndMark($set->getRoot(),
'general');
89 foreach ($xml->Identifier as $identifier_xml) {
90 $this->prepareAddingOfIdentifier(
$general, $identifier_xml);
93 $this->prepareAddingOfLangstring(
'title',
$general, $xml->Title);
95 foreach ($xml->Language as $language_xml) {
96 $this->addScaffoldAndMark(
$general,
'language', (
string) $language_xml->attributes()->Language);
99 foreach ($xml->Description as $description_xml) {
100 $this->prepareAddingOfLangstring(
'description',
$general, $description_xml);
103 foreach ($xml->Keyword as $keyword_xml) {
104 $this->prepareAddingOfLangstring(
'keyword',
$general, $keyword_xml);
107 if (!empty($xml->Coverage)) {
108 $this->prepareAddingOfLangstring(
'coverage',
$general, $xml->Coverage);
111 $this->prepareAddingOfVocabulary(
113 (
string) $xml->attributes()->Structure,
120 \SimpleXMLElement $xml
122 $lifecycle = $this->addScaffoldAndMark($set->getRoot(),
'lifeCycle');
124 $this->prepareAddingOfLangstring(
'version',
$lifecycle, $xml->Version);
126 $this->prepareAddingOfVocabulary(
128 (
string) $xml->attributes()->status,
132 foreach ($xml->Contribute as $contribute_xml) {
133 $this->prepareAddingOfContribute(
$lifecycle, $contribute_xml);
139 \SimpleXMLElement $xml
141 $metametadata = $this->addScaffoldAndMark($set->getRoot(),
'metaMetadata');
143 foreach ($xml->Identifier as $identifier_xml) {
144 $this->prepareAddingOfIdentifier(
$metametadata, $identifier_xml);
147 foreach ($xml->Contribute as $contribute_xml) {
148 $this->prepareAddingOfContribute(
$metametadata, $contribute_xml);
151 $this->addScaffoldAndMark(
$metametadata,
'metadataSchema',
'LOMv1.0');
153 if (!empty($xml->attributes()->Language)) {
154 $this->addScaffoldAndMark(
$metametadata,
'language', (
string) $xml->attributes()->Language);
160 \SimpleXMLElement $xml
162 $technical = $this->addScaffoldAndMark($set->getRoot(),
'technical');
164 foreach ($xml->Format as $format_xml) {
165 $this->addScaffoldAndMark(
$technical,
'format', (
string) $format_xml);
168 if (!empty($xml->Size)) {
169 $this->addScaffoldAndMark(
$technical,
'size', (
string) $xml->Size);
172 foreach ($xml->Location as $location_xml) {
173 $this->addScaffoldAndMark(
$technical,
'location', (
string) $location_xml);
176 foreach ($xml->Requirement as $requirement_xml) {
177 $this->prepareAddingOfRequirement(
$technical, $requirement_xml);
179 foreach ($xml->OrComposite as $or_composite_xml) {
180 foreach ($or_composite_xml->Requirement as $requirement_xml) {
181 $this->prepareAddingOfRequirement(
$technical, $requirement_xml);
185 if (!empty($xml->InstallationRemarks)) {
186 $this->prepareAddingOfLangstring(
187 'installationRemarks',
189 $xml->InstallationRemarks
193 if (!empty($xml->OtherPlatformRequirements)) {
194 $this->prepareAddingOfLangstring(
195 'otherPlatformRequirements',
197 $xml->OtherPlatformRequirements
201 if (!empty($xml->Duration)) {
203 $this->addScaffoldAndMark(
$duration,
'duration', (
string) $xml->Duration);
209 \SimpleXMLElement $xml
211 $educational = $this->addScaffoldAndMark($set->getRoot(),
'educational');
213 $this->prepareAddingOfVocabulary(
215 (
string) $xml->attributes()->InteractivityType,
219 $this->prepareAddingOfVocabulary(
220 'learningResourceType',
221 (
string) $xml->attributes()->LearningResourceType,
225 $this->prepareAddingOfVocabulary(
226 'interactivityLevel',
227 (
string) $xml->attributes()->InteractivityLevel,
231 $this->prepareAddingOfVocabulary(
233 (
string) $xml->attributes()->SemanticDensity,
237 $this->prepareAddingOfVocabulary(
238 'intendedEndUserRole',
239 (
string) $xml->attributes()->IntendedEndUserRole,
243 $this->prepareAddingOfVocabulary(
245 (
string) $xml->attributes()->Context,
249 foreach ($xml->TypicalAgeRange as $tar_xml) {
250 $this->prepareAddingOfLangstring(
'typicalAgeRange',
$educational, $tar_xml);
253 $this->prepareAddingOfVocabulary(
255 (
string) $xml->attributes()->Difficulty,
259 if (!empty($xml->TypicalLearningTime)) {
261 $this->addScaffoldAndMark(
$duration,
'duration', (
string) $xml->TypicalLearningTime);
264 foreach ($xml->Description as $description_xml) {
265 $this->prepareAddingOfLangstring(
'description',
$educational, $description_xml);
268 foreach ($xml->Language as $language_xml) {
269 $this->addScaffoldAndMark(
$educational,
'language', (
string) $language_xml->attributes()->Language);
275 \SimpleXMLElement $xml
277 $rights = $this->addScaffoldAndMark($set->getRoot(),
'rights');
279 $this->prepareAddingOfVocabulary(
281 (
string) $xml->attributes()->Cost,
285 $this->prepareAddingOfVocabulary(
286 'copyrightAndOtherRestrictions',
287 (
string) $xml->attributes()->CopyrightAndOtherRestrictions,
291 $description_scaffold = $this->addScaffoldAndMark(
$rights,
'description');
292 $this->addScaffoldAndMark(
293 $description_scaffold,
295 (
string) $xml->Description->attributes()->Language
297 $description_string = $this->copyright_handler->copyrightFromExport((
string) $xml->Description);
298 if ($description_string !==
'') {
299 $this->addScaffoldAndMark($description_scaffold,
'string', $description_string);
305 \SimpleXMLElement $xml
307 $relation = $this->addScaffoldAndMark($set->getRoot(),
'relation');
309 $this->prepareAddingOfVocabulary(
311 (
string) $xml->attributes()->Kind,
316 $resource = $this->addScaffoldAndMark(
$relation,
'resource');
317 $resource_xml = $xml->Resource;
319 foreach ($resource_xml->Identifier_ as $identifier_xml) {
320 $this->prepareAddingOfIdentifier($resource, $identifier_xml);
323 foreach ($resource_xml->Description as $description_xml) {
324 $this->prepareAddingOfLangstring(
'description', $resource, $description_xml);
330 \SimpleXMLElement $xml
332 $annotation = $this->addScaffoldAndMark($set->getRoot(),
'annotation');
334 $this->addScaffoldAndMark(
$annotation,
'entity', (
string) $xml->Entity);
336 $date = $this->addScaffoldAndMark(
$annotation,
'date');
337 $this->addScaffoldAndMark($date,
'dateTime', (
string) $xml->Date);
339 $this->prepareAddingOfLangstring(
'description',
$annotation, $xml->Description);
344 \SimpleXMLElement $xml
346 $classification = $this->addScaffoldAndMark($set->getRoot(),
'classification');
348 $this->prepareAddingOfVocabulary(
350 (
string) $xml->attributes()->Purpose,
354 foreach ($xml->TaxonPath as $taxon_path_xml) {
357 $this->prepareAddingOfLangstring(
'source', $taxon_path, $taxon_path_xml->Source);
359 foreach ($taxon_path_xml->taxon as $taxon_xml) {
360 $taxon = $this->addScaffoldAndMark($taxon_path,
'taxon');
362 if (!empty($taxon_xml->attributes()->Id)) {
363 $this->addScaffoldAndMark($taxon,
'id', (
string) $taxon_xml->attributes()->Id);
366 $this->prepareAddingOfLangstring(
'entry', $taxon, $taxon_xml);
370 $this->prepareAddingOfLangstring(
376 foreach ($xml->Keyword as $keyword_xml) {
377 $this->prepareAddingOfLangstring(
'keyword',
$classification, $keyword_xml);
383 \SimpleXMLElement $xml
385 $scaffold = $this->addScaffoldAndMark($element,
'requirement');
387 foreach ($xml->Type->OperatingSystem as $os_xml) {
388 $orc_scaffold = $this->addScaffoldAndMark($scaffold,
'orComposite');
389 $this->prepareAddingOfVocabulary(
'type',
'operating system', $orc_scaffold);
391 $name = (string) $os_xml->attributes()->Name;
392 if ($name ===
'MacOS') {
395 $this->prepareAddingOfVocabulary(
401 $min_version = (string) ($os_xml->attributes()->MinimumVersion ??
'');
402 $max_version = (string) ($os_xml->attributes()->MaximumVersion ??
'');
403 if ($min_version !==
'') {
404 $this->addScaffoldAndMark($orc_scaffold,
'minimumVersion', $min_version);
406 if ($max_version !==
'') {
407 $this->addScaffoldAndMark($orc_scaffold,
'maximumVersion', $max_version);
411 foreach ($xml->Type->Browser as $browser_xml) {
412 $orc_scaffold = $this->addScaffoldAndMark($scaffold,
'orComposite');
413 $this->prepareAddingOfVocabulary(
'type',
'browser', $orc_scaffold);
415 $name = (string) $browser_xml->attributes()->Name;
416 if ($name !==
'Mozilla') {
417 $this->prepareAddingOfVocabulary(
419 strtolower((
string) $browser_xml->attributes()->Name),
424 $min_version = (string) ($browser_xml->attributes()->MinimumVersion ??
'');
425 $max_version = (string) ($browser_xml->attributes()->MaximumVersion ??
'');
426 if ($min_version !==
'') {
427 $this->addScaffoldAndMark($orc_scaffold,
'minimumVersion', $min_version);
429 if ($max_version !==
'') {
430 $this->addScaffoldAndMark($orc_scaffold,
'maximumVersion', $max_version);
438 \SimpleXMLElement $xml
440 $language = (string) $xml->attributes()->
Language;
441 $string = (string) $xml;
443 $scaffold = $this->addScaffoldAndMark($element, $name);
444 $this->addScaffoldAndMark($scaffold,
'language', $language);
445 if ($string !==
'') {
446 $this->addScaffoldAndMark($scaffold,
'string', $string);
454 bool $fill_spaces_in_value =
false
456 $value = $this->transformVocabValue($value, $fill_spaces_in_value);
458 $scaffold = $this->addScaffoldAndMark($element, $name);
459 $this->addScaffoldAndMark($scaffold,
'source',
'LOMv1.0');
460 $this->addScaffoldAndMark($scaffold,
'value', $value);
465 \SimpleXMLElement $xml
467 $catalog = (string) ($xml->attributes()->Catalog ??
'');
468 $entry = (string) ($xml->attributes()->Entry ??
'');
470 $scaffold = $this->addScaffoldAndMark($element,
'identifier');
471 if ($catalog !==
'') {
472 $this->addScaffoldAndMark($scaffold,
'catalog', $catalog);
475 $this->addScaffoldAndMark($scaffold,
'entry', $entry);
481 \SimpleXMLElement $xml
483 $role = (string) ($xml->attributes()->Role ??
'');
484 $date = (string) $xml->Date;
486 $scaffold = $this->addScaffoldAndMark($element,
'contribute');
487 $this->prepareAddingOfVocabulary(
'role', $role, $scaffold);
488 foreach ($xml->Entity as $entity_xml) {
489 $this->addScaffoldAndMark($scaffold,
'entity', (
string) $entity_xml);
492 $date_scaffold = $this->addScaffoldAndMark($scaffold,
'date');
493 $this->addScaffoldAndMark($date_scaffold,
'dateTime', $date);
502 $scaffold = $to_element->addScaffoldToSubElements($this->scaffold_provider, $name);
503 $scaffold->
mark($this->marker_factory, Action::CREATE_OR_UPDATE, strip_tags($value));
509 $value = $this->camelCaseToSpaces($value);
512 $value = str_replace(
' ',
'', $value);
520 $string = preg_replace(
'/(?<=[a-z])(?=[A-Z])/',
' ', $string);
521 return strtolower($string);