From b8df51635df3a912d6b0891e712c51ccf052b93c Mon Sep 17 00:00:00 2001 From: Michele Santoro Date: Thu, 16 May 2024 13:06:19 +0200 Subject: [PATCH 1/2] Add langString for single type values --- ...enumeration-characteristic-instantiator.ts | 41 +++++++++++-------- src/visitor/default-aspect-model-visitor.ts | 4 +- src/visitor/default-namespace-visitor.ts | 15 ++++++- src/vocabulary/samm.ts | 2 + 4 files changed, 41 insertions(+), 21 deletions(-) diff --git a/src/instantiator/characteristic/enumeration-characteristic-instantiator.ts b/src/instantiator/characteristic/enumeration-characteristic-instantiator.ts index a5bffc0..63f80b2 100644 --- a/src/instantiator/characteristic/enumeration-characteristic-instantiator.ts +++ b/src/instantiator/characteristic/enumeration-characteristic-instantiator.ts @@ -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); @@ -114,13 +119,7 @@ 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; @@ -128,24 +127,32 @@ export class EnumerationCharacteristicInstantiator extends CharacteristicInstant 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 | 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.LANG_STRING) { + return this.createLanguageObject(quad); + } + + return quad.object.value; } - solveBlankNodeValues(resolvedBlankNodes: Array) { - return resolvedBlankNodes.length > 0 - ? resolvedBlankNodes.map(item => this.createLanguageObject(item)) - : ''; + private solveBlankNodeValues(resolvedBlankNodes: Array): Array { + 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); + } } diff --git a/src/visitor/default-aspect-model-visitor.ts b/src/visitor/default-aspect-model-visitor.ts index 203c16f..47bb949 100644 --- a/src/visitor/default-aspect-model-visitor.ts +++ b/src/visitor/default-aspect-model-visitor.ts @@ -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 implements ModelVisitor { skipProperties: Array = ['_wrappedProperty', '_parents']; diff --git a/src/visitor/default-namespace-visitor.ts b/src/visitor/default-namespace-visitor.ts index eff3d2f..2e5cb7f 100644 --- a/src/visitor/default-namespace-visitor.ts +++ b/src/visitor/default-namespace-visitor.ts @@ -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. diff --git a/src/vocabulary/samm.ts b/src/vocabulary/samm.ts index a144f96..a0cc064 100644 --- a/src/vocabulary/samm.ts +++ b/src/vocabulary/samm.ts @@ -19,6 +19,8 @@ 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 LANG_STRING = `${Samm.RDF_URI}#langString`; + private alias = 'samm'; constructor(public version: string) {} From d38fb170d98046fd266fb2d30a773f50fd46163c Mon Sep 17 00:00:00 2001 From: Michele Santoro Date: Thu, 16 May 2024 13:30:45 +0200 Subject: [PATCH 2/2] Add xml langString into vocabulary --- .../characteristic/enumeration-characteristic-instantiator.ts | 3 ++- src/vocabulary/samm.ts | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/instantiator/characteristic/enumeration-characteristic-instantiator.ts b/src/instantiator/characteristic/enumeration-characteristic-instantiator.ts index 63f80b2..488ef12 100644 --- a/src/instantiator/characteristic/enumeration-characteristic-instantiator.ts +++ b/src/instantiator/characteristic/enumeration-characteristic-instantiator.ts @@ -133,7 +133,8 @@ export class EnumerationCharacteristicInstantiator extends CharacteristicInstant return this.solveBlankNodeValues([...resolvedBlankNodes]); } - if ((quad.object as any).datatypeString === Samm.LANG_STRING) { + if (((quad.object as any).datatypeString === Samm.RDF_LANG_STRING) || + ((quad.object as any).datatypeString === Samm.XML_LANG_STRING)) { return this.createLanguageObject(quad); } diff --git a/src/vocabulary/samm.ts b/src/vocabulary/samm.ts index a0cc064..dd364f3 100644 --- a/src/vocabulary/samm.ts +++ b/src/vocabulary/samm.ts @@ -19,7 +19,8 @@ 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 LANG_STRING = `${Samm.RDF_URI}#langString`; + static readonly RDF_LANG_STRING = `${Samm.RDF_URI}#langString`; + static readonly XML_LANG_STRING = `${Samm.XSD_URI}#langString`; private alias = 'samm';