From 05b66a46f52c65f1e51f16e450fa68fd72d6af27 Mon Sep 17 00:00:00 2001 From: Tomas Fernandez Date: Wed, 30 Mar 2022 18:56:45 -0300 Subject: [PATCH 1/2] W-10881317/computed-instance-parsing: implemented instance parsing for allOf, oneOf and if-then-else --- .../DialectInstanceFragmentParser.scala | 4 +- .../instances/DialectInstanceParser.scala | 24 +- .../instances/InstanceNodeIdHandling.scala | 17 -- .../parser/DialectExtensionParser.scala | 2 +- ...rser.scala => InstanceElementParser.scala} | 134 +++++------ .../ObjectCollectionPropertyParser.scala | 4 +- .../parser/ObjectMapPropertyParser.scala | 2 +- .../parser/ObjectPropertyParser.scala | 2 +- .../parser/applicable/AndFinderPath.scala | 18 ++ .../applicable/ApplicableMappingFinder.scala | 56 +++++ .../parser/applicable/FinderPath.scala | 27 +++ .../applicable/IfThenElseFinderPath.scala | 25 +++ .../applicable/NodePropertyConforms.scala | 42 ++++ .../parser/applicable/OrFinderPath.scala | 36 +++ .../instances/AmlEmittersHelper.scala | 2 +- .../emitters/instances/DialectIndex.scala | 11 + .../instances/DialectInstancesEmitter.scala | 16 +- .../semantic/SemanticExtensionParser.scala | 4 +- .../allOf-oneOf-if-then-else/dialect.yaml | 76 +++++++ .../instance.cycled.yaml | 3 + .../instance.expanded.jsonld | 137 ++++++++++++ .../instance.flattened.jsonld | 107 +++++++++ .../allOf-oneOf-if-then-else/instance.yaml | 3 + .../instances/allOf-properties/dialect.yaml | 39 ++++ .../allOf-properties/instance.cycled.yaml | 7 + .../allOf-properties/instance.expanded.jsonld | 209 ++++++++++++++++++ .../instance.flattened.jsonld | 143 ++++++++++++ .../instances/allOf-properties/instance.yaml | 7 + .../instances/allOf-simple/dialect.yaml | 32 +++ .../allOf-simple/instance.cycled.yaml | 5 + .../allOf-simple/instance.expanded.jsonld | 173 +++++++++++++++ .../allOf-simple/instance.flattened.jsonld | 125 +++++++++++ .../instances/allOf-simple/instance.yaml | 5 + .../allOf-with-nested-oneOf/dialect.yaml | 53 +++++ .../instance.cycled.yaml | 4 + .../instance.expanded.jsonld | 155 +++++++++++++ .../instance.flattened.jsonld | 116 ++++++++++ .../allOf-with-nested-oneOf/instance.yaml | 4 + .../parsing/DialectInstancesParsingTest.scala | 78 +++++++ 39 files changed, 1786 insertions(+), 121 deletions(-) rename amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/{InstanceNodeParser.scala => InstanceElementParser.scala} (59%) create mode 100644 amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/applicable/AndFinderPath.scala create mode 100644 amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/applicable/ApplicableMappingFinder.scala create mode 100644 amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/applicable/FinderPath.scala create mode 100644 amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/applicable/IfThenElseFinderPath.scala create mode 100644 amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/applicable/NodePropertyConforms.scala create mode 100644 amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/applicable/OrFinderPath.scala create mode 100644 amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/dialect.yaml create mode 100644 amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.cycled.yaml create mode 100644 amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.expanded.jsonld create mode 100644 amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.flattened.jsonld create mode 100644 amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.yaml create mode 100644 amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/dialect.yaml create mode 100644 amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.cycled.yaml create mode 100644 amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.expanded.jsonld create mode 100644 amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.flattened.jsonld create mode 100644 amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml create mode 100644 amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/dialect.yaml create mode 100644 amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.cycled.yaml create mode 100644 amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.expanded.jsonld create mode 100644 amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.flattened.jsonld create mode 100644 amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.yaml create mode 100644 amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/dialect.yaml create mode 100644 amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.cycled.yaml create mode 100644 amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.expanded.jsonld create mode 100644 amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.flattened.jsonld create mode 100644 amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.yaml diff --git a/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/DialectInstanceFragmentParser.scala b/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/DialectInstanceFragmentParser.scala index 1d821a85..aabdad48 100644 --- a/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/DialectInstanceFragmentParser.scala +++ b/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/DialectInstanceFragmentParser.scala @@ -7,7 +7,7 @@ import amf.aml.internal.metamodel.document.DialectInstanceModel import amf.aml.client.scala.model.document.{DialectInstanceFragment, DialectInstanceProcessingData} import amf.aml.client.scala.model.domain.{DialectDomainElement, DocumentsModel} import amf.aml.internal.parse.instances.DialectInstanceParser.encodedElementDefaultId -import amf.aml.internal.parse.instances.parser.InstanceNodeParser +import amf.aml.internal.parse.instances.parser.InstanceElementParser import amf.aml.internal.validate.DialectValidations.DialectError import com.github.ghik.silencer.silent @@ -47,7 +47,7 @@ class DialectInstanceFragmentParser(root: Root)(implicit override val ctx: Diale ctx.findNodeMapping(documentMapping.encoded().value()) match { case Some(nodeMapping) => val path = dialectInstanceFragment.id + "#" - InstanceNodeParser(root).parse(path, path + "/", map, nodeMapping, Map(), givenAnnotations = None) + InstanceElementParser(root).parse(path, path + "/", map, nodeMapping, Map(), givenAnnotations = None) case _ => emptyElementWithViolation(s"Could not find node mapping for: ${documentMapping.encoded().value()}") } diff --git a/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/DialectInstanceParser.scala b/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/DialectInstanceParser.scala index c4ff6151..0b6e8124 100644 --- a/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/DialectInstanceParser.scala +++ b/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/DialectInstanceParser.scala @@ -157,11 +157,11 @@ class DialectInstanceParser(val root: Root)(implicit val ctx: DialectInstanceCon entry.value.as[YMap].entries.foreach { declarationEntry => val declarationName = declarationEntry.key.as[YScalar].text val id = pathSegment(declarationsId, List(declarationName)) - val node = InstanceNodeParser(root).parse(declarationsId, - id, - declarationEntry.value, - nodeMapping, - givenAnnotations = Some(Annotations(declarationEntry))) + val node = InstanceElementParser(root).parse(declarationsId, + id, + declarationEntry.value, + nodeMapping, + givenAnnotations = Some(Annotations(declarationEntry))) // lookup by ref name node.set(DialectDomainElementModel.DeclarationName, @@ -187,13 +187,13 @@ class DialectInstanceParser(val root: Root)(implicit val ctx: DialectInstanceCon val additionalKey = if (documents.keyProperty().value()) Some(ctx.dialect.name().value()) else None - InstanceNodeParser(root).parse(path, - encodedElementDefaultId(dialectInstance), - map, - nodeMapping, - rootNode = true, - givenAnnotations = None, - additionalKey = additionalKey) + InstanceElementParser(root).parse(path, + encodedElementDefaultId(dialectInstance), + map, + nodeMapping, + rootNode = true, + givenAnnotations = None, + additionalKey = additionalKey) case _ => emptyElementWithViolation(s"Could not find node mapping for: ${mapping.encoded().value()}") } diff --git a/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/InstanceNodeIdHandling.scala b/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/InstanceNodeIdHandling.scala index 7ed56fbf..361c875e 100644 --- a/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/InstanceNodeIdHandling.scala +++ b/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/InstanceNodeIdHandling.scala @@ -145,23 +145,6 @@ object InstanceNodeIdHandling { trait InstanceNodeIdHandling extends BaseDirectiveOverride { this: DialectInstanceParser => - protected def generateNodeId(node: DialectDomainElement, - nodeMap: YMap, - path: Seq[String], - defaultId: String, - mapping: NodeMapping, - additionalProperties: Map[String, Any] = Map(), - rootNode: Boolean): String = { - InstanceNodeIdHandling.generateNodeId(node, - nodeMap, - path, - defaultId, - mapping, - additionalProperties, - rootNode, - root) - } - protected def idTemplate(node: DialectDomainElement, nodeMap: YMap, path: Seq[String], diff --git a/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/DialectExtensionParser.scala b/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/DialectExtensionParser.scala index 4e07e0b2..148c245f 100644 --- a/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/DialectExtensionParser.scala +++ b/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/DialectExtensionParser.scala @@ -31,7 +31,7 @@ object DialectExtensionParser { ctx.nestedDialects ++= Seq(dialect) ctx.withCurrentDialect(dialect) { val dialectDomainElement = - nodeParser(id, nestedObjectId, propertyEntry.value, nodeMapping, Map.empty) + nodeParser(id, nestedObjectId, propertyEntry.value, nodeMapping, Map.empty, false) node.withObjectField(property, dialectDomainElement, Right(propertyEntry)) } case None => diff --git a/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/InstanceNodeParser.scala b/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/InstanceElementParser.scala similarity index 59% rename from amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/InstanceNodeParser.scala rename to amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/InstanceElementParser.scala index e34004bf..de4c791f 100644 --- a/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/InstanceNodeParser.scala +++ b/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/InstanceElementParser.scala @@ -6,26 +6,29 @@ import amf.aml.internal.parse.instances.ClosedInstanceNode.checkNode import amf.aml.internal.parse.instances.DialectInstanceParser.{computeParsingScheme, emptyElement, typesFrom} import amf.aml.internal.parse.instances.InstanceNodeIdHandling.generateNodeId import amf.aml.internal.parse.instances.parser.IncludeNodeParser.resolveLink +import amf.aml.internal.parse.instances.parser.applicable.ApplicableMappingFinder import amf.aml.internal.parse.instances.{DialectInstanceContext, NodeMappableHelper} import amf.aml.internal.validate.DialectValidations.DialectError -import amf.core.client.common.validation.AMFStyle -import amf.core.client.scala.errorhandling.DefaultErrorHandler import amf.core.client.scala.model.domain.DomainElement import amf.core.client.scala.parse.document.SyamlParsedDocument -import amf.core.client.scala.validation.AMFValidationResult import amf.core.internal.parser.domain.Annotations import amf.core.internal.parser.{Root, YMapOps} import amf.core.internal.utils.AmfStrings -import amf.validation.internal.shacl.custom.CustomShaclValidator import org.yaml.model._ -case class InstanceNodeParser(root: Root)(implicit ctx: DialectInstanceContext) extends NodeMappableHelper { +import scala.language.{higherKinds, implicitConversions} + +case class InstanceElementParser(root: Root)(implicit ctx: DialectInstanceContext) extends NodeMappableHelper { private val map: YMap = root.parsed.asInstanceOf[SyamlParsedDocument].document.as[YMap] - def parse(path: String, id: String, entry: YNode, mapping: NodeMappable, additionalProperties: Map[String, Any])( - implicit ctx: DialectInstanceContext): DialectDomainElement = - parse(path, id, entry, mapping, additionalProperties, givenAnnotations = None) + def parse(path: String, + id: String, + entry: YNode, + mapping: NodeMappable, + additionalProperties: Map[String, Any], + parseAllOf: Boolean)(implicit ctx: DialectInstanceContext): DialectDomainElement = + parse(path, id, entry, mapping, additionalProperties, givenAnnotations = None, parseAllOf = parseAllOf) def parse(path: String, defaultId: String, @@ -35,7 +38,7 @@ case class InstanceNodeParser(root: Root)(implicit ctx: DialectInstanceContext) rootNode: Boolean = false, givenAnnotations: Option[Annotations], additionalKey: Option[String] = None, - )(implicit ctx: DialectInstanceContext): DialectDomainElement = { + parseAllOf: Boolean = true)(implicit ctx: DialectInstanceContext): DialectDomainElement = { val result: DialectDomainElement = ast.tagType match { case YType.Map => val astMap = ast.as[YMap] @@ -47,7 +50,8 @@ case class InstanceNodeParser(root: Root)(implicit ctx: DialectInstanceContext) additionalProperties, rootNode, givenAnnotations, - additionalKey) + additionalKey, + parseAllOf) case YType.Str => resolveLink(ast, mappable, defaultId, givenAnnotations) case YType.Include => resolveLink(ast, mappable, defaultId, givenAnnotations) @@ -59,8 +63,11 @@ case class InstanceNodeParser(root: Root)(implicit ctx: DialectInstanceContext) // if we are parsing a patch document we mark the node as abstract mappable match { - case anyMappable: AnyMapping if anyMappable.and.nonEmpty || anyMappable.or.nonEmpty || anyMappable.ifMapping.option().nonEmpty => // don't do anything - case _ => assignDefinedByAndTypes(mappable, result) + case anyMappable: AnyMapping + if anyMappable.and.nonEmpty || anyMappable.or.nonEmpty || anyMappable.ifMapping + .option() + .nonEmpty => // don't do anything + case _ => assignDefinedByAndTypes(mappable, result) } if (ctx.isPatch) result.withAbstract(true) result @@ -94,14 +101,31 @@ case class InstanceNodeParser(root: Root)(implicit ctx: DialectInstanceContext) additionalProperties: Map[String, Any], rootNode: Boolean, givenAnnotations: Option[Annotations], - additionalKey: Option[String])(implicit ctx: DialectInstanceContext) = { + additionalKey: Option[String], + parseAllOf: Boolean = true)(implicit ctx: DialectInstanceContext) = { computeParsingScheme(astMap) match { case "$ref" => RefNodeParser.parse(defaultId, astMap, mappable, root) case "$include" => IncludeNodeParser.parse(ast, mappable, defaultId, givenAnnotations) case _ => mappable match { - case conditional: AnyMapping if conditional.ifMapping.nonEmpty => - parseConditionally(path, defaultId, astMap, conditional) + case any: AnyMapping + if parseAllOf && (any.and.nonEmpty || any.or.nonEmpty || any.ifMapping.option().nonEmpty) => + val applicableMapping = ApplicableMappingFinder(root).find(map, any) + applicableMapping + .map { foundMapping => + parseWithNodeMapping(defaultId, + astMap, + ast, + additionalProperties, + rootNode, + givenAnnotations, + additionalKey, + foundMapping) + } + .getOrElse { + // TODO: add error + emptyElement(defaultId, astMap, mappable, givenAnnotations) + } case mapping: NodeMapping => parseWithNodeMapping(defaultId, astMap, @@ -118,61 +142,6 @@ case class InstanceNodeParser(root: Root)(implicit ctx: DialectInstanceContext) } } - object IfThenElseBranchCriteria { - def choose(map: YMap, mapping: AnyMapping)(implicit ctx: DialectInstanceContext): Option[String] = { - mapping.ifMapping.option() - .flatMap(ifMappingId => choose(map, ifMappingId, mapping)) - } - - def choose(map: YMap, ifMappingId: String, mapping: AnyMapping)(implicit ctx: DialectInstanceContext): Option[String] = { - ctx.findNodeMapping(ifMappingId).flatMap { ifMapping => - val (ifParsedNode, conformsParsing) = couldParse(map, ifMapping) - if (!conformsParsing) return mapping.elseMapping.option() - else { - val report = validateParsed(ifMapping, ifParsedNode) - val isIfCompliant = report.conforms - if (isIfCompliant) return mapping.thenMapping.option() - else return mapping.elseMapping.option() - } - } - } - private def couldParse(map: YMap, ifMapping: ctx.NodeMappable) = { - val nextContext = ctx.copy(DefaultErrorHandler()) - val ifParsed = parse("", "if", map, ifMapping, Map.empty)(nextContext) - val conforms = ignoreClosedShapeErrors(nextContext.eh.getResults).isEmpty - (ifParsed, conforms) - } - - private def ignoreClosedShapeErrors(results: Seq[AMFValidationResult]): Seq[AMFValidationResult] = { - results.filterNot(_.validationId.contains("closed")) - } - - private def validateParsed(ifMapping: ctx.NodeMappable, ifParsed: DialectDomainElement) = { - val mappingsInTree = AmlSubGraphCollector.collect(ifMapping.id, ctx.dialect) - val validator = new CustomShaclValidator(Map.empty, AMFStyle) - val validations = ctx.constraints - .map(p => p.validations.filter(x => x.targetClass.intersect(mappingsInTree).nonEmpty)) - .getOrElse(Nil) - val report = validator.validate(ifParsed, validations) - report - } - } - - private def parseConditionally(path: String, - defaultId: String, - astMap: YMap, - mappable: AnyMapping): DialectDomainElement = { - IfThenElseBranchCriteria - .choose(astMap, mappable) - .flatMap(ctx.findNodeMapping) - .map(mapping => parse(path, defaultId, astMap, mapping, Map.empty)) match { - case Some(mapping) => mapping - case None => - // TODO: Violation - DialectDomainElement().withId(defaultId) - } - } - private def parseWithNodeMapping(defaultId: String, astMap: YMap, ast: YNode, @@ -181,28 +150,31 @@ case class InstanceNodeParser(root: Root)(implicit ctx: DialectInstanceContext) givenAnnotations: Option[Annotations], additionalKey: Option[String], mapping: NodeMapping)(implicit ctx: DialectInstanceContext) = { - val annotations = givenAnnotations.getOrElse(Annotations(ast)) + val annotations = givenAnnotations.getOrElse(Annotations(ast)) val node: DialectDomainElement = DialectDomainElement(defaultId.urlDecoded, mapping, annotations) - val finalId = generateNodeId(node, astMap, Seq(defaultId), defaultId, mapping, additionalProperties, rootNode, root) + val finalId = + generateNodeId(node, astMap, Seq(defaultId), defaultId, mapping, additionalProperties, rootNode, root) node.withId(finalId) parseAnnotations(astMap, node, ctx.declarations) mapping.propertiesMapping().foreach { propertyMapping => val propertyName = propertyMapping.name().value() - astMap.key(propertyName) match { - case Some(entry) => - val nestedId = - if (Option(ctx.dialect.documents()).flatMap(_.selfEncoded().option()).getOrElse(false) && rootNode) - defaultId + "#/" - else defaultId - parseProperty(nestedId, entry, propertyMapping, node) - case None => // ignore + astMap.key(propertyName).foreach { entry => + val nestedId = computeNestedPropertyId(defaultId, rootNode, ctx) + parseProperty(nestedId, entry, propertyMapping, node) } } val shouldErrorOnExtraProperties = mapping.closed.option().getOrElse(true) // default behaviour is to error out - if (shouldErrorOnExtraProperties) checkNodeForAdditionalKeys(finalId, mapping.id, astMap.map, mapping, astMap, rootNode, additionalKey) + if (shouldErrorOnExtraProperties) + checkNodeForAdditionalKeys(finalId, mapping.id, astMap.map, mapping, astMap, rootNode, additionalKey) node } + private def computeNestedPropertyId(defaultId: String, rootNode: Boolean, ctx: DialectInstanceContext) = { + if (Option(ctx.dialect.documents()).flatMap(_.selfEncoded().option()).getOrElse(false) && rootNode) + defaultId + "#/" + else defaultId + } + private def parseProperty(id: String, propertyEntry: YMapEntry, property: PropertyMapping, diff --git a/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/ObjectCollectionPropertyParser.scala b/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/ObjectCollectionPropertyParser.scala index 4fa4931f..755abf04 100644 --- a/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/ObjectCollectionPropertyParser.scala +++ b/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/ObjectCollectionPropertyParser.scala @@ -18,7 +18,7 @@ import scala.language.higherKinds object ObjectCollectionPropertyParser extends NodeMappableHelper { - type NodeParser = (String, String, YNode, NodeMappable, Map[String, Any]) => DialectDomainElement + type NodeParser = (String, String, YNode, NodeMappable, Map[String, Any], Boolean) => DialectDomainElement type ObjectUnionParser[T <: DomainElement] = (String, Seq[String], YNode, NodeWithDiscriminator[_], Map[String, Any]) => DialectDomainElement @@ -51,7 +51,7 @@ object ObjectCollectionPropertyParser extends NodeMappableHelper { ctx.dialect.declares.find(_.id == range.head) match { case Some(nodeMapping: NodeMappable) => val dialectDomainElement = - nodeParser(id, nestedObjectId, elementNode, nodeMapping, additionalProperties) + nodeParser(id, nestedObjectId, elementNode, nodeMapping, additionalProperties, false) checkDuplicated(dialectDomainElement, elementNode, idsMap) Some(dialectDomainElement) case _ => None diff --git a/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/ObjectMapPropertyParser.scala b/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/ObjectMapPropertyParser.scala index 75f9d039..e9999787 100644 --- a/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/ObjectMapPropertyParser.scala +++ b/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/ObjectMapPropertyParser.scala @@ -43,7 +43,7 @@ object ObjectMapPropertyParser extends NodeMappableHelper { case range: Seq[String] if range.size == 1 => ctx.dialect.declares.find(_.id == range.head) match { case Some(nodeMapping: NodeMappable) if keyEntry.value.tagType != YType.Null => - Some(nodeParser(id, nestedObjectId, keyEntry.value, nodeMapping, keyAdditionalProperties)) + Some(nodeParser(id, nestedObjectId, keyEntry.value, nodeMapping, keyAdditionalProperties, false)) case _ => None } case _ => None diff --git a/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/ObjectPropertyParser.scala b/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/ObjectPropertyParser.scala index cfd28832..3692ec39 100644 --- a/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/ObjectPropertyParser.scala +++ b/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/ObjectPropertyParser.scala @@ -62,7 +62,7 @@ object SimpleObjectPropertyParser { ctx.dialect.declares.find(_.id == rangeId) match { case Some(nodeMapping: NodeMappable) => val dialectDomainElement = - nodeParser(id, nestedObjectId, propertyEntry.value, nodeMapping, additionalProperties) + nodeParser(id, nestedObjectId, propertyEntry.value, nodeMapping, additionalProperties, false) node.withObjectField(property, dialectDomainElement, Right(propertyEntry)) case _ => // ignore } diff --git a/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/applicable/AndFinderPath.scala b/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/applicable/AndFinderPath.scala new file mode 100644 index 00000000..dd0a36f0 --- /dev/null +++ b/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/applicable/AndFinderPath.scala @@ -0,0 +1,18 @@ +package amf.aml.internal.parse.instances.parser.applicable + +import amf.aml.client.scala.model.domain.AnyMapping +import amf.aml.internal.parse.instances.DialectInstanceContext +import ApplicableMapping.aggregate +import amf.aml.internal.render.emitters.instances.DialectIndex +import amf.core.internal.parser.Root +import org.yaml.model.YMap + +object AndFinderPath extends FinderPath { + override def walk(mapping: AnyMapping, map: YMap, index: DialectIndex, finder: ApplicableMappingFinder)( + implicit ctx: DialectInstanceContext): ApplicableMapping = { + if (mapping.and.isEmpty) return ApplicableMapping.empty + val andMappings = findMappingsFor(mapping.and, index) + val aggregateMapping = aggregate(andMappings.map(node => finder.find(map, node, index))) + aggregateMapping + } +} diff --git a/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/applicable/ApplicableMappingFinder.scala b/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/applicable/ApplicableMappingFinder.scala new file mode 100644 index 00000000..8bf9c552 --- /dev/null +++ b/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/applicable/ApplicableMappingFinder.scala @@ -0,0 +1,56 @@ +package amf.aml.internal.parse.instances.parser.applicable + +import amf.aml.client.scala.model.domain.{AnyMapping, NodeMapping} +import amf.aml.internal.parse.instances.DialectInstanceContext +import NodePropertyConforms.conformsAgainstProperties +import amf.aml.internal.render.emitters.instances.{DefaultNodeMappableFinder, DialectIndex} +import amf.core.internal.parser.Root +import org.yaml.model.YMap + +import scala.language.higherKinds + +case class ApplicableMappingFinder(private val root: Root) { + + val paths = List( + AndFinderPath, + OrFinderPath(root), + IfThenElseFinderPath(root) + ) + + def find(map: YMap, mapping: AnyMapping)(implicit ctx: DialectInstanceContext): Option[NodeMapping] = { + val index = DialectIndex(ctx.dialect, DefaultNodeMappableFinder(ctx.dialect)) + val ApplicableMapping(_, ids) = find(map, mapping, index) + val isMappingCombination = ids.size != 1 + if (isMappingCombination) index.findCompositeMapping(ids).collect { case mapping: NodeMapping => mapping } else + index.maybeFindNodeMappingById(ids.head).collect { + case (_, mapping: NodeMapping) => mapping + } + + } + + private[parser] def find(map: YMap, mapping: AnyMapping, index: DialectIndex)( + implicit ctx: DialectInstanceContext): ApplicableMapping = { + val appliesToCurrent = + if (conformsAgainstProperties(map, mapping, root)) ApplicableMapping(couldFind = true, Set(mapping.id)) + else ApplicableMapping(couldFind = true, Set.empty[String]) + paths.foldLeft(appliesToCurrent) { (applicable, path) => + applicable.add(path.walk(mapping, map, index, this)) + } + } +} + +object ApplicableMapping { + val invalid: ApplicableMapping = ApplicableMapping(couldFind = false, Set.empty) + val empty: ApplicableMapping = ApplicableMapping(couldFind = true, Set.empty) + + def aggregate(mappings: Seq[ApplicableMapping]): ApplicableMapping = { + mappings.foldLeft(empty) { (acc, curr) => + acc.add(curr) + } + } +} + +case class ApplicableMapping(couldFind: Boolean, mappings: Set[String]) { + def add(applicable: ApplicableMapping): ApplicableMapping = + copy(couldFind = this.couldFind && applicable.couldFind, this.mappings ++ applicable.mappings) +} diff --git a/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/applicable/FinderPath.scala b/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/applicable/FinderPath.scala new file mode 100644 index 00000000..e4fa874e --- /dev/null +++ b/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/applicable/FinderPath.scala @@ -0,0 +1,27 @@ +package amf.aml.internal.parse.instances.parser.applicable + +import amf.aml.client.scala.model.domain.AnyMapping +import amf.aml.internal.parse.instances.DialectInstanceContext +import amf.aml.internal.render.emitters.instances.DialectIndex +import amf.core.client.scala.model.StrField +import amf.core.internal.parser.Root +import org.yaml.model.YMap + +trait FinderPath { + + def walk(mapping: AnyMapping, map: YMap, index: DialectIndex, finder: ApplicableMappingFinder)( + implicit ctx: DialectInstanceContext): ApplicableMapping + + protected def findMappingsFor(ids: Seq[StrField], index: DialectIndex)( + implicit ctx: DialectInstanceContext): Seq[AnyMapping] = { + val mappings = ids + .flatMap(_.option()) + .flatMap(index.maybeFindNodeMappingById) + .collect { case (_, mapping: AnyMapping) => mapping } + val foundAllMappings = mappings.size == ids.size + if (!foundAllMappings) { + // TODO: throw error if for a component, there aren't any suitable mappings + } + mappings + } +} diff --git a/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/applicable/IfThenElseFinderPath.scala b/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/applicable/IfThenElseFinderPath.scala new file mode 100644 index 00000000..a4bf01c4 --- /dev/null +++ b/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/applicable/IfThenElseFinderPath.scala @@ -0,0 +1,25 @@ +package amf.aml.internal.parse.instances.parser.applicable + +import amf.aml.client.scala.model.domain.AnyMapping +import amf.aml.internal.parse.instances.DialectInstanceContext +import NodePropertyConforms.conformsAgainstProperties +import amf.aml.internal.render.emitters.instances.DialectIndex +import amf.core.internal.parser.Root +import org.yaml.model.YMap + +case class IfThenElseFinderPath(root: Root) extends FinderPath { + override def walk(mapping: AnyMapping, map: YMap, index: DialectIndex, finder: ApplicableMappingFinder)( + implicit ctx: DialectInstanceContext): ApplicableMapping = { + mapping.ifMapping.option() match { + case Some(id) => + val ifMapping = index.maybeFindNodeMappingById(id).collect { case (_, mapping: AnyMapping) => mapping }.get + val conformsWithIf = conformsAgainstProperties(map, ifMapping, root) + val nextApplicable = + if (conformsWithIf) mapping.thenMapping.option().toSet else mapping.elseMapping.option().toSet + ApplicableMapping(couldFind = true, nextApplicable) + case None => + // TODO: add error + ApplicableMapping.empty + } + } +} diff --git a/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/applicable/NodePropertyConforms.scala b/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/applicable/NodePropertyConforms.scala new file mode 100644 index 00000000..cdc5d16d --- /dev/null +++ b/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/applicable/NodePropertyConforms.scala @@ -0,0 +1,42 @@ +package amf.aml.internal.parse.instances.parser.applicable + +import amf.aml.client.scala.model.domain.{AnyMapping, NodeMapping} +import amf.aml.internal.parse.instances.DialectInstanceContext +import amf.aml.internal.parse.instances.parser.{AmlSubGraphCollector, InstanceElementParser} +import amf.core.client.common.validation.AMFStyle +import amf.core.client.scala.errorhandling.DefaultErrorHandler +import amf.core.client.scala.validation.AMFValidationResult +import amf.core.internal.parser.Root +import amf.validation.internal.shacl.custom.CustomShaclValidator +import org.yaml.model.YMap + +object NodePropertyConforms { + def conformsAgainstProperties(map: YMap, mapping: AnyMapping, root: Root)(implicit ctx: DialectInstanceContext): Boolean = { + mapping match { + case nodeMapping: NodeMapping if nodeMapping.propertiesMapping().nonEmpty => + parseAndValidate(map, nodeMapping, root) + case _ => false + } + } + + private def parseAndValidate(map: YMap, mapping: NodeMapping, root: Root)( + implicit ctx: DialectInstanceContext): Boolean = { + val nextContext = ctx.copy(DefaultErrorHandler()) + val element = + InstanceElementParser(root).parse("", mapping.id, map, mapping, Map.empty, parseAllOf = false)(nextContext) + val conforms = ignoreClosedShapeErrors(nextContext.eh.getResults).isEmpty + if (!conforms) return false + val mappingsInTree = AmlSubGraphCollector.collect(mapping.id, ctx.dialect) + val validator = new CustomShaclValidator(Map.empty, AMFStyle) + val validations = ctx.constraints + .map(p => p.validations.filter(x => x.targetClass.intersect(mappingsInTree).nonEmpty)) + .getOrElse(Nil) + .toList + val report = validator.validate(element, validations) + report.conforms + } + + private def ignoreClosedShapeErrors(results: Seq[AMFValidationResult]): Seq[AMFValidationResult] = { + results.filterNot(_.validationId.contains("closed")) + } +} diff --git a/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/applicable/OrFinderPath.scala b/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/applicable/OrFinderPath.scala new file mode 100644 index 00000000..00cb0d79 --- /dev/null +++ b/amf-aml/shared/src/main/scala/amf/aml/internal/parse/instances/parser/applicable/OrFinderPath.scala @@ -0,0 +1,36 @@ +package amf.aml.internal.parse.instances.parser.applicable + +import amf.aml.client.scala.model.domain.AnyMapping +import amf.aml.internal.parse.instances.DialectInstanceContext +import ApplicableMapping.invalid +import NodePropertyConforms.conformsAgainstProperties +import amf.aml.internal.render.emitters.instances.DialectIndex +import amf.core.internal.parser.Root +import org.yaml.model.YMap + +case class OrFinderPath(root: Root) extends FinderPath { + + override def walk(mapping: AnyMapping, map: YMap, index: DialectIndex, finder: ApplicableMappingFinder)( + implicit ctx: DialectInstanceContext): ApplicableMapping = { + if (mapping.or.isEmpty) return ApplicableMapping.empty + val orMappings = findMappingsFor(mapping.or, index) + val applicableList = orMappings.map { mapping => + findMatches(map, index, mapping, finder) + } + val onlyOneMappingConforms = applicableList.count(_.couldFind) == 1 + if (!onlyOneMappingConforms) { + // TODO: throw error + } + applicableList.find(_.couldFind).getOrElse(invalid) + } + + protected def findMatches(map: YMap, index: DialectIndex, orMap: AnyMapping, finder: ApplicableMappingFinder)( + implicit ctx: DialectInstanceContext): ApplicableMapping = { + val applies = conformsAgainstProperties(map, orMap, root) + if (!applies) ApplicableMapping(couldFind = false, Set.empty[String]) + else { + val nested = finder.find(map, orMap, index) + nested + } + } +} diff --git a/amf-aml/shared/src/main/scala/amf/aml/internal/render/emitters/instances/AmlEmittersHelper.scala b/amf-aml/shared/src/main/scala/amf/aml/internal/render/emitters/instances/AmlEmittersHelper.scala index dfd2d78f..076a7233 100644 --- a/amf-aml/shared/src/main/scala/amf/aml/internal/render/emitters/instances/AmlEmittersHelper.scala +++ b/amf-aml/shared/src/main/scala/amf/aml/internal/render/emitters/instances/AmlEmittersHelper.scala @@ -171,7 +171,7 @@ trait AmlEmittersHelper extends DialectEmitterHelper { } type NodeMappingId = String - private val index = DialectIndex(dialect, nodeMappableFinder) + protected val index = DialectIndex(dialect, nodeMappableFinder) def findAllNodeMappings(mappableId: String): Seq[NodeMapping] = index.findAllNodeMappings(mappableId) def findNodeMappingById(nodeMappingId: NodeMappingId): (Dialect, AnyNodeMappable) = diff --git a/amf-aml/shared/src/main/scala/amf/aml/internal/render/emitters/instances/DialectIndex.scala b/amf-aml/shared/src/main/scala/amf/aml/internal/render/emitters/instances/DialectIndex.scala index c289fec8..bcffe5bc 100644 --- a/amf-aml/shared/src/main/scala/amf/aml/internal/render/emitters/instances/DialectIndex.scala +++ b/amf-aml/shared/src/main/scala/amf/aml/internal/render/emitters/instances/DialectIndex.scala @@ -14,6 +14,17 @@ object DialectIndex { class DialectIndex(private val dialect: Dialect, private val finder: NodeMappableFinder) { val cache: mutable.HashMap[NodeMappingId, (Dialect, AnyNodeMappable)] = mutable.HashMap.empty + val compositeCache: mutable.HashMap[Set[String], AnyMapping] = mutable.HashMap.empty + + def findCompositeMapping(components: Set[String]): Option[AnyMapping] = { + compositeCache.get(components) match { + case Some(mapping) => Some(mapping) + case _ => + dialect.declares + .collect { case mapping: AnyMapping if mapping.components.nonEmpty => mapping } + .find(mapping => mapping.components.flatMap(_.option()).toSet.equals(components)) + } + } def findNodeMappingById(nodeMappingId: NodeMappingId): (Dialect, AnyNodeMappable) = { cache diff --git a/amf-aml/shared/src/main/scala/amf/aml/internal/render/emitters/instances/DialectInstancesEmitter.scala b/amf-aml/shared/src/main/scala/amf/aml/internal/render/emitters/instances/DialectInstancesEmitter.scala index 9a9af3eb..ccb5994c 100644 --- a/amf-aml/shared/src/main/scala/amf/aml/internal/render/emitters/instances/DialectInstancesEmitter.scala +++ b/amf-aml/shared/src/main/scala/amf/aml/internal/render/emitters/instances/DialectInstancesEmitter.scala @@ -8,6 +8,7 @@ import amf.core.client.scala.model.document.EncodesModel import amf.core.internal.render.SpecOrdering import amf.core.internal.render.SpecOrdering.Lexical import amf.aml.client.scala.model.document._ +import amf.aml.client.scala.model.domain.NodeMappable.AnyNodeMappable import amf.aml.client.scala.model.domain._ import amf.aml.internal.registries.AMLRegistry import org.yaml.model.YDocument @@ -34,6 +35,19 @@ case class DialectInstancesEmitter(instance: DialectInstanceUnit, }) } + private def findRootNodeMapping(encodesModel: EncodesModel, dialectRoot: String): AnyNodeMappable = { + index.findNodeMappingById(dialectRoot)._2 match { + case union: UnionNodeMapping => index.findNodeMappingById(union.id)._2 + case _ => + val typesToLookup = encodesModel.encodes.meta.typeIris + typesToLookup + .foldLeft[Option[AnyNodeMappable]](None) { (result, typeIri) => + result.orElse(index.maybeFindNodeMappingById(typeIri).map(_._2)) + } + .getOrElse(index.findNodeMappingById(dialectRoot)._2) + } + } + private def emitEncoded(b: PartBuilder, encoded: EncodesModel): Unit = { val schema = s"${dialect.name().value()} ${dialect.version().value()}" @@ -52,7 +66,7 @@ case class DialectInstancesEmitter(instance: DialectInstanceUnit, dialect.documents().fragments().find(_.documentName().is(f.fragment().value())).map(_.encoded().value()).get) } - val (_, rootNodeMapping) = findNodeMappingById(root) + val rootNodeMapping = findRootNodeMapping(encoded, root) val discriminator = rootNodeMapping match { case mapping: UnionNodeMapping => Some(DiscriminatorHelper(mapping, this)) diff --git a/amf-aml/shared/src/main/scala/amf/aml/internal/semantic/SemanticExtensionParser.scala b/amf-aml/shared/src/main/scala/amf/aml/internal/semantic/SemanticExtensionParser.scala index 7a80d86a..0482fcb2 100644 --- a/amf-aml/shared/src/main/scala/amf/aml/internal/semantic/SemanticExtensionParser.scala +++ b/amf-aml/shared/src/main/scala/amf/aml/internal/semantic/SemanticExtensionParser.scala @@ -3,7 +3,7 @@ package amf.aml.internal.semantic import amf.aml.client.scala.model.document.Dialect import amf.aml.client.scala.model.domain.{AnnotationMapping, DialectDomainElement} import amf.aml.internal.parse.instances.DialectInstanceContext -import amf.aml.internal.parse.instances.parser.{ElementPropertyParser, InstanceNodeParser} +import amf.aml.internal.parse.instances.parser.{ElementPropertyParser, InstanceElementParser} import amf.aml.internal.render.emitters.instances.DefaultNodeMappableFinder import amf.aml.internal.semantic.SemanticExtensionHelper.{findAnnotationMapping, findSemanticExtension} import amf.aml.internal.semantic.SemanticExtensionOps.findExtensionMapping @@ -78,7 +78,7 @@ class SemanticExtensionParser(finder: ExtensionDialectFinder) { // TODO: improve, shouldn't have to create fake root node val fakeRoot = Root(SyamlParsedDocument(YDocument(YMap.empty)), "", "", Seq.empty, UnspecifiedReference, "{}") val instanceElement = DialectDomainElement().withId("someId") - val nodeParser = InstanceNodeParser(fakeRoot) + val nodeParser = InstanceElementParser(fakeRoot) val propertyParser = new ElementPropertyParser(fakeRoot, YMap.empty, nodeParser.parse) propertyParser.parse(extensionId, ast, mapping, instanceElement) ctx.futureDeclarations.resolve() diff --git a/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/dialect.yaml b/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/dialect.yaml new file mode 100644 index 00000000..d6ce2471 --- /dev/null +++ b/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/dialect.yaml @@ -0,0 +1,76 @@ +#%Dialect 1.0 +dialect: Mapping AllOf +version: 1.0 +external: + schema-org: https://schema.org/ +documents: + root: + encodes: Root +nodeMappings: + Root: + allOf: + - OrMember1 + - Conditional + Member11: + mapping: + am11: + range: string + mandatory: true + Member12: + mapping: + am12: + range: string + mandatory: true + OrMember1: + oneOf: + - Member11 + - Member12 + Conditional: + conditional: + if: IfAppliesMapping + then: ThenAppliesMapping + else: ElseAppliesMapping + + IfAppliesMapping: + mapping: + aProp: + range: string + enum: ["then-mapping"] + ThenAppliesMapping: + mapping: + aProp: + range: string + enum: [ "then-mapping" ] + ElseAppliesMapping: + mapping: + aProp: + range: string + enum: [ "else-mapping" ] + combining_mapping_1: + components: + - ThenAppliesMapping + - Member11 + extends: + - ThenAppliesMapping + - Member11 + combining_mapping_2: + components: + - ElseAppliesMapping + - Member11 + extends: + - ElseAppliesMapping + - Member11 + combining_mapping_3: + components: + - ThenAppliesMapping + - Member12 + extends: + - ThenAppliesMapping + - Member12 + combining_mapping_4: + components: + - ElseAppliesMapping + - Member12 + extends: + - ElseAppliesMapping + - Member12 diff --git a/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.cycled.yaml b/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.cycled.yaml new file mode 100644 index 00000000..96410fc1 --- /dev/null +++ b/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.cycled.yaml @@ -0,0 +1,3 @@ +#%Mapping AllOf 1.0 +am12: a +aProp: else-mapping diff --git a/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.expanded.jsonld b/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.expanded.jsonld new file mode 100644 index 00000000..51de8691 --- /dev/null +++ b/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.expanded.jsonld @@ -0,0 +1,137 @@ +[ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.yaml", + "@type": [ + "http://a.ml/vocabularies/meta#DialectInstance", + "http://a.ml/vocabularies/document#Document", + "http://a.ml/vocabularies/document#Fragment", + "http://a.ml/vocabularies/document#Module", + "http://a.ml/vocabularies/document#Unit" + ], + "http://a.ml/vocabularies/meta#definedBy": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/dialect.yaml" + } + ], + "http://a.ml/vocabularies/document#encodes": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.yaml#/encodes", + "@type": [ + "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/dialect.yaml#/declarations/combining_mapping_4", + "http://a.ml/vocabularies/meta#DialectDomainElement", + "http://a.ml/vocabularies/document#DomainElement" + ], + "http://a.ml/vocabularies/data#aProp": [ + { + "@value": "else-mapping" + } + ], + "http://a.ml/vocabularies/data#am12": [ + { + "@value": "a" + } + ], + "http://a.ml/vocabularies/document-source-maps#sources": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.yaml#/encodes/source-map", + "@type": [ + "http://a.ml/vocabularies/document-source-maps#SourceMap" + ], + "http://a.ml/vocabularies/document-source-maps#lexical": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.yaml#/encodes/source-map/lexical/element_2", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "http://a.ml/vocabularies/data#aProp" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(3,0)-(4,0)]" + } + ] + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.yaml#/encodes/source-map/lexical/element_0", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "http://a.ml/vocabularies/data#am12" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(2,0)-(3,0)]" + } + ] + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.yaml#/encodes/source-map/lexical/element_1", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.yaml#/encodes" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(2,0)-(4,0)]" + } + ] + } + ] + } + ] + } + ], + "http://a.ml/vocabularies/document#root": [ + { + "@value": true + } + ], + "http://a.ml/vocabularies/document#processingData": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.yaml/BaseUnitProcessingData", + "@type": [ + "http://a.ml/vocabularies/document#DialectInstanceProcessingData" + ], + "http://a.ml/vocabularies/meta#definedBy": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/dialect.yaml" + } + ], + "http://a.ml/vocabularies/document#transformed": [ + { + "@value": false + } + ], + "http://a.ml/vocabularies/document#sourceSpec": [ + { + "@value": "Mapping AllOf 1.0" + } + ] + } + ], + "http://a.ml/vocabularies/document-source-maps#sources": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.yaml#/source-map", + "@type": [ + "http://a.ml/vocabularies/document-source-maps#SourceMap" + ], + "http://a.ml/vocabularies/document-source-maps#lexical": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.yaml#/source-map/lexical/element_0", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.yaml" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(2,0)-(4,0)]" + } + ] + } + ] + } + ] + } +] diff --git a/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.flattened.jsonld b/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.flattened.jsonld new file mode 100644 index 00000000..ae33b0a2 --- /dev/null +++ b/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.flattened.jsonld @@ -0,0 +1,107 @@ +{ + "@graph": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.yaml/BaseUnitProcessingData", + "@type": [ + "http://a.ml/vocabularies/document#DialectInstanceProcessingData" + ], + "http://a.ml/vocabularies/meta#definedBy": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/dialect.yaml" + } + ], + "http://a.ml/vocabularies/document#transformed": false, + "http://a.ml/vocabularies/document#sourceSpec": "Mapping AllOf 1.0" + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.yaml#/encodes", + "@type": [ + "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/dialect.yaml#/declarations/combining_mapping_4", + "http://a.ml/vocabularies/meta#DialectDomainElement", + "http://a.ml/vocabularies/document#DomainElement" + ], + "http://a.ml/vocabularies/data#aProp": "else-mapping", + "http://a.ml/vocabularies/data#am12": "a", + "http://a.ml/vocabularies/document-source-maps#sources": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.yaml#/encodes/source-map" + } + ] + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.yaml#/encodes/source-map", + "@type": [ + "http://a.ml/vocabularies/document-source-maps#SourceMap" + ], + "http://a.ml/vocabularies/document-source-maps#lexical": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.yaml#/encodes/source-map/lexical/element_2" + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.yaml#/encodes/source-map/lexical/element_0" + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.yaml#/encodes/source-map/lexical/element_1" + } + ] + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.yaml#/encodes/source-map/lexical/element_2", + "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/data#aProp", + "http://a.ml/vocabularies/document-source-maps#value": "[(3,0)-(4,0)]" + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.yaml#/encodes/source-map/lexical/element_0", + "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/data#am12", + "http://a.ml/vocabularies/document-source-maps#value": "[(2,0)-(3,0)]" + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.yaml#/encodes/source-map/lexical/element_1", + "http://a.ml/vocabularies/document-source-maps#element": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.yaml#/encodes", + "http://a.ml/vocabularies/document-source-maps#value": "[(2,0)-(4,0)]" + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.yaml", + "@type": [ + "http://a.ml/vocabularies/meta#DialectInstance", + "http://a.ml/vocabularies/document#Document", + "http://a.ml/vocabularies/document#Fragment", + "http://a.ml/vocabularies/document#Module", + "http://a.ml/vocabularies/document#Unit" + ], + "http://a.ml/vocabularies/meta#definedBy": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/dialect.yaml" + } + ], + "http://a.ml/vocabularies/document#encodes": { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.yaml#/encodes" + }, + "http://a.ml/vocabularies/document#root": true, + "http://a.ml/vocabularies/document#processingData": { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.yaml/BaseUnitProcessingData" + }, + "http://a.ml/vocabularies/document-source-maps#sources": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.yaml#/source-map" + } + ] + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.yaml#/source-map", + "@type": [ + "http://a.ml/vocabularies/document-source-maps#SourceMap" + ], + "http://a.ml/vocabularies/document-source-maps#lexical": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.yaml#/source-map/lexical/element_0" + } + ] + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.yaml#/source-map/lexical/element_0", + "http://a.ml/vocabularies/document-source-maps#element": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.yaml", + "http://a.ml/vocabularies/document-source-maps#value": "[(2,0)-(4,0)]" + } + ] +} diff --git a/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.yaml b/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.yaml new file mode 100644 index 00000000..fbfb4a45 --- /dev/null +++ b/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-oneOf-if-then-else/instance.yaml @@ -0,0 +1,3 @@ +#%Mapping AllOf 1.0 +am12: a +aProp: "else-mapping" diff --git a/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/dialect.yaml b/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/dialect.yaml new file mode 100644 index 00000000..2ad5f2d7 --- /dev/null +++ b/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/dialect.yaml @@ -0,0 +1,39 @@ +#%Dialect 1.0 +dialect: Mapping AllOf +version: 1.0 +external: + schema-org: https://schema.org/ +documents: + root: + encodes: Root +nodeMappings: + Root: + mapping: + root1: + range: integer + root2: + range: string + allOf: + - AndMember1 + - AndMember2 + AndMember1: + mapping: + am11: + range: string + am12: + range: string + AndMember2: + mapping: + am21: + range: string + am22: + range: string + combining_mapping_1: + components: + - AndMember1 + - AndMember2 + - Root + extends: + - AndMember1 + - AndMember2 + - Root diff --git a/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.cycled.yaml b/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.cycled.yaml new file mode 100644 index 00000000..5d2a5322 --- /dev/null +++ b/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.cycled.yaml @@ -0,0 +1,7 @@ +#%Mapping AllOf 1.0 +am11: a +am12: b +am21: c +am22: d +root1: 5 +root2: aString diff --git a/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.expanded.jsonld b/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.expanded.jsonld new file mode 100644 index 00000000..b533f5eb --- /dev/null +++ b/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.expanded.jsonld @@ -0,0 +1,209 @@ +[ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml", + "@type": [ + "http://a.ml/vocabularies/meta#DialectInstance", + "http://a.ml/vocabularies/document#Document", + "http://a.ml/vocabularies/document#Fragment", + "http://a.ml/vocabularies/document#Module", + "http://a.ml/vocabularies/document#Unit" + ], + "http://a.ml/vocabularies/meta#definedBy": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/dialect.yaml" + } + ], + "http://a.ml/vocabularies/document#encodes": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml#/encodes", + "@type": [ + "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/dialect.yaml#/declarations/combining_mapping_1", + "http://a.ml/vocabularies/meta#DialectDomainElement", + "http://a.ml/vocabularies/document#DomainElement" + ], + "http://a.ml/vocabularies/data#am12": [ + { + "@value": "b" + } + ], + "http://a.ml/vocabularies/data#am11": [ + { + "@value": "a" + } + ], + "http://a.ml/vocabularies/data#am22": [ + { + "@value": "d" + } + ], + "http://a.ml/vocabularies/data#am21": [ + { + "@value": "c" + } + ], + "http://a.ml/vocabularies/data#root1": [ + { + "@value": 5 + } + ], + "http://a.ml/vocabularies/data#root2": [ + { + "@value": "aString" + } + ], + "http://a.ml/vocabularies/document-source-maps#sources": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml#/encodes/source-map", + "@type": [ + "http://a.ml/vocabularies/document-source-maps#SourceMap" + ], + "http://a.ml/vocabularies/document-source-maps#lexical": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml#/encodes/source-map/lexical/element_6", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "http://a.ml/vocabularies/data#root1" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(6,0)-(7,0)]" + } + ] + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml#/encodes/source-map/lexical/element_4", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "http://a.ml/vocabularies/data#am12" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(3,0)-(4,0)]" + } + ] + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml#/encodes/source-map/lexical/element_2", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "http://a.ml/vocabularies/data#am11" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(2,0)-(3,0)]" + } + ] + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml#/encodes/source-map/lexical/element_0", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "http://a.ml/vocabularies/data#root2" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(7,0)-(8,0)]" + } + ] + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml#/encodes/source-map/lexical/element_1", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "http://a.ml/vocabularies/data#am21" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(4,0)-(5,0)]" + } + ] + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml#/encodes/source-map/lexical/element_3", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml#/encodes" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(2,0)-(8,0)]" + } + ] + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml#/encodes/source-map/lexical/element_5", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "http://a.ml/vocabularies/data#am22" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(5,0)-(6,0)]" + } + ] + } + ] + } + ] + } + ], + "http://a.ml/vocabularies/document#root": [ + { + "@value": true + } + ], + "http://a.ml/vocabularies/document#processingData": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml/BaseUnitProcessingData", + "@type": [ + "http://a.ml/vocabularies/document#DialectInstanceProcessingData" + ], + "http://a.ml/vocabularies/meta#definedBy": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/dialect.yaml" + } + ], + "http://a.ml/vocabularies/document#transformed": [ + { + "@value": false + } + ], + "http://a.ml/vocabularies/document#sourceSpec": [ + { + "@value": "Mapping AllOf 1.0" + } + ] + } + ], + "http://a.ml/vocabularies/document-source-maps#sources": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml#/source-map", + "@type": [ + "http://a.ml/vocabularies/document-source-maps#SourceMap" + ], + "http://a.ml/vocabularies/document-source-maps#lexical": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml#/source-map/lexical/element_0", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(2,0)-(8,0)]" + } + ] + } + ] + } + ] + } +] diff --git a/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.flattened.jsonld b/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.flattened.jsonld new file mode 100644 index 00000000..f3223ae0 --- /dev/null +++ b/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.flattened.jsonld @@ -0,0 +1,143 @@ +{ + "@graph": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml/BaseUnitProcessingData", + "@type": [ + "http://a.ml/vocabularies/document#DialectInstanceProcessingData" + ], + "http://a.ml/vocabularies/meta#definedBy": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/dialect.yaml" + } + ], + "http://a.ml/vocabularies/document#transformed": false, + "http://a.ml/vocabularies/document#sourceSpec": "Mapping AllOf 1.0" + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml#/encodes", + "@type": [ + "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/dialect.yaml#/declarations/combining_mapping_1", + "http://a.ml/vocabularies/meta#DialectDomainElement", + "http://a.ml/vocabularies/document#DomainElement" + ], + "http://a.ml/vocabularies/data#am12": "b", + "http://a.ml/vocabularies/data#am11": "a", + "http://a.ml/vocabularies/data#am22": "d", + "http://a.ml/vocabularies/data#am21": "c", + "http://a.ml/vocabularies/data#root1": 5, + "http://a.ml/vocabularies/data#root2": "aString", + "http://a.ml/vocabularies/document-source-maps#sources": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml#/encodes/source-map" + } + ] + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml#/encodes/source-map", + "@type": [ + "http://a.ml/vocabularies/document-source-maps#SourceMap" + ], + "http://a.ml/vocabularies/document-source-maps#lexical": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml#/encodes/source-map/lexical/element_6" + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml#/encodes/source-map/lexical/element_4" + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml#/encodes/source-map/lexical/element_2" + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml#/encodes/source-map/lexical/element_0" + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml#/encodes/source-map/lexical/element_1" + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml#/encodes/source-map/lexical/element_3" + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml#/encodes/source-map/lexical/element_5" + } + ] + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml#/encodes/source-map/lexical/element_6", + "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/data#root1", + "http://a.ml/vocabularies/document-source-maps#value": "[(6,0)-(7,0)]" + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml#/encodes/source-map/lexical/element_4", + "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/data#am12", + "http://a.ml/vocabularies/document-source-maps#value": "[(3,0)-(4,0)]" + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml#/encodes/source-map/lexical/element_2", + "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/data#am11", + "http://a.ml/vocabularies/document-source-maps#value": "[(2,0)-(3,0)]" + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml#/encodes/source-map/lexical/element_0", + "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/data#root2", + "http://a.ml/vocabularies/document-source-maps#value": "[(7,0)-(8,0)]" + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml#/encodes/source-map/lexical/element_1", + "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/data#am21", + "http://a.ml/vocabularies/document-source-maps#value": "[(4,0)-(5,0)]" + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml#/encodes/source-map/lexical/element_3", + "http://a.ml/vocabularies/document-source-maps#element": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml#/encodes", + "http://a.ml/vocabularies/document-source-maps#value": "[(2,0)-(8,0)]" + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml#/encodes/source-map/lexical/element_5", + "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/data#am22", + "http://a.ml/vocabularies/document-source-maps#value": "[(5,0)-(6,0)]" + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml", + "@type": [ + "http://a.ml/vocabularies/meta#DialectInstance", + "http://a.ml/vocabularies/document#Document", + "http://a.ml/vocabularies/document#Fragment", + "http://a.ml/vocabularies/document#Module", + "http://a.ml/vocabularies/document#Unit" + ], + "http://a.ml/vocabularies/meta#definedBy": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/dialect.yaml" + } + ], + "http://a.ml/vocabularies/document#encodes": { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml#/encodes" + }, + "http://a.ml/vocabularies/document#root": true, + "http://a.ml/vocabularies/document#processingData": { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml/BaseUnitProcessingData" + }, + "http://a.ml/vocabularies/document-source-maps#sources": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml#/source-map" + } + ] + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml#/source-map", + "@type": [ + "http://a.ml/vocabularies/document-source-maps#SourceMap" + ], + "http://a.ml/vocabularies/document-source-maps#lexical": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml#/source-map/lexical/element_0" + } + ] + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml#/source-map/lexical/element_0", + "http://a.ml/vocabularies/document-source-maps#element": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml", + "http://a.ml/vocabularies/document-source-maps#value": "[(2,0)-(8,0)]" + } + ] +} diff --git a/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml b/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml new file mode 100644 index 00000000..5d2a5322 --- /dev/null +++ b/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-properties/instance.yaml @@ -0,0 +1,7 @@ +#%Mapping AllOf 1.0 +am11: a +am12: b +am21: c +am22: d +root1: 5 +root2: aString diff --git a/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/dialect.yaml b/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/dialect.yaml new file mode 100644 index 00000000..0dd7fb7a --- /dev/null +++ b/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/dialect.yaml @@ -0,0 +1,32 @@ +#%Dialect 1.0 +dialect: Mapping AllOf +version: 1.0 +external: + schema-org: https://schema.org/ +documents: + root: + encodes: Root +nodeMappings: + Root: + allOf: + - AndMember1 + - AndMember2 + AndMember1: + mapping: + am11: + range: string + am12: + range: string + AndMember2: + mapping: + am21: + range: string + am22: + range: string + combining_mapping_1: + components: + - AndMember1 + - AndMember2 + extends: + - AndMember1 + - AndMember2 diff --git a/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.cycled.yaml b/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.cycled.yaml new file mode 100644 index 00000000..b450a78f --- /dev/null +++ b/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.cycled.yaml @@ -0,0 +1,5 @@ +#%Mapping AllOf 1.0 +am11: a +am12: b +am21: c +am22: d diff --git a/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.expanded.jsonld b/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.expanded.jsonld new file mode 100644 index 00000000..80bba5f8 --- /dev/null +++ b/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.expanded.jsonld @@ -0,0 +1,173 @@ +[ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.yaml", + "@type": [ + "http://a.ml/vocabularies/meta#DialectInstance", + "http://a.ml/vocabularies/document#Document", + "http://a.ml/vocabularies/document#Fragment", + "http://a.ml/vocabularies/document#Module", + "http://a.ml/vocabularies/document#Unit" + ], + "http://a.ml/vocabularies/meta#definedBy": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/dialect.yaml" + } + ], + "http://a.ml/vocabularies/document#encodes": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.yaml#/encodes", + "@type": [ + "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/dialect.yaml#/declarations/combining_mapping_1", + "http://a.ml/vocabularies/meta#DialectDomainElement", + "http://a.ml/vocabularies/document#DomainElement" + ], + "http://a.ml/vocabularies/data#am12": [ + { + "@value": "b" + } + ], + "http://a.ml/vocabularies/data#am11": [ + { + "@value": "a" + } + ], + "http://a.ml/vocabularies/data#am22": [ + { + "@value": "d" + } + ], + "http://a.ml/vocabularies/data#am21": [ + { + "@value": "c" + } + ], + "http://a.ml/vocabularies/document-source-maps#sources": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.yaml#/encodes/source-map", + "@type": [ + "http://a.ml/vocabularies/document-source-maps#SourceMap" + ], + "http://a.ml/vocabularies/document-source-maps#lexical": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.yaml#/encodes/source-map/lexical/element_4", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "http://a.ml/vocabularies/data#am22" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(5,0)-(6,0)]" + } + ] + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.yaml#/encodes/source-map/lexical/element_2", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.yaml#/encodes" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(2,0)-(6,0)]" + } + ] + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.yaml#/encodes/source-map/lexical/element_0", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "http://a.ml/vocabularies/data#am21" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(4,0)-(5,0)]" + } + ] + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.yaml#/encodes/source-map/lexical/element_1", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "http://a.ml/vocabularies/data#am11" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(2,0)-(3,0)]" + } + ] + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.yaml#/encodes/source-map/lexical/element_3", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "http://a.ml/vocabularies/data#am12" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(3,0)-(4,0)]" + } + ] + } + ] + } + ] + } + ], + "http://a.ml/vocabularies/document#root": [ + { + "@value": true + } + ], + "http://a.ml/vocabularies/document#processingData": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.yaml/BaseUnitProcessingData", + "@type": [ + "http://a.ml/vocabularies/document#DialectInstanceProcessingData" + ], + "http://a.ml/vocabularies/meta#definedBy": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/dialect.yaml" + } + ], + "http://a.ml/vocabularies/document#transformed": [ + { + "@value": false + } + ], + "http://a.ml/vocabularies/document#sourceSpec": [ + { + "@value": "Mapping AllOf 1.0" + } + ] + } + ], + "http://a.ml/vocabularies/document-source-maps#sources": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.yaml#/source-map", + "@type": [ + "http://a.ml/vocabularies/document-source-maps#SourceMap" + ], + "http://a.ml/vocabularies/document-source-maps#lexical": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.yaml#/source-map/lexical/element_0", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.yaml" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(2,0)-(6,0)]" + } + ] + } + ] + } + ] + } +] diff --git a/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.flattened.jsonld b/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.flattened.jsonld new file mode 100644 index 00000000..b1c59115 --- /dev/null +++ b/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.flattened.jsonld @@ -0,0 +1,125 @@ +{ + "@graph": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.yaml/BaseUnitProcessingData", + "@type": [ + "http://a.ml/vocabularies/document#DialectInstanceProcessingData" + ], + "http://a.ml/vocabularies/meta#definedBy": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/dialect.yaml" + } + ], + "http://a.ml/vocabularies/document#transformed": false, + "http://a.ml/vocabularies/document#sourceSpec": "Mapping AllOf 1.0" + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.yaml#/encodes", + "@type": [ + "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/dialect.yaml#/declarations/combining_mapping_1", + "http://a.ml/vocabularies/meta#DialectDomainElement", + "http://a.ml/vocabularies/document#DomainElement" + ], + "http://a.ml/vocabularies/data#am12": "b", + "http://a.ml/vocabularies/data#am11": "a", + "http://a.ml/vocabularies/data#am22": "d", + "http://a.ml/vocabularies/data#am21": "c", + "http://a.ml/vocabularies/document-source-maps#sources": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.yaml#/encodes/source-map" + } + ] + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.yaml#/encodes/source-map", + "@type": [ + "http://a.ml/vocabularies/document-source-maps#SourceMap" + ], + "http://a.ml/vocabularies/document-source-maps#lexical": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.yaml#/encodes/source-map/lexical/element_4" + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.yaml#/encodes/source-map/lexical/element_2" + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.yaml#/encodes/source-map/lexical/element_0" + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.yaml#/encodes/source-map/lexical/element_1" + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.yaml#/encodes/source-map/lexical/element_3" + } + ] + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.yaml#/encodes/source-map/lexical/element_4", + "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/data#am22", + "http://a.ml/vocabularies/document-source-maps#value": "[(5,0)-(6,0)]" + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.yaml#/encodes/source-map/lexical/element_2", + "http://a.ml/vocabularies/document-source-maps#element": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.yaml#/encodes", + "http://a.ml/vocabularies/document-source-maps#value": "[(2,0)-(6,0)]" + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.yaml#/encodes/source-map/lexical/element_0", + "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/data#am21", + "http://a.ml/vocabularies/document-source-maps#value": "[(4,0)-(5,0)]" + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.yaml#/encodes/source-map/lexical/element_1", + "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/data#am11", + "http://a.ml/vocabularies/document-source-maps#value": "[(2,0)-(3,0)]" + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.yaml#/encodes/source-map/lexical/element_3", + "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/data#am12", + "http://a.ml/vocabularies/document-source-maps#value": "[(3,0)-(4,0)]" + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.yaml", + "@type": [ + "http://a.ml/vocabularies/meta#DialectInstance", + "http://a.ml/vocabularies/document#Document", + "http://a.ml/vocabularies/document#Fragment", + "http://a.ml/vocabularies/document#Module", + "http://a.ml/vocabularies/document#Unit" + ], + "http://a.ml/vocabularies/meta#definedBy": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/dialect.yaml" + } + ], + "http://a.ml/vocabularies/document#encodes": { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.yaml#/encodes" + }, + "http://a.ml/vocabularies/document#root": true, + "http://a.ml/vocabularies/document#processingData": { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.yaml/BaseUnitProcessingData" + }, + "http://a.ml/vocabularies/document-source-maps#sources": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.yaml#/source-map" + } + ] + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.yaml#/source-map", + "@type": [ + "http://a.ml/vocabularies/document-source-maps#SourceMap" + ], + "http://a.ml/vocabularies/document-source-maps#lexical": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.yaml#/source-map/lexical/element_0" + } + ] + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.yaml#/source-map/lexical/element_0", + "http://a.ml/vocabularies/document-source-maps#element": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.yaml", + "http://a.ml/vocabularies/document-source-maps#value": "[(2,0)-(6,0)]" + } + ] +} diff --git a/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.yaml b/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.yaml new file mode 100644 index 00000000..b450a78f --- /dev/null +++ b/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-simple/instance.yaml @@ -0,0 +1,5 @@ +#%Mapping AllOf 1.0 +am11: a +am12: b +am21: c +am22: d diff --git a/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/dialect.yaml b/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/dialect.yaml new file mode 100644 index 00000000..b71f53b6 --- /dev/null +++ b/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/dialect.yaml @@ -0,0 +1,53 @@ +#%Dialect 1.0 +dialect: Mapping AllOf +version: 1.0 +external: + schema-org: https://schema.org/ +documents: + root: + encodes: Root +nodeMappings: + Root: + allOf: + - OrMember1 + - AndMember2 + AndMember1: + mapping: + am11: + range: string + am12: + range: string + AndMember2: + mapping: + am21: + range: string + am22: + range: string + Member11: + mapping: + am11: + range: string + mandatory: true + Member12: + mapping: + am12: + range: string + mandatory: true + OrMember1: + oneOf: + - Member11 + - Member12 + combining_mapping_1: + components: + - AndMember2 + - Member11 + extends: + - AndMember2 + - Member11 + combining_mapping_2: + components: + - AndMember2 + - Member12 + extends: + - AndMember2 + - Member12 diff --git a/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.cycled.yaml b/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.cycled.yaml new file mode 100644 index 00000000..da6aa709 --- /dev/null +++ b/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.cycled.yaml @@ -0,0 +1,4 @@ +#%Mapping AllOf 1.0 +am11: a +am21: c +am22: d diff --git a/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.expanded.jsonld b/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.expanded.jsonld new file mode 100644 index 00000000..0a4468aa --- /dev/null +++ b/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.expanded.jsonld @@ -0,0 +1,155 @@ +[ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.yaml", + "@type": [ + "http://a.ml/vocabularies/meta#DialectInstance", + "http://a.ml/vocabularies/document#Document", + "http://a.ml/vocabularies/document#Fragment", + "http://a.ml/vocabularies/document#Module", + "http://a.ml/vocabularies/document#Unit" + ], + "http://a.ml/vocabularies/meta#definedBy": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/dialect.yaml" + } + ], + "http://a.ml/vocabularies/document#encodes": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.yaml#/encodes", + "@type": [ + "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/dialect.yaml#/declarations/combining_mapping_1", + "http://a.ml/vocabularies/meta#DialectDomainElement", + "http://a.ml/vocabularies/document#DomainElement" + ], + "http://a.ml/vocabularies/data#am22": [ + { + "@value": "d" + } + ], + "http://a.ml/vocabularies/data#am21": [ + { + "@value": "c" + } + ], + "http://a.ml/vocabularies/data#am11": [ + { + "@value": "a" + } + ], + "http://a.ml/vocabularies/document-source-maps#sources": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.yaml#/encodes/source-map", + "@type": [ + "http://a.ml/vocabularies/document-source-maps#SourceMap" + ], + "http://a.ml/vocabularies/document-source-maps#lexical": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.yaml#/encodes/source-map/lexical/element_3", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "http://a.ml/vocabularies/data#am21" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(3,0)-(4,0)]" + } + ] + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.yaml#/encodes/source-map/lexical/element_1", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "http://a.ml/vocabularies/data#am22" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(4,0)-(5,0)]" + } + ] + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.yaml#/encodes/source-map/lexical/element_0", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "http://a.ml/vocabularies/data#am11" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(2,0)-(3,0)]" + } + ] + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.yaml#/encodes/source-map/lexical/element_2", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.yaml#/encodes" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(2,0)-(5,0)]" + } + ] + } + ] + } + ] + } + ], + "http://a.ml/vocabularies/document#root": [ + { + "@value": true + } + ], + "http://a.ml/vocabularies/document#processingData": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.yaml/BaseUnitProcessingData", + "@type": [ + "http://a.ml/vocabularies/document#DialectInstanceProcessingData" + ], + "http://a.ml/vocabularies/meta#definedBy": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/dialect.yaml" + } + ], + "http://a.ml/vocabularies/document#transformed": [ + { + "@value": false + } + ], + "http://a.ml/vocabularies/document#sourceSpec": [ + { + "@value": "Mapping AllOf 1.0" + } + ] + } + ], + "http://a.ml/vocabularies/document-source-maps#sources": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.yaml#/source-map", + "@type": [ + "http://a.ml/vocabularies/document-source-maps#SourceMap" + ], + "http://a.ml/vocabularies/document-source-maps#lexical": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.yaml#/source-map/lexical/element_0", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.yaml" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(2,0)-(5,0)]" + } + ] + } + ] + } + ] + } +] diff --git a/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.flattened.jsonld b/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.flattened.jsonld new file mode 100644 index 00000000..ff909ac1 --- /dev/null +++ b/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.flattened.jsonld @@ -0,0 +1,116 @@ +{ + "@graph": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.yaml/BaseUnitProcessingData", + "@type": [ + "http://a.ml/vocabularies/document#DialectInstanceProcessingData" + ], + "http://a.ml/vocabularies/meta#definedBy": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/dialect.yaml" + } + ], + "http://a.ml/vocabularies/document#transformed": false, + "http://a.ml/vocabularies/document#sourceSpec": "Mapping AllOf 1.0" + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.yaml#/encodes", + "@type": [ + "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/dialect.yaml#/declarations/combining_mapping_1", + "http://a.ml/vocabularies/meta#DialectDomainElement", + "http://a.ml/vocabularies/document#DomainElement" + ], + "http://a.ml/vocabularies/data#am22": "d", + "http://a.ml/vocabularies/data#am21": "c", + "http://a.ml/vocabularies/data#am11": "a", + "http://a.ml/vocabularies/document-source-maps#sources": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.yaml#/encodes/source-map" + } + ] + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.yaml#/encodes/source-map", + "@type": [ + "http://a.ml/vocabularies/document-source-maps#SourceMap" + ], + "http://a.ml/vocabularies/document-source-maps#lexical": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.yaml#/encodes/source-map/lexical/element_3" + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.yaml#/encodes/source-map/lexical/element_1" + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.yaml#/encodes/source-map/lexical/element_0" + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.yaml#/encodes/source-map/lexical/element_2" + } + ] + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.yaml#/encodes/source-map/lexical/element_3", + "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/data#am21", + "http://a.ml/vocabularies/document-source-maps#value": "[(3,0)-(4,0)]" + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.yaml#/encodes/source-map/lexical/element_1", + "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/data#am22", + "http://a.ml/vocabularies/document-source-maps#value": "[(4,0)-(5,0)]" + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.yaml#/encodes/source-map/lexical/element_0", + "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/data#am11", + "http://a.ml/vocabularies/document-source-maps#value": "[(2,0)-(3,0)]" + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.yaml#/encodes/source-map/lexical/element_2", + "http://a.ml/vocabularies/document-source-maps#element": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.yaml#/encodes", + "http://a.ml/vocabularies/document-source-maps#value": "[(2,0)-(5,0)]" + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.yaml", + "@type": [ + "http://a.ml/vocabularies/meta#DialectInstance", + "http://a.ml/vocabularies/document#Document", + "http://a.ml/vocabularies/document#Fragment", + "http://a.ml/vocabularies/document#Module", + "http://a.ml/vocabularies/document#Unit" + ], + "http://a.ml/vocabularies/meta#definedBy": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/dialect.yaml" + } + ], + "http://a.ml/vocabularies/document#encodes": { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.yaml#/encodes" + }, + "http://a.ml/vocabularies/document#root": true, + "http://a.ml/vocabularies/document#processingData": { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.yaml/BaseUnitProcessingData" + }, + "http://a.ml/vocabularies/document-source-maps#sources": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.yaml#/source-map" + } + ] + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.yaml#/source-map", + "@type": [ + "http://a.ml/vocabularies/document-source-maps#SourceMap" + ], + "http://a.ml/vocabularies/document-source-maps#lexical": [ + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.yaml#/source-map/lexical/element_0" + } + ] + }, + { + "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.yaml#/source-map/lexical/element_0", + "http://a.ml/vocabularies/document-source-maps#element": "file://amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.yaml", + "http://a.ml/vocabularies/document-source-maps#value": "[(2,0)-(5,0)]" + } + ] +} diff --git a/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.yaml b/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.yaml new file mode 100644 index 00000000..da6aa709 --- /dev/null +++ b/amf-aml/shared/src/test/resources/vocabularies2/instances/allOf-with-nested-oneOf/instance.yaml @@ -0,0 +1,4 @@ +#%Mapping AllOf 1.0 +am11: a +am21: c +am22: d diff --git a/amf-aml/shared/src/test/scala/amf/testing/parsing/DialectInstancesParsingTest.scala b/amf-aml/shared/src/test/scala/amf/testing/parsing/DialectInstancesParsingTest.scala index f2fcc573..ec978662 100644 --- a/amf-aml/shared/src/test/scala/amf/testing/parsing/DialectInstancesParsingTest.scala +++ b/amf-aml/shared/src/test/scala/amf/testing/parsing/DialectInstancesParsingTest.scala @@ -1179,6 +1179,84 @@ trait DialectInstancesParsingTest extends DialectTests { directory = s"$basePath/if-then-else-invalid-if/") } + multiGoldenTest("combination: allOf with nested oneOf from YAML to JSON-LD", "instance.%s") { config => + cycleWithDialect( + "dialect.yaml", + "instance.yaml", + config.golden, + mediaType = Some(Mimes.`application/ld+json`), + renderOptions = Some(config.renderOptions), + directory = s"$basePath/allOf-with-nested-oneOf/" + ) + } + + multiSourceTest("combination: allOf with nested oneOf from JSON-LD to YAML", "instance.%s") { config => + cycleWithDialect("dialect.yaml", + config.source, + "instance.cycled.yaml", + Some(Mimes.`application/yaml`), + directory = s"$basePath/allOf-with-nested-oneOf/") + } + + multiGoldenTest("combination: allOf with simple mappings from YAML to JSON-LD", "instance.%s") { config => + cycleWithDialect( + "dialect.yaml", + "instance.yaml", + config.golden, + mediaType = Some(Mimes.`application/ld+json`), + renderOptions = Some(config.renderOptions), + directory = s"$basePath/allOf-simple/" + ) + } + + multiSourceTest("combination: allOf with simple mappings from JSON-LD to YAML", "instance.%s") { config => + cycleWithDialect("dialect.yaml", + config.source, + "instance.cycled.yaml", + Some(Mimes.`application/yaml`), + directory = s"$basePath/allOf-simple/") + } + + multiGoldenTest("combination: allOf with simple mappings and properties from YAML to JSON-LD", "instance.%s") { + config => + cycleWithDialect( + "dialect.yaml", + "instance.yaml", + config.golden, + mediaType = Some(Mimes.`application/ld+json`), + renderOptions = Some(config.renderOptions), + directory = s"$basePath/allOf-properties/" + ) + } + + multiSourceTest("combination: allOf with simple mappings and properties from JSON-LD to YAML", "instance.%s") { + config => + cycleWithDialect("dialect.yaml", + config.source, + "instance.cycled.yaml", + Some(Mimes.`application/yaml`), + directory = s"$basePath/allOf-properties/") + } + + multiGoldenTest("combination: allOf with oneOf and if-then-else from YAML to JSON-LD", "instance.%s") { config => + cycleWithDialect( + "dialect.yaml", + "instance.yaml", + config.golden, + mediaType = Some(Mimes.`application/ld+json`), + renderOptions = Some(config.renderOptions), + directory = s"$basePath/allOf-oneOf-if-then-else/" + ) + } + + multiSourceTest("combination: allOf with oneOf and if-then-else JSON-LD to YAML", "instance.%s") { config => + cycleWithDialect("dialect.yaml", + config.source, + "instance.cycled.yaml", + Some(Mimes.`application/yaml`), + directory = s"$basePath/allOf-oneOf-if-then-else/") + } + //noinspection SameParameterValue protected def withInlineDialect(source: String, golden: String, From 24428ed411a25c94a7cbc8b142a3b106cd6fa2e2 Mon Sep 17 00:00:00 2001 From: Loose Date: Fri, 1 Apr 2022 11:51:19 -0300 Subject: [PATCH 2/2] Added 'additionalProperties: true' as default in all combining mappings --- .../steps/DialectCombiningMappingStage.scala | 2 + .../dialect.resolved.expanded.jsonld | 20 ++++++++++ .../dialect.resolved.flattened.jsonld | 4 ++ .../allOf-complex/dialect.resolved.yaml | 4 ++ .../dialect.resolved.expanded.jsonld | 30 ++++++++++++++ .../dialect.resolved.flattened.jsonld | 6 +++ .../allOf-nested-allOf/dialect.resolved.yaml | 6 +++ .../dialect.resolved.expanded.jsonld | 40 +++++++++++++++++++ .../dialect.resolved.flattened.jsonld | 8 ++++ .../allOf-nested/dialect.resolved.yaml | 8 ++++ .../dialect.resolved.expanded.jsonld | 5 +++ .../dialect.resolved.flattened.jsonld | 1 + .../extended-mapping-1/dialect.resolved.yaml | 1 + .../dialect.resolved.expanded.jsonld | 15 +++++++ .../dialect.resolved.flattened.jsonld | 3 ++ .../extended-mapping-2/dialect.resolved.yaml | 3 ++ .../dialect.resolved.expanded.jsonld | 10 +++++ .../dialect.resolved.flattened.jsonld | 2 + .../extended-mapping-3/dialect.resolved.yaml | 2 + 19 files changed, 170 insertions(+) diff --git a/amf-aml/shared/src/main/scala/amf/aml/internal/transform/steps/DialectCombiningMappingStage.scala b/amf-aml/shared/src/main/scala/amf/aml/internal/transform/steps/DialectCombiningMappingStage.scala index 9cbed48f..a9b59763 100644 --- a/amf-aml/shared/src/main/scala/amf/aml/internal/transform/steps/DialectCombiningMappingStage.scala +++ b/amf-aml/shared/src/main/scala/amf/aml/internal/transform/steps/DialectCombiningMappingStage.scala @@ -88,6 +88,8 @@ class DialectCombiningMappingStage extends TransformationStep() { mapping.extend.zipWithIndex.foreach { case (e, i) => e.withId(s"${e.id}-link-extends-$i") } + // TODO: We will set here an 'additionalProperties: true' for all combination mappings. Maybe this should be inherit from the extends in a future + mapping.withClosed(false) } // This method collect the schema defined at the same level diff --git a/amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-complex/dialect.resolved.expanded.jsonld b/amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-complex/dialect.resolved.expanded.jsonld index dcaccdd7..17f0c5a1 100644 --- a/amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-complex/dialect.resolved.expanded.jsonld +++ b/amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-complex/dialect.resolved.expanded.jsonld @@ -323,6 +323,11 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-complex/dialect.yaml#/declarations/OrMember2" } ], +"http://www.w3.org/ns/shacl#closed": [ +{ +"@value": false +} +], "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-complex/dialect.yaml#/declarations/AndMember1" @@ -535,6 +540,11 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-complex/dialect.yaml#/declarations/OrMember2" } ], +"http://www.w3.org/ns/shacl#closed": [ +{ +"@value": false +} +], "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-complex/dialect.yaml#/declarations/AndMember1" @@ -731,6 +741,11 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-complex/dialect.yaml#/declarations/OrMember1" } ], +"http://www.w3.org/ns/shacl#closed": [ +{ +"@value": false +} +], "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-complex/dialect.yaml#/declarations/AndMember1" @@ -974,6 +989,11 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-complex/dialect.yaml#/declarations/OrMember1" } ], +"http://www.w3.org/ns/shacl#closed": [ +{ +"@value": false +} +], "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-complex/dialect.yaml#/declarations/AndMember1" diff --git a/amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-complex/dialect.resolved.flattened.jsonld b/amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-complex/dialect.resolved.flattened.jsonld index d9bafc1a..bb3d35c0 100644 --- a/amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-complex/dialect.resolved.flattened.jsonld +++ b/amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-complex/dialect.resolved.flattened.jsonld @@ -205,6 +205,7 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-complex/dialect.yaml#/declarations/OrMember2" } ], +"http://www.w3.org/ns/shacl#closed": false, "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-complex/dialect.yaml#/declarations/AndMember1" @@ -291,6 +292,7 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-complex/dialect.yaml#/declarations/OrMember2" } ], +"http://www.w3.org/ns/shacl#closed": false, "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-complex/dialect.yaml#/declarations/AndMember1" @@ -353,6 +355,7 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-complex/dialect.yaml#/declarations/OrMember1" } ], +"http://www.w3.org/ns/shacl#closed": false, "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-complex/dialect.yaml#/declarations/AndMember1" @@ -432,6 +435,7 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-complex/dialect.yaml#/declarations/OrMember1" } ], +"http://www.w3.org/ns/shacl#closed": false, "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-complex/dialect.yaml#/declarations/AndMember1" diff --git a/amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-complex/dialect.resolved.yaml b/amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-complex/dialect.resolved.yaml index 4ee200ec..0cd3bddf 100644 --- a/amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-complex/dialect.resolved.yaml +++ b/amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-complex/dialect.resolved.yaml @@ -66,6 +66,7 @@ nodeMappings: propertyTerm: schema-org.something om21: range: boolean + additionalProperties: true CombiningMapping_4: components: - AndMember1 @@ -81,6 +82,7 @@ nodeMappings: propertyTerm: schema-org.no-something om21: range: boolean + additionalProperties: true CombiningMapping_1: components: - AndMember1 @@ -98,6 +100,7 @@ nodeMappings: range: string om12: range: number + additionalProperties: true CombiningMapping_3: components: - AndMember1 @@ -115,5 +118,6 @@ nodeMappings: range: string om12: range: number + additionalProperties: true dialect: Mapping AllOf version: "1.0" diff --git a/amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested-allOf/dialect.resolved.expanded.jsonld b/amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested-allOf/dialect.resolved.expanded.jsonld index c6866943..0ce2f700 100644 --- a/amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested-allOf/dialect.resolved.expanded.jsonld +++ b/amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested-allOf/dialect.resolved.expanded.jsonld @@ -237,6 +237,11 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested-allOf/dialect.yaml#/declarations/InnerOrMember1" } ], +"http://www.w3.org/ns/shacl#closed": [ +{ +"@value": false +} +], "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested-allOf/dialect.yaml#/declarations/InnerConditionNoMatch" @@ -396,6 +401,11 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested-allOf/dialect.yaml#/declarations/AndMember3" } ], +"http://www.w3.org/ns/shacl#closed": [ +{ +"@value": false +} +], "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested-allOf/dialect.yaml#/declarations/AndMember1" @@ -637,6 +647,11 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested-allOf/dialect.yaml#/declarations/InnerOrMember2" } ], +"http://www.w3.org/ns/shacl#closed": [ +{ +"@value": false +} +], "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested-allOf/dialect.yaml#/declarations/InnerConditionMatch" @@ -761,6 +776,11 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested-allOf/dialect.yaml#/declarations/AndMember3" } ], +"http://www.w3.org/ns/shacl#closed": [ +{ +"@value": false +} +], "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested-allOf/dialect.yaml#/declarations/AndMember1" @@ -934,6 +954,11 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested-allOf/dialect.yaml#/declarations/InnerOrMember2" } ], +"http://www.w3.org/ns/shacl#closed": [ +{ +"@value": false +} +], "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested-allOf/dialect.yaml#/declarations/InnerConditionNoMatch" @@ -1118,6 +1143,11 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested-allOf/dialect.yaml#/declarations/InnerOrMember1" } ], +"http://www.w3.org/ns/shacl#closed": [ +{ +"@value": false +} +], "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested-allOf/dialect.yaml#/declarations/InnerConditionMatch" diff --git a/amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested-allOf/dialect.resolved.flattened.jsonld b/amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested-allOf/dialect.resolved.flattened.jsonld index 6eeee768..a7c27b70 100644 --- a/amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested-allOf/dialect.resolved.flattened.jsonld +++ b/amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested-allOf/dialect.resolved.flattened.jsonld @@ -186,6 +186,7 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested-allOf/dialect.yaml#/declarations/InnerOrMember1" } ], +"http://www.w3.org/ns/shacl#closed": false, "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested-allOf/dialect.yaml#/declarations/InnerConditionNoMatch" @@ -242,6 +243,7 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested-allOf/dialect.yaml#/declarations/AndMember3" } ], +"http://www.w3.org/ns/shacl#closed": false, "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested-allOf/dialect.yaml#/declarations/AndMember1" @@ -344,6 +346,7 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested-allOf/dialect.yaml#/declarations/InnerOrMember2" } ], +"http://www.w3.org/ns/shacl#closed": false, "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested-allOf/dialect.yaml#/declarations/InnerConditionMatch" @@ -403,6 +406,7 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested-allOf/dialect.yaml#/declarations/AndMember3" } ], +"http://www.w3.org/ns/shacl#closed": false, "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested-allOf/dialect.yaml#/declarations/AndMember1" @@ -484,6 +488,7 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested-allOf/dialect.yaml#/declarations/InnerOrMember2" } ], +"http://www.w3.org/ns/shacl#closed": false, "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested-allOf/dialect.yaml#/declarations/InnerConditionNoMatch" @@ -561,6 +566,7 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested-allOf/dialect.yaml#/declarations/InnerOrMember1" } ], +"http://www.w3.org/ns/shacl#closed": false, "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested-allOf/dialect.yaml#/declarations/InnerConditionMatch" diff --git a/amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested-allOf/dialect.resolved.yaml b/amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested-allOf/dialect.resolved.yaml index 43dd62f0..9c5d6c45 100644 --- a/amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested-allOf/dialect.resolved.yaml +++ b/amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested-allOf/dialect.resolved.yaml @@ -88,6 +88,7 @@ nodeMappings: range: string om12: range: number + additionalProperties: true CombiningMapping_6: components: - AndMember1 @@ -101,6 +102,7 @@ nodeMappings: c1: range: string propertyTerm: schema-org.no-something + additionalProperties: true CombiningMapping_2: components: - InnerConditionMatch @@ -111,6 +113,7 @@ nodeMappings: propertyTerm: schema-org.other-something om21: range: boolean + additionalProperties: true CombiningMapping_5: components: - AndMember1 @@ -124,6 +127,7 @@ nodeMappings: c1: range: string propertyTerm: schema-org.something + additionalProperties: true CombiningMapping_4: components: - InnerConditionNoMatch @@ -134,6 +138,7 @@ nodeMappings: propertyTerm: schema-org.no-other-something om21: range: boolean + additionalProperties: true CombiningMapping_1: components: - InnerConditionMatch @@ -146,5 +151,6 @@ nodeMappings: range: string om12: range: number + additionalProperties: true dialect: Mapping AllOf version: "1.0" diff --git a/amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.resolved.expanded.jsonld b/amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.resolved.expanded.jsonld index 05d299e6..445eb23c 100644 --- a/amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.resolved.expanded.jsonld +++ b/amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.resolved.expanded.jsonld @@ -226,6 +226,11 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.yaml#/declarations/InnerOrMember1" } ], +"http://www.w3.org/ns/shacl#closed": [ +{ +"@value": false +} +], "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.yaml#/declarations/AndMember1" @@ -379,6 +384,11 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.yaml#/declarations/InnerConditionNoMatch" } ], +"http://www.w3.org/ns/shacl#closed": [ +{ +"@value": false +} +], "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.yaml#/declarations/AndMember1" @@ -584,6 +594,11 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.yaml#/declarations/InnerOrMember2" } ], +"http://www.w3.org/ns/shacl#closed": [ +{ +"@value": false +} +], "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.yaml#/declarations/AndMember1" @@ -783,6 +798,11 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.yaml#/declarations/InnerConditionNoMatch" } ], +"http://www.w3.org/ns/shacl#closed": [ +{ +"@value": false +} +], "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.yaml#/declarations/AndMember1" @@ -932,6 +952,11 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.yaml#/declarations/InnerConditionMatch" } ], +"http://www.w3.org/ns/shacl#closed": [ +{ +"@value": false +} +], "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.yaml#/declarations/AndMember1" @@ -1245,6 +1270,11 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.yaml#/declarations/InnerOrMember2" } ], +"http://www.w3.org/ns/shacl#closed": [ +{ +"@value": false +} +], "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.yaml#/declarations/AndMember1" @@ -1413,6 +1443,11 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.yaml#/declarations/InnerOrMember1" } ], +"http://www.w3.org/ns/shacl#closed": [ +{ +"@value": false +} +], "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.yaml#/declarations/AndMember1" @@ -1597,6 +1632,11 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.yaml#/declarations/InnerConditionMatch" } ], +"http://www.w3.org/ns/shacl#closed": [ +{ +"@value": false +} +], "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.yaml#/declarations/AndMember1" diff --git a/amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.resolved.flattened.jsonld b/amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.resolved.flattened.jsonld index b77dc3d8..e35a2909 100644 --- a/amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.resolved.flattened.jsonld +++ b/amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.resolved.flattened.jsonld @@ -170,6 +170,7 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.yaml#/declarations/InnerOrMember1" } ], +"http://www.w3.org/ns/shacl#closed": false, "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.yaml#/declarations/AndMember1" @@ -239,6 +240,7 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.yaml#/declarations/InnerConditionNoMatch" } ], +"http://www.w3.org/ns/shacl#closed": false, "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.yaml#/declarations/AndMember1" @@ -318,6 +320,7 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.yaml#/declarations/InnerOrMember2" } ], +"http://www.w3.org/ns/shacl#closed": false, "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.yaml#/declarations/AndMember1" @@ -391,6 +394,7 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.yaml#/declarations/InnerConditionNoMatch" } ], +"http://www.w3.org/ns/shacl#closed": false, "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.yaml#/declarations/AndMember1" @@ -456,6 +460,7 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.yaml#/declarations/InnerConditionMatch" } ], +"http://www.w3.org/ns/shacl#closed": false, "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.yaml#/declarations/AndMember1" @@ -581,6 +586,7 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.yaml#/declarations/InnerOrMember2" } ], +"http://www.w3.org/ns/shacl#closed": false, "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.yaml#/declarations/AndMember1" @@ -646,6 +652,7 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.yaml#/declarations/InnerOrMember1" } ], +"http://www.w3.org/ns/shacl#closed": false, "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.yaml#/declarations/AndMember1" @@ -708,6 +715,7 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.yaml#/declarations/InnerConditionMatch" } ], +"http://www.w3.org/ns/shacl#closed": false, "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.yaml#/declarations/AndMember1" diff --git a/amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.resolved.yaml b/amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.resolved.yaml index 0349c597..6a9cc852 100644 --- a/amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.resolved.yaml +++ b/amf-aml/shared/src/test/resources/vocabularies2/dialects/allOf-nested/dialect.resolved.yaml @@ -93,6 +93,7 @@ nodeMappings: range: string om12: range: number + additionalProperties: true CombiningMapping_6: components: - AndMember1 @@ -109,6 +110,7 @@ nodeMappings: c2: range: string propertyTerm: schema-org.no-other-something + additionalProperties: true CombiningMapping_8: components: - AndMember1 @@ -124,6 +126,7 @@ nodeMappings: propertyTerm: schema-org.no-something om21: range: boolean + additionalProperties: true CombiningMapping_2: components: - AndMember1 @@ -140,6 +143,7 @@ nodeMappings: c2: range: string propertyTerm: schema-org.no-other-something + additionalProperties: true CombiningMapping_5: components: - AndMember1 @@ -156,6 +160,7 @@ nodeMappings: c2: range: string propertyTerm: schema-org.other-something + additionalProperties: true CombiningMapping_4: components: - AndMember1 @@ -171,6 +176,7 @@ nodeMappings: propertyTerm: schema-org.something om21: range: boolean + additionalProperties: true CombiningMapping_7: components: - AndMember1 @@ -188,6 +194,7 @@ nodeMappings: range: string om12: range: number + additionalProperties: true CombiningMapping_1: components: - AndMember1 @@ -204,5 +211,6 @@ nodeMappings: c2: range: string propertyTerm: schema-org.other-something + additionalProperties: true dialect: Mapping AllOf version: "1.0" diff --git a/amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-1/dialect.resolved.expanded.jsonld b/amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-1/dialect.resolved.expanded.jsonld index 6a0fddf0..f0a52c86 100644 --- a/amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-1/dialect.resolved.expanded.jsonld +++ b/amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-1/dialect.resolved.expanded.jsonld @@ -542,6 +542,11 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-1/dialect.yaml#/declarations/Root" } ], +"http://www.w3.org/ns/shacl#closed": [ +{ +"@value": false +} +], "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-1/dialect.yaml#/declarations/Member1" diff --git a/amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-1/dialect.resolved.flattened.jsonld b/amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-1/dialect.resolved.flattened.jsonld index 6cb402e1..ab3a9754 100644 --- a/amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-1/dialect.resolved.flattened.jsonld +++ b/amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-1/dialect.resolved.flattened.jsonld @@ -210,6 +210,7 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-1/dialect.yaml#/declarations/Root" } ], +"http://www.w3.org/ns/shacl#closed": false, "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-1/dialect.yaml#/declarations/Member1" diff --git a/amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-1/dialect.resolved.yaml b/amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-1/dialect.resolved.yaml index 6529ad86..8965f2f0 100644 --- a/amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-1/dialect.resolved.yaml +++ b/amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-1/dialect.resolved.yaml @@ -56,5 +56,6 @@ nodeMappings: range: string am32: range: string + additionalProperties: true dialect: Mapping extended version: "1.0" diff --git a/amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-2/dialect.resolved.expanded.jsonld b/amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-2/dialect.resolved.expanded.jsonld index 9e609354..1bb9ef2d 100644 --- a/amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-2/dialect.resolved.expanded.jsonld +++ b/amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-2/dialect.resolved.expanded.jsonld @@ -260,6 +260,11 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-2/dialect.yaml#/declarations/Root" } ], +"http://www.w3.org/ns/shacl#closed": [ +{ +"@value": false +} +], "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-2/dialect.yaml#/declarations/Member1" @@ -438,6 +443,11 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-2/dialect.yaml#/declarations/Root" } ], +"http://www.w3.org/ns/shacl#closed": [ +{ +"@value": false +} +], "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-2/dialect.yaml#/declarations/Member3" @@ -616,6 +626,11 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-2/dialect.yaml#/declarations/Root" } ], +"http://www.w3.org/ns/shacl#closed": [ +{ +"@value": false +} +], "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-2/dialect.yaml#/declarations/Member2" diff --git a/amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-2/dialect.resolved.flattened.jsonld b/amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-2/dialect.resolved.flattened.jsonld index b7bde87a..f300fba3 100644 --- a/amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-2/dialect.resolved.flattened.jsonld +++ b/amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-2/dialect.resolved.flattened.jsonld @@ -136,6 +136,7 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-2/dialect.yaml#/declarations/Root" } ], +"http://www.w3.org/ns/shacl#closed": false, "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-2/dialect.yaml#/declarations/Member1" @@ -192,6 +193,7 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-2/dialect.yaml#/declarations/Root" } ], +"http://www.w3.org/ns/shacl#closed": false, "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-2/dialect.yaml#/declarations/Member3" @@ -248,6 +250,7 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-2/dialect.yaml#/declarations/Root" } ], +"http://www.w3.org/ns/shacl#closed": false, "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-2/dialect.yaml#/declarations/Member2" diff --git a/amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-2/dialect.resolved.yaml b/amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-2/dialect.resolved.yaml index e528d822..1bd062a3 100644 --- a/amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-2/dialect.resolved.yaml +++ b/amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-2/dialect.resolved.yaml @@ -46,6 +46,7 @@ nodeMappings: range: string am12: range: string + additionalProperties: true CombiningMapping_3: components: - Member3 @@ -59,6 +60,7 @@ nodeMappings: range: string am32: range: string + additionalProperties: true CombiningMapping_2: components: - Member2 @@ -72,5 +74,6 @@ nodeMappings: range: string am22: range: string + additionalProperties: true dialect: Mapping extended version: "1.0" diff --git a/amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-3/dialect.resolved.expanded.jsonld b/amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-3/dialect.resolved.expanded.jsonld index f64b0934..0f10b913 100644 --- a/amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-3/dialect.resolved.expanded.jsonld +++ b/amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-3/dialect.resolved.expanded.jsonld @@ -216,6 +216,11 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-3/dialect.yaml#/declarations/Root" } ], +"http://www.w3.org/ns/shacl#closed": [ +{ +"@value": false +} +], "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-3/dialect.yaml#/declarations/ThenMapping" @@ -350,6 +355,11 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-3/dialect.yaml#/declarations/Root" } ], +"http://www.w3.org/ns/shacl#closed": [ +{ +"@value": false +} +], "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-3/dialect.yaml#/declarations/ElseMapping" diff --git a/amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-3/dialect.resolved.flattened.jsonld b/amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-3/dialect.resolved.flattened.jsonld index 0930d35b..f7c6bd9d 100644 --- a/amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-3/dialect.resolved.flattened.jsonld +++ b/amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-3/dialect.resolved.flattened.jsonld @@ -127,6 +127,7 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-3/dialect.yaml#/declarations/Root" } ], +"http://www.w3.org/ns/shacl#closed": false, "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-3/dialect.yaml#/declarations/ThenMapping" @@ -177,6 +178,7 @@ "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-3/dialect.yaml#/declarations/Root" } ], +"http://www.w3.org/ns/shacl#closed": false, "http://a.ml/vocabularies/amf/aml#components": [ { "@id": "file://amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-3/dialect.yaml#/declarations/ElseMapping" diff --git a/amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-3/dialect.resolved.yaml b/amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-3/dialect.resolved.yaml index b96a9151..85956b16 100644 --- a/amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-3/dialect.resolved.yaml +++ b/amf-aml/shared/src/test/resources/vocabularies2/dialects/extended-mapping-3/dialect.resolved.yaml @@ -44,6 +44,7 @@ nodeMappings: someField: range: string propertyTerm: schema-org.name + additionalProperties: true CombiningMapping_2: components: - ElseMapping @@ -56,5 +57,6 @@ nodeMappings: someOtherField: range: string propertyTerm: schema-org.description + additionalProperties: true dialect: Mapping extended version: "1.0"