Skip to content

Commit a56b9e9

Browse files
authored
Merge pull request #23 from bci-oss/fix/adjust-langstring-object-type
Add langString for single type values
2 parents cff6529 + d38fb17 commit a56b9e9

File tree

4 files changed

+43
-21
lines changed

4 files changed

+43
-21
lines changed

src/instantiator/characteristic/enumeration-characteristic-instantiator.ts

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@ import {Samm} from '../../vocabulary';
1919
import {EntityInstantiator} from '../entity-instantiator';
2020
import {DefaultEntityInstance} from '../../aspect-meta-model/default-entity-instance';
2121

22+
export interface MultiLanguageText {
23+
value: string;
24+
language: string;
25+
}
26+
2227
export class EnumerationCharacteristicInstantiator extends CharacteristicInstantiator {
2328
constructor(metaModelElementInstantiator: MetaModelElementInstantiator, nextProcessor: CharacteristicInstantiator) {
2429
super(metaModelElementInstantiator, nextProcessor);
@@ -114,38 +119,41 @@ export class EnumerationCharacteristicInstantiator extends CharacteristicInstant
114119
const entityInstance = new DefaultEntityInstance(quad.object.value.split('#')[1], entity, descriptions);
115120
entityInstanceQuads.forEach(quad => {
116121
const predicateKey = this.getPredicateKey(quad);
117-
if (Util.isBlankNode(quad.object)) {
118-
entityInstance[predicateKey] =
119-
this.solveBlankNodeValues([...this.metaModelElementInstantiator.rdfModel.resolveBlankNodes(quad.object.value)]);
120-
}
121-
else {
122-
entityInstance[predicateKey] = quad.object.value;
123-
}
122+
entityInstance[predicateKey] = this.resolveQuadObject(quad);
124123
});
125124

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

131-
shouldProcess(nameNode: NamedNode): boolean {
132-
return this.metaModelElementInstantiator.sammC.EnumerationCharacteristic().equals(nameNode);
130+
private resolveQuadObject(quad: Quad): MultiLanguageText | Array<MultiLanguageText> | string {
131+
if (Util.isBlankNode(quad.object)) {
132+
const resolvedBlankNodes = this.metaModelElementInstantiator.rdfModel.resolveBlankNodes(quad.object.value);
133+
return this.solveBlankNodeValues([...resolvedBlankNodes]);
134+
}
135+
136+
if (((quad.object as any).datatypeString === Samm.RDF_LANG_STRING) ||
137+
((quad.object as any).datatypeString === Samm.XML_LANG_STRING)) {
138+
return this.createLanguageObject(quad);
139+
}
140+
141+
return quad.object.value;
133142
}
134143

135-
solveBlankNodeValues(resolvedBlankNodes: Array<Quad>) {
136-
return resolvedBlankNodes.length > 0
137-
? resolvedBlankNodes.map(item => this.createLanguageObject(item))
138-
: '';
144+
private solveBlankNodeValues(resolvedBlankNodes: Array<Quad>): Array<MultiLanguageText> {
145+
return resolvedBlankNodes.length > 0 ? resolvedBlankNodes.map(item => this.createLanguageObject(item)) : [];
139146
}
140147

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

145-
private createLanguageObject(quad: Quad): any {
146-
return (quad.object as any).language
147-
? {value: quad.object.value, language: (quad.object as any).language}
148-
: quad.object.value;
152+
private createLanguageObject(quad: Quad): MultiLanguageText {
153+
return {value: quad.object.value, language: (quad.object as any).language};
149154
}
150155

156+
shouldProcess(nameNode: NamedNode): boolean {
157+
return this.metaModelElementInstantiator.sammC.EnumerationCharacteristic().equals(nameNode);
158+
}
151159
}

src/visitor/default-aspect-model-visitor.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ import {
2323
Operation,
2424
Property,
2525
QuantityKind,
26-
Unit
26+
Unit,
2727
} from '../aspect-meta-model';
28-
import { ModelVisitor } from './model-visitor';
28+
import {ModelVisitor} from './model-visitor';
2929

3030
export class DefaultAspectModelVisitor<T, U> implements ModelVisitor<T, U> {
3131
skipProperties: Array<string> = ['_wrappedProperty', '_parents'];

src/visitor/default-namespace-visitor.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,19 @@
1111
* SPDX-License-Identifier: MPL-2.0
1212
*/
1313

14-
import { Aspect, BaseMetaModelElement, Characteristic, Constraint, Entity, Event, Operation, Property, QuantityKind, Unit } from '../aspect-meta-model';
15-
import { ModelVisitor } from './model-visitor';
14+
import {
15+
Aspect,
16+
BaseMetaModelElement,
17+
Characteristic,
18+
Constraint,
19+
Entity,
20+
Event,
21+
Operation,
22+
Property,
23+
QuantityKind,
24+
Unit,
25+
} from '../aspect-meta-model';
26+
import {ModelVisitor} from './model-visitor';
1627

1728
/**
1829
* Default visitor to traverse alle concepts defined within the different namespaces.

src/vocabulary/samm.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ export class Samm {
1919
static readonly RDFS_URI = 'http://www.w3.org/2000/01/rdf-schema';
2020
static readonly BASE_URI = 'urn:samm:org.eclipse.esmf.samm:';
2121

22+
static readonly RDF_LANG_STRING = `${Samm.RDF_URI}#langString`;
23+
static readonly XML_LANG_STRING = `${Samm.XSD_URI}#langString`;
24+
2225
private alias = 'samm';
2326

2427
constructor(public version: string) {}

0 commit comments

Comments
 (0)