Skip to content

Commit

Permalink
Merge pull request eclipse-esmf#23 from bci-oss/fix/adjust-langstring…
Browse files Browse the repository at this point in the history
…-object-type

Add langString for single type values
  • Loading branch information
michelu89 authored May 16, 2024
2 parents cff6529 + d38fb17 commit a56b9e9
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,11 @@ import {Samm} from '../../vocabulary';
import {EntityInstantiator} from '../entity-instantiator';
import {DefaultEntityInstance} from '../../aspect-meta-model/default-entity-instance';

export interface MultiLanguageText {
value: string;
language: string;
}

export class EnumerationCharacteristicInstantiator extends CharacteristicInstantiator {
constructor(metaModelElementInstantiator: MetaModelElementInstantiator, nextProcessor: CharacteristicInstantiator) {
super(metaModelElementInstantiator, nextProcessor);
Expand Down Expand Up @@ -114,38 +119,41 @@ export class EnumerationCharacteristicInstantiator extends CharacteristicInstant
const entityInstance = new DefaultEntityInstance(quad.object.value.split('#')[1], entity, descriptions);
entityInstanceQuads.forEach(quad => {
const predicateKey = this.getPredicateKey(quad);
if (Util.isBlankNode(quad.object)) {
entityInstance[predicateKey] =
this.solveBlankNodeValues([...this.metaModelElementInstantiator.rdfModel.resolveBlankNodes(quad.object.value)]);
}
else {
entityInstance[predicateKey] = quad.object.value;
}
entityInstance[predicateKey] = this.resolveQuadObject(quad);
});

return entityInstance;
}
throw new Error(`Could resolve Entity instance ${entityTypeQuad.subject.value}`);
}

shouldProcess(nameNode: NamedNode): boolean {
return this.metaModelElementInstantiator.sammC.EnumerationCharacteristic().equals(nameNode);
private resolveQuadObject(quad: Quad): MultiLanguageText | Array<MultiLanguageText> | string {
if (Util.isBlankNode(quad.object)) {
const resolvedBlankNodes = this.metaModelElementInstantiator.rdfModel.resolveBlankNodes(quad.object.value);
return this.solveBlankNodeValues([...resolvedBlankNodes]);
}

if (((quad.object as any).datatypeString === Samm.RDF_LANG_STRING) ||
((quad.object as any).datatypeString === Samm.XML_LANG_STRING)) {
return this.createLanguageObject(quad);
}

return quad.object.value;
}

solveBlankNodeValues(resolvedBlankNodes: Array<Quad>) {
return resolvedBlankNodes.length > 0
? resolvedBlankNodes.map(item => this.createLanguageObject(item))
: '';
private solveBlankNodeValues(resolvedBlankNodes: Array<Quad>): Array<MultiLanguageText> {
return resolvedBlankNodes.length > 0 ? resolvedBlankNodes.map(item => this.createLanguageObject(item)) : [];
}

private getPredicateKey(quad: Quad): string {
return quad.predicate.value.split('#')[1];
}

private createLanguageObject(quad: Quad): any {
return (quad.object as any).language
? {value: quad.object.value, language: (quad.object as any).language}
: quad.object.value;
private createLanguageObject(quad: Quad): MultiLanguageText {
return {value: quad.object.value, language: (quad.object as any).language};
}

shouldProcess(nameNode: NamedNode): boolean {
return this.metaModelElementInstantiator.sammC.EnumerationCharacteristic().equals(nameNode);
}
}
4 changes: 2 additions & 2 deletions src/visitor/default-aspect-model-visitor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@ import {
Operation,
Property,
QuantityKind,
Unit
Unit,
} from '../aspect-meta-model';
import { ModelVisitor } from './model-visitor';
import {ModelVisitor} from './model-visitor';

export class DefaultAspectModelVisitor<T, U> implements ModelVisitor<T, U> {
skipProperties: Array<string> = ['_wrappedProperty', '_parents'];
Expand Down
15 changes: 13 additions & 2 deletions src/visitor/default-namespace-visitor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,19 @@
* SPDX-License-Identifier: MPL-2.0
*/

import { Aspect, BaseMetaModelElement, Characteristic, Constraint, Entity, Event, Operation, Property, QuantityKind, Unit } from '../aspect-meta-model';
import { ModelVisitor } from './model-visitor';
import {
Aspect,
BaseMetaModelElement,
Characteristic,
Constraint,
Entity,
Event,
Operation,
Property,
QuantityKind,
Unit,
} from '../aspect-meta-model';
import {ModelVisitor} from './model-visitor';

/**
* Default visitor to traverse alle concepts defined within the different namespaces.
Expand Down
3 changes: 3 additions & 0 deletions src/vocabulary/samm.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ export class Samm {
static readonly RDFS_URI = 'http://www.w3.org/2000/01/rdf-schema';
static readonly BASE_URI = 'urn:samm:org.eclipse.esmf.samm:';

static readonly RDF_LANG_STRING = `${Samm.RDF_URI}#langString`;
static readonly XML_LANG_STRING = `${Samm.XSD_URI}#langString`;

private alias = 'samm';

constructor(public version: string) {}
Expand Down

0 comments on commit a56b9e9

Please sign in to comment.