This is an automated email from the ASF dual-hosted git repository.
gitgabrio pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-drools.git
The following commit(s) were added to refs/heads/main by this push:
new 6281abd312 [incubator-kie-issues#908] Validate new DMN 1.5 features
(#5785)
6281abd312 is described below
commit 6281abd312c72997e306caf21b0db4fd790bed87
Author: Gabriele Cardosi <[email protected]>
AuthorDate: Fri Mar 15 13:57:31 2024 +0100
[incubator-kie-issues#908] Validate new DMN 1.5 features (#5785)
* [incubator-kie-issues#908] WIP. Moved shared models to
kie-dmn-test-resources. Adapted UnnamedImportUtilsTest.
Add kie-dmn-test-resources as dependency for kie-dmn-validation. Add fix
for empty name import. Not working: references to unnamed imported model
* [incubator-kie-issues#908] WIP. Working: references to unnamed imported
model
* [incubator-kie-issues#908] WIP. Implemented validation/evaluation for
DateRangeLoop, listreplace, unnamed import
* [incubator-kie-issues#908] Validate DMN 1.5 features. Moved shared models
to kie-dmn-test-resources
* [incubator-kie-issues#908] Fixed model.
* [incubator-kie-issues#908] Add empty model name test
---------
Co-authored-by: Gabriele-Cardosi <[email protected]>
---
.../kie/dmn/core/compiler/UnnamedImportUtils.java | 14 +-
.../java/org/kie/dmn/core/DMNCompilerTest.java | 4 +-
.../dmn/core/compiler/UnnamedImportUtilsTest.java | 87 ++++++-----
.../org/kie/dmn/core/Imported_Model_Unamed.dmn | 69 ---------
.../kie/dmn/core/Importing_EmptyNamed_Model.dmn | 79 ----------
.../org/kie/dmn/core/Importing_Named_Model.dmn | 79 ----------
.../core/Importing_OverridingEmptyNamed_Model.dmn | 93 ------------
.../org/kie/dmn/feel/parser/feel11/FEELParser.java | 19 ++-
.../AllowedValuesChecksInsideCollection.dmn | 4 +-
.../src/test/resources}/DateToDateTimeFunction.dmn | 9 +-
.../src/test/resources/ForLoopDatesEvaluate.dmn | 47 ++++++
.../src/test/resources/Imported_Model_Unamed.dmn | 63 ++++++++
.../test/resources/Importing_EmptyNamed_Model.dmn | 79 ++++++++++
.../src/test/resources/Importing_Named_Model.dmn | 79 ++++++++++
.../Importing_OverridingEmptyNamed_Model.dmn | 94 ++++++++++++
.../src/test/resources/ListReplaceEvaluate.dmn | 47 ++++++
.../test/resources/NegationOfDurationEvaluate.dmn | 41 ++++++
.../src/test/resources/TypeConstraintsChecks.dmn | 4 +-
kie-dmn/kie-dmn-validation/pom.xml | 13 ++
.../org/kie/dmn/validation/DMNValidatorImpl.java | 20 ++-
.../dmn/validation/DMNv1x/dmn-validation-rules.drl | 11 ++
.../java/org/kie/dmn/validation/ValidatorTest.java | 7 +
.../dmn/validation/v1_5/DMN15ValidationsTest.java | 162 +++++++++++++++++++++
.../org/kie/dmn/validation/EmptyModelName.dmn | 63 ++++++++
kie-dmn/pom.xml | 2 +-
25 files changed, 809 insertions(+), 380 deletions(-)
diff --git
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/compiler/UnnamedImportUtils.java
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/compiler/UnnamedImportUtils.java
index 3f22b334e0..1d3a963b12 100644
---
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/compiler/UnnamedImportUtils.java
+++
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/compiler/UnnamedImportUtils.java
@@ -51,6 +51,17 @@ public class UnnamedImportUtils {
// Here we try to put all the definitions from the "imported" model
inside the parent one
Definitions parentDefinitions = parentModel.getDefinitions();
Definitions mergedDefinitions = mergedModel.getDefinitions();
+
+ mergeDefinitions(parentDefinitions, mergedDefinitions);
+
+ mergedModel.getTypeRegistry().getTypes().forEach((s, stringDMNTypeMap)
->
+
stringDMNTypeMap.values().
+
forEach(dmnType -> parentModel.getTypeRegistry().registerType(dmnType)));
+ }
+
+ public static void mergeDefinitions(Definitions parentDefinitions,
Definitions mergedDefinitions) {
+ // incubator-kie-issues#852: The idea is to not treat the anonymous
models as import, but to "merge" them with original opne,
+ // Here we try to put all the definitions from the "imported" model
inside the parent one
parentDefinitions.getArtifact().addAll(mergedDefinitions.getArtifact());
addIfNotPresent(parentDefinitions.getDecisionService(),
mergedDefinitions.getDecisionService());
@@ -59,9 +70,6 @@ public class UnnamedImportUtils {
addIfNotPresent(parentDefinitions.getImport(),
mergedDefinitions.getImport());
addIfNotPresent(parentDefinitions.getItemDefinition(),
mergedDefinitions.getItemDefinition());
mergedDefinitions.getChildren().forEach(parentDefinitions::addChildren);
- mergedModel.getTypeRegistry().getTypes().forEach((s, stringDMNTypeMap)
->
-
stringDMNTypeMap.values().
-
forEach(dmnType -> parentModel.getTypeRegistry().registerType(dmnType)));
}
static <T extends NamedElement> void addIfNotPresent(Collection<T> target,
Collection<T> source) {
diff --git
a/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/DMNCompilerTest.java
b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/DMNCompilerTest.java
index 4f4773bfc1..9f9617c56a 100644
--- a/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/DMNCompilerTest.java
+++ b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/DMNCompilerTest.java
@@ -278,7 +278,7 @@ public class DMNCompilerTest extends BaseVariantTest {
this.getClass(),
"Imported_Model_Unamed.dmn");
- final DMNModel importedModel =
runtime.getModel("http://www.trisotech.com/dmn/definitions/_f27bb64b-6fc7-4e1f-9848-11ba35e0df36",
+ final DMNModel importedModel =
runtime.getModel("http://www.trisotech.com/dmn/definitions/_f27bb64b-6fc7-4e1f-9848-11ba35e0df44",
"Imported Model");
assertThat(importedModel).isNotNull();
for (final DMNMessage message : importedModel.getMessages()) {
@@ -324,7 +324,7 @@ public class DMNCompilerTest extends BaseVariantTest {
this.getClass(),
"Imported_Model_Unamed.dmn");
- final DMNModel importedModel =
runtime.getModel("http://www.trisotech.com/dmn/definitions/_f27bb64b-6fc7-4e1f-9848-11ba35e0df36",
+ final DMNModel importedModel =
runtime.getModel("http://www.trisotech.com/dmn/definitions/_f27bb64b-6fc7-4e1f-9848-11ba35e0df44",
"Imported Model");
assertThat(importedModel).isNotNull();
for (final DMNMessage message : importedModel.getMessages()) {
diff --git
a/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/compiler/UnnamedImportUtilsTest.java
b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/compiler/UnnamedImportUtilsTest.java
index f92c8a1c93..24911180d0 100644
---
a/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/compiler/UnnamedImportUtilsTest.java
+++
b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/compiler/UnnamedImportUtilsTest.java
@@ -1,13 +1,12 @@
package org.kie.dmn.core.compiler;
-import java.io.File;
import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Paths;
+import java.io.InputStream;
+import java.net.URL;
+import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collection;
-import org.drools.util.FileUtils;
import org.junit.Test;
import org.kie.dmn.api.core.DMNModel;
import org.kie.dmn.api.core.DMNRuntime;
@@ -18,7 +17,9 @@ import org.kie.dmn.model.api.Definitions;
import org.kie.dmn.model.api.NamedElement;
import static org.assertj.core.api.Assertions.assertThat;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
import static org.kie.dmn.core.compiler.UnnamedImportUtils.addIfNotPresent;
import static org.kie.dmn.core.compiler.UnnamedImportUtils.isInUnnamedImport;
@@ -26,14 +27,12 @@ public class UnnamedImportUtilsTest {
@Test
public void isInUnnamedImportTrue() {
- File importingModelFile =
FileUtils.getFile("Importing_EmptyNamed_Model.dmn");
- assertThat(importingModelFile).isNotNull().exists();
- File importedModelFile =
FileUtils.getFile("Imported_Model_Unamed.dmn");
- assertThat(importedModelFile).isNotNull().exists();
- final DMNRuntime runtime =
DMNRuntimeUtil.createRuntimeWithAdditionalResources(importingModelFile,
-
importedModelFile);
+ final DMNRuntime runtime =
DMNRuntimeUtil.createRuntimeWithAdditionalResources("Importing_EmptyNamed_Model"
+
+
".dmn",
+
this.getClass(),
+
"Imported_Model_Unamed.dmn");
- final DMNModel importedModel =
runtime.getModel("http://www.trisotech.com/dmn/definitions/_f27bb64b-6fc7-4e1f-9848-11ba35e0df36",
+ final DMNModel importedModel =
runtime.getModel("http://www.trisotech.com/dmn/definitions/_f27bb64b-6fc7-4e1f-9848-11ba35e0df44",
"Imported Model");
assertThat(importedModel).isNotNull();
final DMNModelImpl importingModel =
(DMNModelImpl)runtime.getModel("http://www.trisotech.com/dmn/definitions/_f79aa7a4-f9a3-410a-ac95-bea496edabgc",
@@ -48,14 +47,11 @@ public class UnnamedImportUtilsTest {
@Test
public void isInUnnamedImportFalse() {
- File importingModelFile =
FileUtils.getFile("Importing_Named_Model.dmn");
- assertThat(importingModelFile).isNotNull().exists();
- File importedModelFile =
FileUtils.getFile("Imported_Model_Unamed.dmn");
- assertThat(importedModelFile).isNotNull().exists();
- final DMNRuntime runtime =
DMNRuntimeUtil.createRuntimeWithAdditionalResources(importingModelFile,
-
importedModelFile);
+ final DMNRuntime runtime =
DMNRuntimeUtil.createRuntimeWithAdditionalResources("Importing_Named_Model.dmn",
+
this.getClass(),
+
"Imported_Model_Unamed.dmn");
- final DMNModel importedModel =
runtime.getModel("http://www.trisotech.com/dmn/definitions/_f27bb64b-6fc7-4e1f-9848-11ba35e0df36",
+ final DMNModel importedModel =
runtime.getModel("http://www.trisotech.com/dmn/definitions/_f27bb64b-6fc7-4e1f-9848-11ba35e0df44",
"Imported Model");
assertThat(importedModel).isNotNull();
final DMNModelImpl importingModel =
(DMNModelImpl)runtime.getModel("http://www.trisotech.com/dmn/definitions/_f79aa7a4-f9a3-410a-ac95-bea496edabgc",
@@ -70,40 +66,43 @@ public class UnnamedImportUtilsTest {
@Test
public void addIfNotPresentTrue() throws IOException {
- File importedModelFile =
FileUtils.getFile("Imported_Model_Unamed.dmn");
- assertThat(importedModelFile).isNotNull().exists();
-
- String xml = new
String(Files.readAllBytes(Paths.get(importedModelFile.toURI())));
- Definitions definitions =
DMNMarshallerFactory.newDefaultMarshaller().unmarshal(xml);
- definitions.getDecisionService().forEach(definition ->
assertTrue(added(definition)));
- definitions.getBusinessContextElement().forEach(definition ->
assertTrue(added(definition)));
- definitions.getDrgElement().forEach(definition ->
assertTrue(added(definition)));
- definitions.getImport().forEach(definition ->
assertTrue(added(definition)));
- definitions.getItemDefinition().forEach(definition ->
assertTrue(added(definition)));
+ URL importedModelFileResource =
Thread.currentThread().getContextClassLoader().getResource(
+ "Imported_Model_Unamed.dmn");
+ assertNotNull(importedModelFileResource);
+ try (InputStream is = importedModelFileResource.openStream()) {
+ String xml = new String(is.readAllBytes(), StandardCharsets.UTF_8);
+ Definitions definitions =
DMNMarshallerFactory.newDefaultMarshaller().unmarshal(xml);
+ definitions.getDecisionService().forEach(definition ->
assertTrue(added(definition)));
+ definitions.getBusinessContextElement().forEach(definition ->
assertTrue(added(definition)));
+ definitions.getDrgElement().forEach(definition ->
assertTrue(added(definition)));
+ definitions.getImport().forEach(definition ->
assertTrue(added(definition)));
+ definitions.getItemDefinition().forEach(definition ->
assertTrue(added(definition)));
+ }
}
@Test
public void addIfNotPresentFalse() throws IOException {
- File importingModelFile =
FileUtils.getFile("Importing_OverridingEmptyNamed_Model.dmn");
- assertThat(importingModelFile).isNotNull().exists();
- File importedModelFile =
FileUtils.getFile("Imported_Model_Unamed.dmn");
- assertThat(importedModelFile).isNotNull().exists();
- final DMNRuntime runtime =
DMNRuntimeUtil.createRuntimeWithAdditionalResources(importingModelFile,
-
importedModelFile);
-
+ final DMNRuntime runtime =
DMNRuntimeUtil.createRuntimeWithAdditionalResources("Importing_EmptyNamed_Model.dmn",
+
this.getClass(),
+
"Imported_Model_Unamed.dmn");
final DMNModelImpl importingModel =
(DMNModelImpl)runtime.getModel("http://www.trisotech.com/dmn/definitions/_f79aa7a4-f9a3-410a-ac95-bea496edabgc",
"Importing empty-named Model");
assertThat(importingModel).isNotNull();
Definitions importingDefinitions = importingModel.getDefinitions();
-
- String importedXml = new
String(Files.readAllBytes(Paths.get(importedModelFile.toURI())));
- Definitions importedDefinitions =
DMNMarshallerFactory.newDefaultMarshaller().unmarshal(importedXml);
- importedDefinitions.getDecisionService().forEach(definition ->
assertFalse(added(importingDefinitions.getDecisionService(), definition)));
- importedDefinitions.getBusinessContextElement().forEach(definition ->
assertFalse(added(importingDefinitions.getBusinessContextElement(),
definition)));
- importedDefinitions.getDrgElement().forEach(definition ->
assertFalse(added(importingDefinitions.getDrgElement(), definition)));
- importedDefinitions.getImport().forEach(definition ->
assertFalse(added(importingDefinitions.getImport(), definition)));
- importedDefinitions.getItemDefinition().forEach(definition ->
assertFalse(added(importingDefinitions.getItemDefinition(), definition)));
+ URL importedModelFileResource =
Thread.currentThread().getContextClassLoader().getResource(
+ "Imported_Model_Unamed.dmn");
+ assertNotNull(importedModelFileResource);
+ try (InputStream is = importedModelFileResource.openStream()) {
+ String importedXml = new String(is.readAllBytes(),
StandardCharsets.UTF_8);
+ Definitions importedDefinitions =
DMNMarshallerFactory.newDefaultMarshaller().unmarshal(importedXml);
+ importedDefinitions.getDecisionService().forEach(definition ->
assertFalse(added(importingDefinitions.getDecisionService(), definition)));
+ importedDefinitions.getBusinessContextElement().forEach(definition
-> assertFalse(added(importingDefinitions.getBusinessContextElement(),
definition)));
+ importedDefinitions.getDrgElement().forEach(definition ->
assertFalse(added(importingDefinitions.getDrgElement(), definition)));
+ importedDefinitions.getImport().forEach(definition ->
assertFalse(added(importingDefinitions.getImport(),
+
definition)));
+ importedDefinitions.getItemDefinition().forEach(definition ->
assertFalse(added(importingDefinitions.getItemDefinition(), definition)));
+ }
}
private <T extends NamedElement> boolean added(T source) {
diff --git
a/kie-dmn/kie-dmn-core/src/test/resources/org/kie/dmn/core/Imported_Model_Unamed.dmn
b/kie-dmn/kie-dmn-core/src/test/resources/org/kie/dmn/core/Imported_Model_Unamed.dmn
deleted file mode 100644
index d32261f9d4..0000000000
---
a/kie-dmn/kie-dmn-core/src/test/resources/org/kie/dmn/core/Imported_Model_Unamed.dmn
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<semantic:definitions
xmlns="http://www.trisotech.com/dmn/definitions/_f27bb64b-6fc7-4e1f-9848-11ba35e0df36"
- xmlns:dc="http://www.omg.org/spec/DMN/20180521/DC/"
- xmlns:di="http://www.omg.org/spec/DMN/20180521/DI/"
-
xmlns:dmndi="https://www.omg.org/spec/DMN/20230324/DMNDI/"
- xmlns:feel="https://www.omg.org/spec/DMN/20230324/FEEL/"
-
xmlns:semantic="https://www.omg.org/spec/DMN/20230324/MODEL/"
- xmlns:tc="http://www.omg.org/spec/DMN/20160719/testcase"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- exporter="DMN Modeler"
- exporterVersion="6.0.3.201802231629"
- id="_f27bb64b-6fc7-4e1f-9848-11ba35e0df36"
- name="Imported Model"
-
namespace="http://www.trisotech.com/dmn/definitions/_f27bb64b-6fc7-4e1f-9848-11ba35e0df36">
- <semantic:extensionElements>
- </semantic:extensionElements>
-
- <semantic:inputData id="_51190b90-924d-479b-872b-4c6f3486c2de" name="An
Imported Person">
- <semantic:variable id="_44a44de4-c0ab-408e-9ba9-983d8ec2f6c6"
- name="An Imported Person"
- typeRef="tPerson"/>
- </semantic:inputData>
- <semantic:decision id="_bf4a9628-15ae-4887-97f2-7099426cb61g" name="Remote
Greeting">
- <semantic:variable id="_ecc6e0bb-a0af-4e99-aac6-5b8bed09c549"
- name="Remote Greeting"
- typeRef="string"/>
- <semantic:informationRequirement>
- <semantic:requiredInput href="#_51190b90-924d-479b-872b-4c6f3486c2de"/>
- </semantic:informationRequirement>
- <semantic:knowledgeRequirement>
- <semantic:requiredKnowledge
href="#_32543811-b499-4608-b784-6c6f294b1c58"/>
- </semantic:knowledgeRequirement>
- <semantic:literalExpression
xmlns:triso="http://www.trisotech.com/2015/triso/modeling"
- id="_d7e6836b-8491-487a-a653-5735daa85bf2"
- triso:unparsed="true">
- <semantic:text>Say Hello( An Imported Person )</semantic:text>
- </semantic:literalExpression>
- </semantic:decision>
-
- <semantic:decisionService id="_70386614-9838-420b-a2ae-ff901ada63fb"
- name="Remote Greeting Service">
- <semantic:description>Remote Greeting Service</semantic:description>
- <semantic:variable name="Remote Greeting Hello" typeRef="string"/>
- <semantic:encapsulatedDecision
href="#_bf4a9628-15ae-4887-97f2-7099426cb61g"/>
- </semantic:decisionService>
-
- <semantic:itemDefinition label="tPerson" name="tPerson">
- <semantic:itemComponent id="_9bb0759c-b3c1-482f-87f5-c047dc65cef0"
name="name">
- <semantic:typeRef>string</semantic:typeRef>
- </semantic:itemComponent>
- <semantic:itemComponent id="_929acc15-101c-4e49-9b11-494fff411e50"
name="age">
- <semantic:typeRef>number</semantic:typeRef>
- </semantic:itemComponent>
- </semantic:itemDefinition>
- <semantic:businessKnowledgeModel id="_32543811-b499-4608-b784-6c6f294b1c58"
name="Say Hello">
- <semantic:variable id="_a8eb10e1-30e6-40d8-a564-a868f4e0af34"
- name="Say Hello"
- typeRef="string"/>
- <semantic:encapsulatedLogic kind="FEEL"
id="_acbb96c9-34a3-4628-8179-dfc5f583e695">
- <semantic:formalParameter id="_4a626f74-2ecc-4759-b76a-04baec6b795d"
- name="Person"
- typeRef="tPerson"/>
- <semantic:literalExpression
id="_c173a894-3719-4d2f-a365-25850e217310">
- <semantic:text>"Hello " + Person.name + "!"</semantic:text>
- </semantic:literalExpression>
- </semantic:encapsulatedLogic>
- </semantic:businessKnowledgeModel>
-</semantic:definitions>
diff --git
a/kie-dmn/kie-dmn-core/src/test/resources/org/kie/dmn/core/Importing_EmptyNamed_Model.dmn
b/kie-dmn/kie-dmn-core/src/test/resources/org/kie/dmn/core/Importing_EmptyNamed_Model.dmn
deleted file mode 100644
index ff2d5d2720..0000000000
---
a/kie-dmn/kie-dmn-core/src/test/resources/org/kie/dmn/core/Importing_EmptyNamed_Model.dmn
+++ /dev/null
@@ -1,79 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<semantic:definitions
xmlns="http://www.trisotech.com/dmn/definitions/_f79aa7a4-f9a3-410a-ac95-bea496edabgc"
- xmlns:dc="http://www.omg.org/spec/DMN/20180521/DC/"
- xmlns:di="http://www.omg.org/spec/DMN/20180521/DI/"
- xmlns:dmndi="http://www.omg.org/spec/DMN/20180521/DMNDI/"
- xmlns:feel="http://www.omg.org/spec/DMN/20180521/FEEL/"
-
xmlns:semantic="http://www.omg.org/spec/DMN/20180521/MODEL/"
- xmlns:tc="http://www.omg.org/spec/DMN/20160719/testcase"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- exporter="DMN Modeler"
- exporterVersion="6.0.3.201802231629"
- id="_f79aa7a4-f9a3-410a-ac95-bea496edabgc"
- name="Importing empty-named Model"
-
namespace="http://www.trisotech.com/dmn/definitions/_f79aa7a4-f9a3-410a-ac95-bea496edabgc">
- <semantic:extensionElements>
- </semantic:extensionElements>
- <semantic:import xmlns:drools="http://www.drools.org/kie/dmn/1.1"
- xmlns:triso="http://www.trisotech.com/2015/triso/modeling"
-
importType="http://www.omg.org/spec/DMN1-2Alpha/20160929/MODEL"
-
namespace="http://www.trisotech.com/dmn/definitions/_f27bb64b-6fc7-4e1f-9848-11ba35e0df36"
- name=""
- drools:modelName="Imported Model"
-
triso:fileId="eyJmIjp7InNrdSI6IjEwMmM0MDQ3LTg5NjctNGI3ZS1hODgxLTBhY2ZkNWJjOTAwMiIsIm5hbWUiOiJJbXBvcnRlZCBNb2RlbCJ9fQ=="
- triso:fileName="Edson Tirelli/Imported Model"/>
- <semantic:inputData id="_51190b90-924d-479b-872b-4c6f3486c2cb" name="A
Person">
- <semantic:variable id="_44a44de4-c0ab-408e-9ba9-983d8ec2f6b5"
- name="A Person"
- typeRef="tPerson"/>
- </semantic:inputData>
- <semantic:decision id="_bf4a9628-15ae-4887-97f2-7099426cb60f" name="Local
Greeting">
- <semantic:variable id="_ecc6e0bb-a0af-4e99-aac6-5b8bed09c538"
- name="Local Greeting"
- typeRef="string"/>
- <semantic:informationRequirement>
- <semantic:requiredInput
href="#_51190b90-924d-479b-872b-4c6f3486c2cb"/>
- </semantic:informationRequirement>
- <semantic:knowledgeRequirement>
- <semantic:requiredKnowledge
href="#_42543811-b499-4608-b784-6c6f294b1c59"/>
- </semantic:knowledgeRequirement>
- <semantic:literalExpression
xmlns:triso="http://www.trisotech.com/2015/triso/modeling"
- id="_d7e6836b-8491-487a-a653-5735daa85be1"
- triso:unparsed="true">
- <semantic:text>Local Hello( A Person )</semantic:text>
- </semantic:literalExpression>
- </semantic:decision>
-
- <semantic:decision id="_bf4a9628-15ae-4887-97f2-7099426cb60g" name="Imported
Greeting">
- <semantic:variable id="_ecc6e0bb-a0af-4e99-aac6-5b8bed09c539"
- name="Imported Greeting"
- typeRef="string"/>
- <semantic:informationRequirement>
- <semantic:requiredInput href="#_51190b90-924d-479b-872b-4c6f3486c2cb"/>
- </semantic:informationRequirement>
- <semantic:knowledgeRequirement>
- <semantic:requiredKnowledge
href="#_32543811-b499-4608-b784-6c6f294b1c58"/>
- </semantic:knowledgeRequirement>
- <semantic:literalExpression
xmlns:triso="http://www.trisotech.com/2015/triso/modeling"
- id="_d7e6836b-8491-487a-a653-5735daa85be2"
- triso:unparsed="true">
- <semantic:text>Say Hello( A Person )</semantic:text>
- </semantic:literalExpression>
- </semantic:decision>
-
- <semantic:businessKnowledgeModel id="_42543811-b499-4608-b784-6c6f294b1c59"
name="Local Hello">
- <semantic:variable id="_a8eb10e1-30e6-40d8-a564-a868f4e0af45"
- name="Local Hello"
- typeRef="string"/>
- <semantic:encapsulatedLogic kind="FEEL"
id="_acbb96c9-34a3-4628-8179-dfc5f583e695">
- <semantic:formalParameter id="_4a626f74-2ecc-4759-b76a-04baec6b795d"
- name="Person"
- typeRef="tPerson"/>
- <semantic:literalExpression id="_c173a894-3719-4d2f-a365-25850e217310">
- <semantic:text>"Local Hello " + Person.name + "!"</semantic:text>
- </semantic:literalExpression>
- </semantic:encapsulatedLogic>
- </semantic:businessKnowledgeModel>
-
-</semantic:definitions>
diff --git
a/kie-dmn/kie-dmn-core/src/test/resources/org/kie/dmn/core/Importing_Named_Model.dmn
b/kie-dmn/kie-dmn-core/src/test/resources/org/kie/dmn/core/Importing_Named_Model.dmn
deleted file mode 100644
index e83912d76f..0000000000
---
a/kie-dmn/kie-dmn-core/src/test/resources/org/kie/dmn/core/Importing_Named_Model.dmn
+++ /dev/null
@@ -1,79 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<semantic:definitions
xmlns="http://www.trisotech.com/dmn/definitions/_f79aa7a4-f9a3-410a-ac95-bea496edabgc"
- xmlns:dc="http://www.omg.org/spec/DMN/20180521/DC/"
- xmlns:di="http://www.omg.org/spec/DMN/20180521/DI/"
- xmlns:dmndi="http://www.omg.org/spec/DMN/20180521/DMNDI/"
- xmlns:feel="http://www.omg.org/spec/DMN/20180521/FEEL/"
-
xmlns:semantic="http://www.omg.org/spec/DMN/20180521/MODEL/"
- xmlns:tc="http://www.omg.org/spec/DMN/20160719/testcase"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- exporter="DMN Modeler"
- exporterVersion="6.0.3.201802231629"
- id="_f79aa7a4-f9a3-410a-ac95-bea496edabgc"
- name="Importing named Model"
-
namespace="http://www.trisotech.com/dmn/definitions/_f79aa7a4-f9a3-410a-ac95-bea496edabgc">
- <semantic:extensionElements>
- </semantic:extensionElements>
- <semantic:import xmlns:drools="http://www.drools.org/kie/dmn/1.1"
- xmlns:triso="http://www.trisotech.com/2015/triso/modeling"
-
importType="http://www.omg.org/spec/DMN1-2Alpha/20160929/MODEL"
-
namespace="http://www.trisotech.com/dmn/definitions/_f27bb64b-6fc7-4e1f-9848-11ba35e0df36"
- name="Imported Model"
- drools:modelName="Imported Model"
-
triso:fileId="eyJmIjp7InNrdSI6IjEwMmM0MDQ3LTg5NjctNGI3ZS1hODgxLTBhY2ZkNWJjOTAwMiIsIm5hbWUiOiJJbXBvcnRlZCBNb2RlbCJ9fQ=="
- triso:fileName="Edson Tirelli/Imported Model"/>
- <semantic:inputData id="_51190b90-924d-479b-872b-4c6f3486c2cb" name="A
Person">
- <semantic:variable id="_44a44de4-c0ab-408e-9ba9-983d8ec2f6b5"
- name="A Person"
- typeRef="Imported Model.tPerson"/>
- </semantic:inputData>
- <semantic:decision id="_bf4a9628-15ae-4887-97f2-7099426cb60f" name="Local
Greeting">
- <semantic:variable id="_ecc6e0bb-a0af-4e99-aac6-5b8bed09c538"
- name="Local Greeting"
- typeRef="string"/>
- <semantic:informationRequirement>
- <semantic:requiredInput
href="#_51190b90-924d-479b-872b-4c6f3486c2cb"/>
- </semantic:informationRequirement>
- <semantic:knowledgeRequirement>
- <semantic:requiredKnowledge
href="#_42543811-b499-4608-b784-6c6f294b1c59"/>
- </semantic:knowledgeRequirement>
- <semantic:literalExpression
xmlns:triso="http://www.trisotech.com/2015/triso/modeling"
- id="_d7e6836b-8491-487a-a653-5735daa85be1"
- triso:unparsed="true">
- <semantic:text>Local Hello( A Person )</semantic:text>
- </semantic:literalExpression>
- </semantic:decision>
-
- <semantic:decision id="_bf4a9628-15ae-4887-97f2-7099426cb60g" name="Imported
Greeting">
- <semantic:variable id="_ecc6e0bb-a0af-4e99-aac6-5b8bed09c539"
- name="Imported Greeting"
- typeRef="string"/>
- <semantic:informationRequirement>
- <semantic:requiredInput href="#_51190b90-924d-479b-872b-4c6f3486c2cb"/>
- </semantic:informationRequirement>
- <semantic:knowledgeRequirement>
- <semantic:requiredKnowledge
href="http://www.trisotech.com/dmn/definitions/_f27bb64b-6fc7-4e1f-9848-11ba35e0df36#_32543811-b499-4608-b784-6c6f294b1c58"/>
- </semantic:knowledgeRequirement>
- <semantic:literalExpression
xmlns:triso="http://www.trisotech.com/2015/triso/modeling"
- id="_d7e6836b-8491-487a-a653-5735daa85be2"
- triso:unparsed="true">
- <semantic:text>Imported Model.Say Hello( A Person )</semantic:text>
- </semantic:literalExpression>
- </semantic:decision>
-
- <semantic:businessKnowledgeModel id="_42543811-b499-4608-b784-6c6f294b1c59"
name="Local Hello">
- <semantic:variable id="_a8eb10e1-30e6-40d8-a564-a868f4e0af45"
- name="Local Hello"
- typeRef="string"/>
- <semantic:encapsulatedLogic kind="FEEL"
id="_acbb96c9-34a3-4628-8179-dfc5f583e695">
- <semantic:formalParameter id="_4a626f74-2ecc-4759-b76a-04baec6b795d"
- name="Person"
- typeRef="Imported Model.tPerson"/>
- <semantic:literalExpression id="_c173a894-3719-4d2f-a365-25850e217310">
- <semantic:text>"Local Hello " + Person.name + "!"</semantic:text>
- </semantic:literalExpression>
- </semantic:encapsulatedLogic>
- </semantic:businessKnowledgeModel>
-
-</semantic:definitions>
diff --git
a/kie-dmn/kie-dmn-core/src/test/resources/org/kie/dmn/core/Importing_OverridingEmptyNamed_Model.dmn
b/kie-dmn/kie-dmn-core/src/test/resources/org/kie/dmn/core/Importing_OverridingEmptyNamed_Model.dmn
deleted file mode 100644
index 63ef659ae0..0000000000
---
a/kie-dmn/kie-dmn-core/src/test/resources/org/kie/dmn/core/Importing_OverridingEmptyNamed_Model.dmn
+++ /dev/null
@@ -1,93 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<semantic:definitions
xmlns="http://www.trisotech.com/dmn/definitions/_f79aa7a4-f9a3-410a-ac95-bea496edabgc"
- xmlns:dc="http://www.omg.org/spec/DMN/20180521/DC/"
- xmlns:di="http://www.omg.org/spec/DMN/20180521/DI/"
- xmlns:dmndi="http://www.omg.org/spec/DMN/20180521/DMNDI/"
- xmlns:feel="http://www.omg.org/spec/DMN/20180521/FEEL/"
-
xmlns:semantic="http://www.omg.org/spec/DMN/20180521/MODEL/"
- xmlns:tc="http://www.omg.org/spec/DMN/20160719/testcase"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- exporter="DMN Modeler"
- exporterVersion="6.0.3.201802231629"
- id="_f79aa7a4-f9a3-410a-ac95-bea496edabgc"
- name="Importing empty-named Model"
-
namespace="http://www.trisotech.com/dmn/definitions/_f79aa7a4-f9a3-410a-ac95-bea496edabgc">
- <semantic:extensionElements>
- </semantic:extensionElements>
- <semantic:import xmlns:drools="http://www.drools.org/kie/dmn/1.1"
- xmlns:triso="http://www.trisotech.com/2015/triso/modeling"
-
importType="http://www.omg.org/spec/DMN1-2Alpha/20160929/MODEL"
-
namespace="http://www.trisotech.com/dmn/definitions/_f27bb64b-6fc7-4e1f-9848-11ba35e0df36"
- name=""
- drools:modelName="Imported Model"
-
triso:fileId="eyJmIjp7InNrdSI6IjEwMmM0MDQ3LTg5NjctNGI3ZS1hODgxLTBhY2ZkNWJjOTAwMiIsIm5hbWUiOiJJbXBvcnRlZCBNb2RlbCJ9fQ=="
- triso:fileName="Edson Tirelli/Imported Model"/>
- <semantic:inputData id="_51190b90-924d-479b-872b-4c6f3486c2cb" name="A
Person">
- <semantic:variable id="_44a44de4-c0ab-408e-9ba9-983d8ec2f6b5"
- name="A Person"
- typeRef="tPerson"/>
- </semantic:inputData>
- <semantic:itemDefinition label="tPerson" name="tPerson">
- <semantic:itemComponent id="_9bb0759c-b3c1-482f-87f5-c047dc65ceg1"
name="name">
- <semantic:typeRef>string</semantic:typeRef>
- </semantic:itemComponent>
- <semantic:itemComponent id="_929acc15-101c-4e49-9b11-494fff411e61"
name="age">
- <semantic:typeRef>number</semantic:typeRef>
- </semantic:itemComponent>
- </semantic:itemDefinition>
- <semantic:decision id="_bf4a9628-15ae-4887-97f2-7099426cb60f" name="Local
Greeting">
- <semantic:variable id="_ecc6e0bb-a0af-4e99-aac6-5b8bed09c538"
- name="Local Greeting"
- typeRef="string"/>
- <semantic:informationRequirement>
- <semantic:requiredInput
href="#_51190b90-924d-479b-872b-4c6f3486c2cb"/>
- </semantic:informationRequirement>
- <semantic:knowledgeRequirement>
- <semantic:requiredKnowledge
href="#_42543811-b499-4608-b784-6c6f294b1c59"/>
- </semantic:knowledgeRequirement>
- <semantic:literalExpression
xmlns:triso="http://www.trisotech.com/2015/triso/modeling"
- id="_d7e6836b-8491-487a-a653-5735daa85be1"
- triso:unparsed="true">
- <semantic:text>Local Hello( A Person )</semantic:text>
- </semantic:literalExpression>
- </semantic:decision>
-
- <semantic:decision id="_bf4a9628-15ae-4887-97f2-7099426cb60g" name="Imported
Greeting">
- <semantic:variable id="_ecc6e0bb-a0af-4e99-aac6-5b8bed09c539"
- name="Imported Greeting"
- typeRef="string"/>
- <semantic:informationRequirement>
- <semantic:requiredInput href="#_51190b90-924d-479b-872b-4c6f3486c2cb"/>
- </semantic:informationRequirement>
- <semantic:knowledgeRequirement>
- <semantic:requiredKnowledge
href="#_32543811-b499-4608-b784-6c6f294b1c58"/>
- </semantic:knowledgeRequirement>
- <semantic:literalExpression
xmlns:triso="http://www.trisotech.com/2015/triso/modeling"
- id="_d7e6836b-8491-487a-a653-5735daa85be2"
- triso:unparsed="true">
- <semantic:text>Say Hello( A Person )</semantic:text>
- </semantic:literalExpression>
- </semantic:decision>
- <semantic:decisionService id="_70386614-9838-420b-a2ae-ff901ada63gc"
- name="Remote Greeting Service">
- <semantic:description>Remote Greeting Service</semantic:description>
- <semantic:variable name="Remote Greeting Hello" typeRef="string"/>
- <semantic:encapsulatedDecision
href="#_bf4a9628-15ae-4887-97f2-7099426cb60g"/>
- </semantic:decisionService>
-
- <semantic:businessKnowledgeModel id="_42543811-b499-4608-b784-6c6f294b1c59"
name="Local Hello">
- <semantic:variable id="_a8eb10e1-30e6-40d8-a564-a868f4e0af45"
- name="Local Hello"
- typeRef="string"/>
- <semantic:encapsulatedLogic kind="FEEL"
id="_acbb96c9-34a3-4628-8179-dfc5f583e695">
- <semantic:formalParameter id="_4a626f74-2ecc-4759-b76a-04baec6b795d"
- name="Person"
- typeRef="tPerson"/>
- <semantic:literalExpression id="_c173a894-3719-4d2f-a365-25850e217310">
- <semantic:text>"Local Hello " + Person.name + "!"</semantic:text>
- </semantic:literalExpression>
- </semantic:encapsulatedLogic>
- </semantic:businessKnowledgeModel>
-
-</semantic:definitions>
diff --git
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/parser/feel11/FEELParser.java
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/parser/feel11/FEELParser.java
index ace7bcb3bd..e78a39c251 100644
---
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/parser/feel11/FEELParser.java
+++
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/parser/feel11/FEELParser.java
@@ -95,11 +95,15 @@ public class FEELParser {
return isVariableNameValid(namePart);
}
+ public static boolean isVariableNameEmpty( String source ) {
+ return checkVariableNameEmpty( source ).isEmpty();
+ }
+
public static boolean isVariableNameValid( String source ) {
return checkVariableName( source ).isEmpty();
}
- public static List<FEELEvent> checkVariableName( String source ) {
+ public static List<FEELEvent> checkVariableNameEmpty( String source ) {
if( source == null || source.isEmpty() ) {
return Collections.singletonList( new SyntaxErrorEvent(
FEELEvent.Severity.ERROR,
Msg.createMessage( Msg.INVALID_VARIABLE_NAME_EMPTY ),
@@ -107,6 +111,15 @@ public class FEELParser {
0,
0,
null ) );
+ } else {
+ return Collections.emptyList();
+ }
+ }
+
+ public static List<FEELEvent> checkVariableName( String source ) {
+ if( source == null || source.isEmpty() ) {
+ // We check validity of empty name with checkVariableNameEmpty
+ return Collections.emptyList();
}
CharStream input = CharStreams.fromString(source);
FEEL_1_1Lexer lexer = new FEEL_1_1Lexer( input );
@@ -120,8 +133,8 @@ public class FEELParser {
FEEL_1_1Parser.NameDefinitionWithEOFContext nameDef =
parser.nameDefinitionWithEOF(); // be sure to align below
parser.getRuleInvocationStack().contains("nameDefinition...
if( ! errorChecker.hasErrors() &&
- nameDef != null &&
- source.trim().equals( parser.getHelper().getOriginalText( nameDef
) ) ) {
+ nameDef != null &&
+ source.trim().equals( parser.getHelper().getOriginalText(
nameDef ) ) ) {
return Collections.emptyList();
}
return errorChecker.getErrors();
diff --git
a/kie-dmn/kie-dmn-test-resources/src/test/resources/AllowedValuesChecksInsideCollection.dmn
b/kie-dmn/kie-dmn-test-resources/src/test/resources/AllowedValuesChecksInsideCollection.dmn
index 81b3738abf..fca927bc70 100644
---
a/kie-dmn/kie-dmn-test-resources/src/test/resources/AllowedValuesChecksInsideCollection.dmn
+++
b/kie-dmn/kie-dmn-test-resources/src/test/resources/AllowedValuesChecksInsideCollection.dmn
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<semantic:definitions
xmlns="http://www.trisotech.com/definitions/_238bd96d-47cd-4746-831b-504f3e77b442"
- xmlns:dc="http://www.omg.org/spec/DMN/20180521/DC/"
- xmlns:di="http://www.omg.org/spec/DMN/20180521/DI/"
+ xmlns:dc="http://www.omg.org/spec/DMN/20230324/DC/"
+ xmlns:di="http://www.omg.org/spec/DMN/20230324/DI/"
xmlns:dmndi="https://www.omg.org/spec/DMN/20230324/DMNDI/"
xmlns:feel="https://www.omg.org/spec/DMN/20230324/FEEL/"
xmlns:semantic="https://www.omg.org/spec/DMN/20230324/MODEL/"
diff --git
a/kie-dmn/kie-dmn-core/src/test/resources/org/kie/dmn/core/DateToDateTimeFunction.dmn
b/kie-dmn/kie-dmn-test-resources/src/test/resources/DateToDateTimeFunction.dmn
similarity index 67%
rename from
kie-dmn/kie-dmn-core/src/test/resources/org/kie/dmn/core/DateToDateTimeFunction.dmn
rename to
kie-dmn/kie-dmn-test-resources/src/test/resources/DateToDateTimeFunction.dmn
index b947dfd7f7..69986be5fa 100644
---
a/kie-dmn/kie-dmn-core/src/test/resources/org/kie/dmn/core/DateToDateTimeFunction.dmn
+++
b/kie-dmn/kie-dmn-test-resources/src/test/resources/DateToDateTimeFunction.dmn
@@ -1,4 +1,11 @@
-<dmn:definitions xmlns:dmn="http://www.omg.org/spec/DMN/20180521/MODEL/"
xmlns="https://kiegroup.org/dmn/_A7F17D7B-F0AB-4C0B-B521-02EA26C2FBEE"
xmlns:di="http://www.omg.org/spec/DMN/20180521/DI/"
xmlns:kie="http://www.drools.org/kie/dmn/1.2"
xmlns:dmndi="http://www.omg.org/spec/DMN/20180521/DMNDI/"
xmlns:dc="http://www.omg.org/spec/DMN/20180521/DC/"
xmlns:feel="http://www.omg.org/spec/DMN/20180521/FEEL/"
id="_14BDA5CA-C87F-448D-AF75-F976A9E0EF83" name="new-file"
typeLanguage="http://www. [...]
+<dmn:definitions xmlns:dmn="http://www.omg.org/spec/DMN/20180521/MODEL/"
+
xmlns="https://kiegroup.org/dmn/_A7F17D7B-F0AB-4C0B-B521-02EA26C2FBEE"
+ xmlns:di="http://www.omg.org/spec/DMN/20180521/DI/"
+ xmlns:kie="http://www.drools.org/kie/dmn/1.2"
+ xmlns:dmndi="http://www.omg.org/spec/DMN/20180521/DMNDI/"
+ xmlns:dc="http://www.omg.org/spec/DMN/20180521/DC/"
+ xmlns:feel="http://www.omg.org/spec/DMN/20180521/FEEL/"
+ id="_14BDA5CA-C87F-448D-AF75-F976A9E0EF83" name="new-file"
typeLanguage="http://www.omg.org/spec/DMN/20180521/FEEL/"
namespace="https://kiegroup.org/dmn/_A7F17D7B-F0AB-4C0B-B521-02EA26C2FBEE">
<dmn:extensionElements/>
<dmn:businessKnowledgeModel id="_80847A66-F03E-4B81-B406-0E3B8D177EC8"
name="normal">
<dmn:extensionElements/>
diff --git
a/kie-dmn/kie-dmn-test-resources/src/test/resources/ForLoopDatesEvaluate.dmn
b/kie-dmn/kie-dmn-test-resources/src/test/resources/ForLoopDatesEvaluate.dmn
new file mode 100644
index 0000000000..39b2fb4e16
--- /dev/null
+++ b/kie-dmn/kie-dmn-test-resources/src/test/resources/ForLoopDatesEvaluate.dmn
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+ <dmn:definitions
xmlns="http://www.trisotech.com/dmn/definitions/_09E8A38A-AD24-4C3D-8307-029C0C4D373F"
+ xmlns:dc="http://www.omg.org/spec/DMN/20180521/DC/"
+ xmlns:di="http://www.omg.org/spec/DMN/20180521/DI/"
+ xmlns:dmndi="https://www.omg.org/spec/DMN/20230324/DMNDI/"
+ xmlns:feel="https://www.omg.org/spec/DMN/20230324/FEEL/"
+ xmlns:dmn="https://www.omg.org/spec/DMN/20230324/MODEL/"
+ xmlns:kie="http://www.drools.org/kie/dmn/1.2"
+ id="_A064B2A1-5F58-4C94-9B25-11A5C43E1749"
+ name="For Loop Dates Evaluate"
+ typeLanguage="http://www.omg.org/spec/DMN/20230324/FEEL/"
+
namespace="http://www.trisotech.com/dmn/definitions/_09E8A38A-AD24-4C3D-8307-029C0C4D373F">
+ <dmn:extensionElements/>
+ <dmn:itemDefinition id="_C0D7B89C-EC6A-4F03-B397-90225007E578" name="Insert
a name" isCollection="false">
+ <dmn:typeRef>Any</dmn:typeRef>
+ </dmn:itemDefinition>
+ <dmn:itemDefinition isCollection="true" label="tDates" name="tDates">
+ <dmn:typeRef>date</dmn:typeRef>
+ </dmn:itemDefinition>
+ <dmn:decision id="_4FC2D161-03F2-43D0-86EA-5653C13AFD52" name="forloopdates">
+ <dmn:extensionElements/>
+ <dmn:variable id="_4608E42A-977F-4786-AD2A-DE62804DECBA"
name="forloopdates" typeRef="tDates"/>
+ <dmn:literalExpression id="_3BC54643-D567-4148-8931-7A5892E5863F">
+ <dmn:text>for x in @"2021-01-01"..@"2021-01-03" return x+1</dmn:text>
+ </dmn:literalExpression>
+ </dmn:decision>
+ <dmndi:DMNDI>
+ <dmndi:DMNDiagram id="_F5A87DF2-BE2E-4509-AD80-353EA8891F42" name="DRG">
+ <di:extension>
+ <kie:ComponentsWidthsExtension>
+ <kie:ComponentWidths
dmnElementRef="_3BC54643-D567-4148-8931-7A5892E5863F">
+ <kie:width>338</kie:width>
+ </kie:ComponentWidths>
+ </kie:ComponentsWidthsExtension>
+ </di:extension>
+ <dmndi:DMNShape id="dmnshape-drg-_4FC2D161-03F2-43D0-86EA-5653C13AFD52"
dmnElementRef="_4FC2D161-03F2-43D0-86EA-5653C13AFD52" isCollapsed="false">
+ <dmndi:DMNStyle>
+ <dmndi:FillColor red="255" green="255" blue="255"/>
+ <dmndi:StrokeColor red="0" green="0" blue="0"/>
+ <dmndi:FontColor red="0" green="0" blue="0"/>
+ </dmndi:DMNStyle>
+ <dc:Bounds x="386" y="114" width="100" height="50"/>
+ <dmndi:DMNLabel/>
+ </dmndi:DMNShape>
+ </dmndi:DMNDiagram>
+ </dmndi:DMNDI>
+</dmn:definitions>
\ No newline at end of file
diff --git
a/kie-dmn/kie-dmn-test-resources/src/test/resources/Imported_Model_Unamed.dmn
b/kie-dmn/kie-dmn-test-resources/src/test/resources/Imported_Model_Unamed.dmn
new file mode 100644
index 0000000000..2c900040e2
--- /dev/null
+++
b/kie-dmn/kie-dmn-test-resources/src/test/resources/Imported_Model_Unamed.dmn
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<dmn:definitions
xmlns="http://www.trisotech.com/dmn/definitions/_f27bb64b-6fc7-4e1f-9848-11ba35e0df44"
+ xmlns:dc="http://www.omg.org/spec/DMN/20180521/DC/"
+ xmlns:di="http://www.omg.org/spec/DMN/20180521/DI/"
+ xmlns:dmndi="https://www.omg.org/spec/DMN/20230324/DMNDI/"
+ xmlns:feel="https://www.omg.org/spec/DMN/20230324/FEEL/"
+ xmlns:dmn="https://www.omg.org/spec/DMN/20230324/MODEL/"
+ xmlns:tc="http://www.omg.org/spec/DMN/20160719/testcase"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ exporter="DMN Modeler"
+ exporterVersion="6.0.3.201802231629"
+ id="_f27bb64b-6fc7-4e1f-9848-11ba35e0df44"
+ name="Imported Model"
+
namespace="http://www.trisotech.com/dmn/definitions/_f27bb64b-6fc7-4e1f-9848-11ba35e0df44">
+ <dmn:extensionElements>
+ </dmn:extensionElements>
+ <dmn:itemDefinition id="_63824D3F-9173-446D-A940-6A7F0FA056BB"
name="tPerson" isCollection="false">
+ <dmn:itemComponent id="_9bb0759c-b3c1-482f-87f5-c047dc65cef0" name="name">
+ <dmn:typeRef>string</dmn:typeRef>
+ </dmn:itemComponent>
+ <dmn:itemComponent id="_929acc15-101c-4e49-9b11-494fff411e50" name="age">
+ <dmn:typeRef>number</dmn:typeRef>
+ </dmn:itemComponent>
+ </dmn:itemDefinition>
+
+ <dmn:inputData id="_51190b90-924d-479b-872b-4c6f3486c2de" name="An Imported
Person">
+ <dmn:variable id="_44a44de4-c0ab-408e-9ba9-983d8ec2f6c6"
+ name="An Imported Person"
+ typeRef="tPerson"/>
+ </dmn:inputData>
+ <dmn:decision id="_bf4a9628-15ae-4887-97f2-7099426cb61g" name="Remote
Greeting">
+ <dmn:variable id="_ecc6e0bb-a0af-4e99-aac6-5b8bed09c549"
+ name="Remote Greeting"
+ typeRef="string"/>
+ <dmn:informationRequirement>
+ <dmn:requiredInput href="#_51190b90-924d-479b-872b-4c6f3486c2de"/>
+ </dmn:informationRequirement>
+ <dmn:knowledgeRequirement>
+ <dmn:requiredKnowledge href="#_32543811-b499-4608-b784-6c6f294b1c58"/>
+ </dmn:knowledgeRequirement>
+ <dmn:literalExpression
xmlns:triso="http://www.trisotech.com/2015/triso/modeling"
+ id="_d7e6836b-8491-487a-a653-5735daa85bf2"
+ triso:unparsed="true">
+ <dmn:text>Say Hello( An Imported Person )</dmn:text>
+ </dmn:literalExpression>
+ </dmn:decision>
+
+ <dmn:businessKnowledgeModel id="_32543811-b499-4608-b784-6c6f294b1c58"
name="Say Hello">
+ <dmn:variable id="_a8eb10e1-30e6-40d8-a564-a868f4e0af34"
+ name="Say Hello"
+ typeRef="string"/>
+ <dmn:encapsulatedLogic kind="FEEL"
id="_acbb96c9-34a3-4628-8179-dfc5f583e695">
+ <dmn:formalParameter id="_4a626f74-2ecc-4759-b76a-04baec6b795d"
+ name="Person"
+ typeRef="tPerson"/>
+ <dmn:literalExpression id="_c173a894-3719-4d2f-a365-25850e217310">
+ <dmn:text>"Hello " + Person.name + "!"</dmn:text>
+ </dmn:literalExpression>
+ </dmn:encapsulatedLogic>
+ </dmn:businessKnowledgeModel>
+
+</dmn:definitions>
diff --git
a/kie-dmn/kie-dmn-test-resources/src/test/resources/Importing_EmptyNamed_Model.dmn
b/kie-dmn/kie-dmn-test-resources/src/test/resources/Importing_EmptyNamed_Model.dmn
new file mode 100644
index 0000000000..ae2fa55bdc
--- /dev/null
+++
b/kie-dmn/kie-dmn-test-resources/src/test/resources/Importing_EmptyNamed_Model.dmn
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<dmn:definitions
xmlns="http://www.trisotech.com/dmn/definitions/_f79aa7a4-f9a3-410a-ac95-bea496edabgc"
+ xmlns:dc="http://www.omg.org/spec/DMN/20180521/DC/"
+ xmlns:di="http://www.omg.org/spec/DMN/20180521/DI/"
+ xmlns:dmndi="http://www.omg.org/spec/DMN/20180521/DMNDI/"
+ xmlns:feel="https://www.omg.org/spec/DMN/20230324/FEEL/"
+ xmlns:dmn="https://www.omg.org/spec/DMN/20230324/MODEL/"
+ xmlns:tc="http://www.omg.org/spec/DMN/20160719/testcase"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ exporter="DMN Modeler"
+ exporterVersion="6.0.3.201802231629"
+ id="_f79aa7a4-f9a3-410a-ac95-bea496edabgc"
+ name="Importing empty-named Model"
+
namespace="http://www.trisotech.com/dmn/definitions/_f79aa7a4-f9a3-410a-ac95-bea496edabgc">
+ <dmn:extensionElements>
+ </dmn:extensionElements>
+ <dmn:import xmlns:drools="http://www.drools.org/kie/dmn/1.1"
+ xmlns:triso="http://www.trisotech.com/2015/triso/modeling"
+
importType="http://www.omg.org/spec/DMN1-2Alpha/20160929/MODEL"
+
namespace="http://www.trisotech.com/dmn/definitions/_f27bb64b-6fc7-4e1f-9848-11ba35e0df44"
+ name=""
+ drools:modelName="Imported Model"
+
triso:fileId="eyJmIjp7InNrdSI6IjEwMmM0MDQ3LTg5NjctNGI3ZS1hODgxLTBhY2ZkNWJjOTAwMiIsIm5hbWUiOiJJbXBvcnRlZCBNb2RlbCJ9fQ=="
+ triso:fileName="Edson Tirelli/Imported Model"/>
+ <dmn:inputData id="_51190b90-924d-479b-872b-4c6f3486c2cb" name="A Person">
+ <dmn:variable id="_44a44de4-c0ab-408e-9ba9-983d8ec2f6b5"
+ name="A Person"
+ typeRef="tPerson"/>
+ </dmn:inputData>
+ <dmn:decision id="_bf4a9628-15ae-4887-97f2-7099426cb60f" name="Local
Greeting">
+ <dmn:variable id="_ecc6e0bb-a0af-4e99-aac6-5b8bed09c538"
+ name="Local Greeting"
+ typeRef="string"/>
+ <dmn:informationRequirement>
+ <dmn:requiredInput href="#_51190b90-924d-479b-872b-4c6f3486c2cb"/>
+ </dmn:informationRequirement>
+ <dmn:knowledgeRequirement>
+ <dmn:requiredKnowledge href="#_42543811-b499-4608-b784-6c6f294b1c59"/>
+ </dmn:knowledgeRequirement>
+ <dmn:literalExpression
xmlns:triso="http://www.trisotech.com/2015/triso/modeling"
+ id="_d7e6836b-8491-487a-a653-5735daa85be1"
+ triso:unparsed="true">
+ <dmn:text>Local Hello( A Person )</dmn:text>
+ </dmn:literalExpression>
+ </dmn:decision>
+
+ <dmn:decision id="_bf4a9628-15ae-4887-97f2-7099426cb60g" name="Imported
Greeting">
+ <dmn:variable id="_ecc6e0bb-a0af-4e99-aac6-5b8bed09c539"
+ name="Imported Greeting"
+ typeRef="string"/>
+ <dmn:informationRequirement>
+ <dmn:requiredInput href="#_51190b90-924d-479b-872b-4c6f3486c2cb"/>
+ </dmn:informationRequirement>
+ <dmn:knowledgeRequirement>
+ <dmn:requiredKnowledge href="#_32543811-b499-4608-b784-6c6f294b1c58"/>
+ </dmn:knowledgeRequirement>
+ <dmn:literalExpression
xmlns:triso="http://www.trisotech.com/2015/triso/modeling"
+ id="_d7e6836b-8491-487a-a653-5735daa85be2"
+ triso:unparsed="true">
+ <dmn:text>Say Hello( A Person )</dmn:text>
+ </dmn:literalExpression>
+ </dmn:decision>
+
+ <dmn:businessKnowledgeModel id="_42543811-b499-4608-b784-6c6f294b1c59"
name="Local Hello">
+ <dmn:variable id="_a8eb10e1-30e6-40d8-a564-a868f4e0af45"
+ name="Local Hello"
+ typeRef="string"/>
+ <dmn:encapsulatedLogic kind="FEEL"
id="_acbb96c9-34a3-4628-8179-dfc5f583e695">
+ <dmn:formalParameter id="_4a626f74-2ecc-4759-b76a-04baec6b795d"
+ name="Person"
+ typeRef="tPerson"/>
+ <dmn:literalExpression id="_c173a894-3719-4d2f-a365-25850e217310">
+ <dmn:text>"Local Hello " + Person.name + "!"</dmn:text>
+ </dmn:literalExpression>
+ </dmn:encapsulatedLogic>
+ </dmn:businessKnowledgeModel>
+
+</dmn:definitions>
diff --git
a/kie-dmn/kie-dmn-test-resources/src/test/resources/Importing_Named_Model.dmn
b/kie-dmn/kie-dmn-test-resources/src/test/resources/Importing_Named_Model.dmn
new file mode 100644
index 0000000000..cca7992ae5
--- /dev/null
+++
b/kie-dmn/kie-dmn-test-resources/src/test/resources/Importing_Named_Model.dmn
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<dmn:definitions
xmlns="http://www.trisotech.com/dmn/definitions/_f79aa7a4-f9a3-410a-ac95-bea496edabgc"
+ xmlns:dc="http://www.omg.org/spec/DMN/20180521/DC/"
+ xmlns:di="http://www.omg.org/spec/DMN/20180521/DI/"
+ xmlns:dmndi="http://www.omg.org/spec/DMN/20180521/DMNDI/"
+ xmlns:feel="http://www.omg.org/spec/DMN/20180521/FEEL/"
+ xmlns:dmn="http://www.omg.org/spec/DMN/20180521/MODEL/"
+ xmlns:tc="http://www.omg.org/spec/DMN/20160719/testcase"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ exporter="DMN Modeler"
+ exporterVersion="6.0.3.201802231629"
+ id="_f79aa7a4-f9a3-410a-ac95-bea496edabgc"
+ name="Importing named Model"
+
namespace="http://www.trisotech.com/dmn/definitions/_f79aa7a4-f9a3-410a-ac95-bea496edabgc">
+ <dmn:extensionElements>
+ </dmn:extensionElements>
+ <dmn:import xmlns:drools="http://www.drools.org/kie/dmn/1.1"
+ xmlns:triso="http://www.trisotech.com/2015/triso/modeling"
+
importType="http://www.omg.org/spec/DMN1-2Alpha/20160929/MODEL"
+
namespace="http://www.trisotech.com/dmn/definitions/_f27bb64b-6fc7-4e1f-9848-11ba35e0df44"
+ name="Imported Model"
+ drools:modelName="Imported Model"
+
triso:fileId="eyJmIjp7InNrdSI6IjEwMmM0MDQ3LTg5NjctNGI3ZS1hODgxLTBhY2ZkNWJjOTAwMiIsIm5hbWUiOiJJbXBvcnRlZCBNb2RlbCJ9fQ=="
+ triso:fileName="Edson Tirelli/Imported Model"/>
+ <dmn:inputData id="_51190b90-924d-479b-872b-4c6f3486c2cb" name="A Person">
+ <dmn:variable id="_44a44de4-c0ab-408e-9ba9-983d8ec2f6b5"
+ name="A Person"
+ typeRef="Imported Model.tPerson"/>
+ </dmn:inputData>
+ <dmn:decision id="_bf4a9628-15ae-4887-97f2-7099426cb60f" name="Local
Greeting">
+ <dmn:variable id="_ecc6e0bb-a0af-4e99-aac6-5b8bed09c538"
+ name="Local Greeting"
+ typeRef="string"/>
+ <dmn:informationRequirement>
+ <dmn:requiredInput href="#_51190b90-924d-479b-872b-4c6f3486c2cb"/>
+ </dmn:informationRequirement>
+ <dmn:knowledgeRequirement>
+ <dmn:requiredKnowledge href="#_42543811-b499-4608-b784-6c6f294b1c59"/>
+ </dmn:knowledgeRequirement>
+ <dmn:literalExpression
xmlns:triso="http://www.trisotech.com/2015/triso/modeling"
+ id="_d7e6836b-8491-487a-a653-5735daa85be1"
+ triso:unparsed="true">
+ <dmn:text>Local Hello( A Person )</dmn:text>
+ </dmn:literalExpression>
+ </dmn:decision>
+
+ <dmn:decision id="_bf4a9628-15ae-4887-97f2-7099426cb60g" name="Imported
Greeting">
+ <dmn:variable id="_ecc6e0bb-a0af-4e99-aac6-5b8bed09c539"
+ name="Imported Greeting"
+ typeRef="string"/>
+ <dmn:informationRequirement>
+ <dmn:requiredInput href="#_51190b90-924d-479b-872b-4c6f3486c2cb"/>
+ </dmn:informationRequirement>
+ <dmn:knowledgeRequirement>
+ <dmn:requiredKnowledge
href="http://www.trisotech.com/dmn/definitions/_f27bb64b-6fc7-4e1f-9848-11ba35e0df44#_32543811-b499-4608-b784-6c6f294b1c58"/>
+ </dmn:knowledgeRequirement>
+ <dmn:literalExpression
xmlns:triso="http://www.trisotech.com/2015/triso/modeling"
+ id="_d7e6836b-8491-487a-a653-5735daa85be2"
+ triso:unparsed="true">
+ <dmn:text>Imported Model.Say Hello( A Person )</dmn:text>
+ </dmn:literalExpression>
+ </dmn:decision>
+
+ <dmn:businessKnowledgeModel id="_42543811-b499-4608-b784-6c6f294b1c59"
name="Local Hello">
+ <dmn:variable id="_a8eb10e1-30e6-40d8-a564-a868f4e0af45"
+ name="Local Hello"
+ typeRef="string"/>
+ <dmn:encapsulatedLogic kind="FEEL"
id="_acbb96c9-34a3-4628-8179-dfc5f583e695">
+ <dmn:formalParameter id="_4a626f74-2ecc-4759-b76a-04baec6b795d"
+ name="Person"
+ typeRef="Imported Model.tPerson"/>
+ <dmn:literalExpression id="_c173a894-3719-4d2f-a365-25850e217310">
+ <dmn:text>"Local Hello " + Person.name + "!"</dmn:text>
+ </dmn:literalExpression>
+ </dmn:encapsulatedLogic>
+ </dmn:businessKnowledgeModel>
+
+</dmn:definitions>
diff --git
a/kie-dmn/kie-dmn-test-resources/src/test/resources/Importing_OverridingEmptyNamed_Model.dmn
b/kie-dmn/kie-dmn-test-resources/src/test/resources/Importing_OverridingEmptyNamed_Model.dmn
new file mode 100644
index 0000000000..c75a39b44a
--- /dev/null
+++
b/kie-dmn/kie-dmn-test-resources/src/test/resources/Importing_OverridingEmptyNamed_Model.dmn
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<dmn:definitions
xmlns="http://www.trisotech.com/dmn/definitions/_f79aa7a4-f9a3-410a-ac95-bea496edabgc"
+ xmlns:dc="http://www.omg.org/spec/DMN/20180521/DC/"
+ xmlns:di="http://www.omg.org/spec/DMN/20180521/DI/"
+ xmlns:dmndi="http://www.omg.org/spec/DMN/20180521/DMNDI/"
+ xmlns:feel="https://www.omg.org/spec/DMN/20230324/FEEL/"
+ xmlns:dmn="https://www.omg.org/spec/DMN/20230324/MODEL/"
+ xmlns:tc="http://www.omg.org/spec/DMN/20160719/testcase"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ exporter="DMN Modeler"
+ exporterVersion="6.0.3.201802231629"
+ id="_f79aa7a4-f9a3-410a-ac95-bea496edabgc"
+ name="Importing empty-named Model"
+
namespace="http://www.trisotech.com/dmn/definitions/_f79aa7a4-f9a3-410a-ac95-bea496edabgc">
+ <dmn:extensionElements>
+ </dmn:extensionElements>
+ <dmn:import xmlns:drools="http://www.drools.org/kie/dmn/1.1"
+ xmlns:triso="http://www.trisotech.com/2015/triso/modeling"
+
importType="http://www.omg.org/spec/DMN1-2Alpha/20160929/MODEL"
+
namespace="http://www.trisotech.com/dmn/definitions/_f27bb64b-6fc7-4e1f-9848-11ba35e0df44"
+ name=""
+ drools:modelName="Imported Model"
+
triso:fileId="eyJmIjp7InNrdSI6IjEwMmM0MDQ3LTg5NjctNGI3ZS1hODgxLTBhY2ZkNWJjOTAwMiIsIm5hbWUiOiJJbXBvcnRlZCBNb2RlbCJ9fQ=="
+ triso:fileName="Edson Tirelli/Imported Model"/>
+ <dmn:itemDefinition label="tPerson" name="tPerson">
+ <dmn:itemComponent id="_9bb0759c-b3c1-482f-87f5-c047dc65ceg1" name="name">
+ <dmn:typeRef>string</dmn:typeRef>
+ </dmn:itemComponent>
+ <dmn:itemComponent id="_929acc15-101c-4e49-9b11-494fff411e61" name="age">
+ <dmn:typeRef>number</dmn:typeRef>
+ </dmn:itemComponent>
+ </dmn:itemDefinition>
+ <dmn:inputData id="_51190b90-924d-479b-872b-4c6f3486c2cb" name="A Person">
+ <dmn:variable id="_44a44de4-c0ab-408e-9ba9-983d8ec2f6b5"
+ name="A Person"
+ typeRef="tPerson"/>
+ </dmn:inputData>
+
+ <dmn:decision id="_bf4a9628-15ae-4887-97f2-7099426cb60f" name="Local
Greeting">
+ <dmn:variable id="_ecc6e0bb-a0af-4e99-aac6-5b8bed09c538"
+ name="Local Greeting"
+ typeRef="string"/>
+ <dmn:informationRequirement>
+ <dmn:requiredInput href="#_51190b90-924d-479b-872b-4c6f3486c2cb"/>
+ </dmn:informationRequirement>
+ <dmn:knowledgeRequirement>
+ <dmn:requiredKnowledge href="#_42543811-b499-4608-b784-6c6f294b1c59"/>
+ </dmn:knowledgeRequirement>
+ <dmn:literalExpression
xmlns:triso="http://www.trisotech.com/2015/triso/modeling"
+ id="_d7e6836b-8491-487a-a653-5735daa85be1"
+ triso:unparsed="true">
+ <dmn:text>Local Hello( A Person )</dmn:text>
+ </dmn:literalExpression>
+ </dmn:decision>
+
+ <dmn:decision id="_bf4a9628-15ae-4887-97f2-7099426cb60g" name="Imported
Greeting">
+ <dmn:variable id="_ecc6e0bb-a0af-4e99-aac6-5b8bed09c539"
+ name="Imported Greeting"
+ typeRef="string"/>
+ <dmn:informationRequirement>
+ <dmn:requiredInput href="#_51190b90-924d-479b-872b-4c6f3486c2cb"/>
+ </dmn:informationRequirement>
+ <dmn:knowledgeRequirement>
+ <dmn:requiredKnowledge href="#_32543811-b499-4608-b784-6c6f294b1c58"/>
+ </dmn:knowledgeRequirement>
+ <dmn:literalExpression
xmlns:triso="http://www.trisotech.com/2015/triso/modeling"
+ id="_d7e6836b-8491-487a-a653-5735daa85be2"
+ triso:unparsed="true">
+ <dmn:text>Say Hello( A Person )</dmn:text>
+ </dmn:literalExpression>
+ </dmn:decision>
+ <dmn:decisionService id="_70386614-9838-420b-a2ae-ff901ada63gc"
+ name="Remote Greeting Service">
+ <dmn:description>Remote Greeting Service</dmn:description>
+ <dmn:variable name="Remote Greeting Hello" typeRef="string"/>
+ <dmn:outputDecision href="#_bf4a9628-15ae-4887-97f2-7099426cb60g"/>
+ </dmn:decisionService>
+
+ <dmn:businessKnowledgeModel id="_42543811-b499-4608-b784-6c6f294b1c59"
name="Local Hello">
+ <dmn:variable id="_a8eb10e1-30e6-40d8-a564-a868f4e0af45"
+ name="Local Hello"
+ typeRef="string"/>
+ <dmn:encapsulatedLogic kind="FEEL"
id="_acbb96c9-34a3-4628-8179-dfc5f583e695">
+ <dmn:formalParameter id="_4a626f74-2ecc-4759-b76a-04baec6b795d"
+ name="Person"
+ typeRef="tPerson"/>
+ <dmn:literalExpression id="_c173a894-3719-4d2f-a365-25850e217310">
+ <dmn:text>"Local Hello " + Person.name + "!"</dmn:text>
+ </dmn:literalExpression>
+ </dmn:encapsulatedLogic>
+ </dmn:businessKnowledgeModel>
+
+</dmn:definitions>
diff --git
a/kie-dmn/kie-dmn-test-resources/src/test/resources/ListReplaceEvaluate.dmn
b/kie-dmn/kie-dmn-test-resources/src/test/resources/ListReplaceEvaluate.dmn
new file mode 100644
index 0000000000..cb2141e1d6
--- /dev/null
+++ b/kie-dmn/kie-dmn-test-resources/src/test/resources/ListReplaceEvaluate.dmn
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+ <dmn:definitions
xmlns="http://www.trisotech.com/dmn/definitions/_09E8A38A-AD24-4C3D-8307-029C0C4D373F"
+ xmlns:dc="http://www.omg.org/spec/DMN/20180521/DC/"
+ xmlns:di="http://www.omg.org/spec/DMN/20180521/DI/"
+ xmlns:dmndi="https://www.omg.org/spec/DMN/20230324/DMNDI/"
+ xmlns:feel="https://www.omg.org/spec/DMN/20230324/FEEL/"
+ xmlns:dmn="https://www.omg.org/spec/DMN/20230324/MODEL/"
+ xmlns:kie="http://www.drools.org/kie/dmn/1.2"
+ id="_A064B2A1-5F58-4C94-9B25-11A5C43E1749"
+ name="List Replace Evaluate"
+ typeLanguage="http://www.omg.org/spec/DMN/20230324/FEEL/"
+
namespace="http://www.trisotech.com/dmn/definitions/_09E8A38A-AD24-4C3D-8307-029C0C4D373F">
+ <dmn:extensionElements/>
+ <dmn:itemDefinition id="_C0D7B89C-EC6A-4F03-B397-90225007E578" name="Insert
a name" isCollection="false">
+ <dmn:typeRef>Any</dmn:typeRef>
+ </dmn:itemDefinition>
+ <dmn:itemDefinition isCollection="true" label="tNumbers" name="tNumbers">
+ <dmn:typeRef>number</dmn:typeRef>
+ </dmn:itemDefinition>
+ <dmn:decision id="_4FC2D161-03F2-43D0-86EA-5653C13AFD52"
name="listreplacenumbers">
+ <dmn:extensionElements/>
+ <dmn:variable id="_4608E42A-977F-4786-AD2A-DE62804DECBA"
name="listreplacenumbers" typeRef="tNumbers"/>
+ <dmn:literalExpression id="_3BC54643-D567-4148-8931-7A5892E5863F">
+ <dmn:text>list replace ( [2, 4, 7, 8], 3, 6)</dmn:text>
+ </dmn:literalExpression>
+ </dmn:decision>
+ <dmndi:DMNDI>
+ <dmndi:DMNDiagram id="_F5A87DF2-BE2E-4509-AD80-353EA8891F42" name="DRG">
+ <di:extension>
+ <kie:ComponentsWidthsExtension>
+ <kie:ComponentWidths
dmnElementRef="_3BC54643-D567-4148-8931-7A5892E5863F">
+ <kie:width>338</kie:width>
+ </kie:ComponentWidths>
+ </kie:ComponentsWidthsExtension>
+ </di:extension>
+ <dmndi:DMNShape id="dmnshape-drg-_4FC2D161-03F2-43D0-86EA-5653C13AFD52"
dmnElementRef="_4FC2D161-03F2-43D0-86EA-5653C13AFD52" isCollapsed="false">
+ <dmndi:DMNStyle>
+ <dmndi:FillColor red="255" green="255" blue="255"/>
+ <dmndi:StrokeColor red="0" green="0" blue="0"/>
+ <dmndi:FontColor red="0" green="0" blue="0"/>
+ </dmndi:DMNStyle>
+ <dc:Bounds x="386" y="114" width="100" height="50"/>
+ <dmndi:DMNLabel/>
+ </dmndi:DMNShape>
+ </dmndi:DMNDiagram>
+ </dmndi:DMNDI>
+</dmn:definitions>
\ No newline at end of file
diff --git
a/kie-dmn/kie-dmn-test-resources/src/test/resources/NegationOfDurationEvaluate.dmn
b/kie-dmn/kie-dmn-test-resources/src/test/resources/NegationOfDurationEvaluate.dmn
new file mode 100644
index 0000000000..b7bdcce546
--- /dev/null
+++
b/kie-dmn/kie-dmn-test-resources/src/test/resources/NegationOfDurationEvaluate.dmn
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+ <dmn:definitions
xmlns="http://www.trisotech.com/dmn/definitions/_09E8A38A-AD24-4C3D-8307-029C0C4D373F"
+ xmlns:dc="http://www.omg.org/spec/DMN/20180521/DC/"
+ xmlns:di="http://www.omg.org/spec/DMN/20180521/DI/"
+ xmlns:dmndi="https://www.omg.org/spec/DMN/20230324/DMNDI/"
+ xmlns:feel="https://www.omg.org/spec/DMN/20230324/FEEL/"
+ xmlns:dmn="https://www.omg.org/spec/DMN/20230324/MODEL/"
+ xmlns:kie="http://www.drools.org/kie/dmn/1.2"
+ id="_A064B2A1-5F58-4C94-9B25-11A5C43E1749"
+ name="Negation of Duration Evaluate"
+ typeLanguage="http://www.omg.org/spec/DMN/20230324/FEEL/"
+
namespace="http://www.trisotech.com/dmn/definitions/_09E8A38A-AD24-4C3D-8307-029C0C4D373F">
+ <dmn:extensionElements/>
+ <dmn:decision id="_4FC2D161-03F2-43D0-86EA-5653C13AFD52"
name="durationnegation">
+ <dmn:extensionElements/>
+ <dmn:variable id="_4608E42A-977F-4786-AD2A-DE62804DECBA"
name="durationnegation" typeRef="boolean"/>
+ <dmn:literalExpression id="_3BC54643-D567-4148-8931-7A5892E5863F">
+ <dmn:text>-duration("P1Y6M") = (duration("P1Y6M")*-1)</dmn:text>
+ </dmn:literalExpression>
+ </dmn:decision>
+ <dmndi:DMNDI>
+ <dmndi:DMNDiagram id="_F5A87DF2-BE2E-4509-AD80-353EA8891F42" name="DRG">
+ <di:extension>
+ <kie:ComponentsWidthsExtension>
+ <kie:ComponentWidths
dmnElementRef="_3BC54643-D567-4148-8931-7A5892E5863F">
+ <kie:width>338</kie:width>
+ </kie:ComponentWidths>
+ </kie:ComponentsWidthsExtension>
+ </di:extension>
+ <dmndi:DMNShape id="dmnshape-drg-_4FC2D161-03F2-43D0-86EA-5653C13AFD52"
dmnElementRef="_4FC2D161-03F2-43D0-86EA-5653C13AFD52" isCollapsed="false">
+ <dmndi:DMNStyle>
+ <dmndi:FillColor red="255" green="255" blue="255"/>
+ <dmndi:StrokeColor red="0" green="0" blue="0"/>
+ <dmndi:FontColor red="0" green="0" blue="0"/>
+ </dmndi:DMNStyle>
+ <dc:Bounds x="386" y="114" width="100" height="50"/>
+ <dmndi:DMNLabel/>
+ </dmndi:DMNShape>
+ </dmndi:DMNDiagram>
+ </dmndi:DMNDI>
+</dmn:definitions>
\ No newline at end of file
diff --git
a/kie-dmn/kie-dmn-test-resources/src/test/resources/TypeConstraintsChecks.dmn
b/kie-dmn/kie-dmn-test-resources/src/test/resources/TypeConstraintsChecks.dmn
index f2ece77a60..4de97f9564 100644
---
a/kie-dmn/kie-dmn-test-resources/src/test/resources/TypeConstraintsChecks.dmn
+++
b/kie-dmn/kie-dmn-test-resources/src/test/resources/TypeConstraintsChecks.dmn
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<semantic:definitions
xmlns="http://www.trisotech.com/definitions/_238bd96d-47cd-4746-831b-504f3e77b442"
- xmlns:dc="http://www.omg.org/spec/DMN/20180521/DC/"
- xmlns:di="http://www.omg.org/spec/DMN/20180521/DI/"
+ xmlns:dc="http://www.omg.org/spec/DMN/20230324/DC/"
+ xmlns:di="http://www.omg.org/spec/DMN/20230324/DI/"
xmlns:dmndi="https://www.omg.org/spec/DMN/20230324/DMNDI/"
xmlns:feel="https://www.omg.org/spec/DMN/20230324/FEEL/"
xmlns:semantic="https://www.omg.org/spec/DMN/20230324/MODEL/"
diff --git a/kie-dmn/kie-dmn-validation/pom.xml
b/kie-dmn/kie-dmn-validation/pom.xml
index 1e19a9f2a2..838b319802 100644
--- a/kie-dmn/kie-dmn-validation/pom.xml
+++ b/kie-dmn/kie-dmn-validation/pom.xml
@@ -63,6 +63,13 @@
<optional>true</optional>
<version>${project.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.kie</groupId>
+ <artifactId>kie-dmn-test-resources</artifactId>
+ <version>${project.version}</version>
+ <classifier>tests</classifier>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</dependencyManagement>
@@ -133,6 +140,12 @@
<scope>provided</scope>
</dependency>
+ <dependency>
+ <groupId>org.kie</groupId>
+ <artifactId>kie-dmn-test-resources</artifactId>
+ <classifier>tests</classifier>
+ <scope>test</scope>
+ </dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
diff --git
a/kie-dmn/kie-dmn-validation/src/main/java/org/kie/dmn/validation/DMNValidatorImpl.java
b/kie-dmn/kie-dmn-validation/src/main/java/org/kie/dmn/validation/DMNValidatorImpl.java
index 2f7cfb291e..9c7bcbb673 100644
---
a/kie-dmn/kie-dmn-validation/src/main/java/org/kie/dmn/validation/DMNValidatorImpl.java
+++
b/kie-dmn/kie-dmn-validation/src/main/java/org/kie/dmn/validation/DMNValidatorImpl.java
@@ -73,6 +73,7 @@ import org.kie.dmn.feel.util.ClassLoaderUtil;
import org.kie.dmn.model.api.DMNModelInstrumentedBase;
import org.kie.dmn.model.api.DecisionService;
import org.kie.dmn.model.api.Definitions;
+import org.kie.dmn.model.api.Import;
import org.kie.dmn.validation.dtanalysis.InternalDMNDTAnalyser;
import org.kie.dmn.validation.dtanalysis.InternalDMNDTAnalyserFactory;
import org.kie.dmn.validation.dtanalysis.model.DTAnalysis;
@@ -84,6 +85,7 @@ import org.slf4j.LoggerFactory;
import org.xml.sax.SAXException;
import static java.util.stream.Collectors.toList;
+import static org.kie.dmn.core.compiler.UnnamedImportUtils.mergeDefinitions;
import static
org.kie.dmn.validation.DMNValidator.Validation.ANALYZE_DECISION_TABLE;
import static
org.kie.dmn.validation.DMNValidator.Validation.VALIDATE_COMPILATION;
import static org.kie.dmn.validation.DMNValidator.Validation.VALIDATE_MODEL;
@@ -546,7 +548,8 @@ public class DMNValidatorImpl implements DMNValidator {
Source s = new StreamSource(new StringReader(xml));
validateSchema(s, usingSchema);
} catch (Exception e) {
- problems.add(new DMNMessageImpl(DMNMessage.Severity.ERROR,
MsgUtil.createMessage(Msg.FAILED_XML_VALIDATION, e.getMessage()),
Msg.FAILED_XML_VALIDATION.getType(), null, e).withPath(path));
+ String errorMessage = String.format("%s - %s", path,
e.getMessage());
+ problems.add(new DMNMessageImpl(DMNMessage.Severity.ERROR,
MsgUtil.createMessage(Msg.FAILED_XML_VALIDATION, errorMessage),
Msg.FAILED_XML_VALIDATION.getType(), null, e).withPath(path));
}
return problems;
}
@@ -580,6 +583,19 @@ public class DMNValidatorImpl implements DMNValidator {
private List<DMNMessage> validateModel(DMNResource mainModel,
List<DMNResource> otherModels) {
Definitions mainDefinitions = mainModel.getDefinitions();
+ List<String> unnamedImports = mainDefinitions.getImport().stream()
+ .filter(anImport -> anImport.getName() == null ||
anImport.getName().isEmpty())
+ .map(Import::getNamespace)
+ .toList();
+ List<Definitions> otherModelsDefinitions = new ArrayList<>();
+ otherModels.forEach(dmnResource -> {
+ Definitions other = dmnResource.getDefinitions();
+ if
(unnamedImports.contains(dmnResource.getModelID().getNamespaceURI())) {
+ mergeDefinitions(mainDefinitions, other);
+ }
+ otherModelsDefinitions.add(other);
+ });
+
StatelessKieSession kieSession = mainDefinitions instanceof
org.kie.dmn.model.v1_1.KieDMNModelInstrumentedBase ?
kb11.newStatelessKieSession() : kb12.newStatelessKieSession();
MessageReporter reporter = new MessageReporter(mainModel);
kieSession.setGlobal( "reporter", reporter );
@@ -589,7 +605,7 @@ public class DMNValidatorImpl implements DMNValidator {
.filter(d -> !(d instanceof DecisionService &&
Boolean.parseBoolean(d.getAdditionalAttributes().get(new
QName("http://www.trisotech.com/2015/triso/modeling",
"dynamicDecisionService")))))
.collect(toList());
- List<Definitions> otherModelsDefinitions =
otherModels.stream().map(DMNResource::getDefinitions).collect(Collectors.toList());
+
BatchExecutionCommand batch =
CommandFactory.newBatchExecution(Arrays.asList(CommandFactory.newInsertElements(dmnModelElements,
"DEFAULT", false, "DEFAULT"),
CommandFactory.newInsertElements(otherModelsDefinitions, "DMNImports",
false, "DMNImports")));
kieSession.execute(batch);
diff --git
a/kie-dmn/kie-dmn-validation/src/main/resources/org/kie/dmn/validation/DMNv1x/dmn-validation-rules.drl
b/kie-dmn/kie-dmn-validation/src/main/resources/org/kie/dmn/validation/DMNv1x/dmn-validation-rules.drl
index 5d584f588b..565c916b21 100644
---
a/kie-dmn/kie-dmn-validation/src/main/resources/org/kie/dmn/validation/DMNv1x/dmn-validation-rules.drl
+++
b/kie-dmn/kie-dmn-validation/src/main/resources/org/kie/dmn/validation/DMNv1x/dmn-validation-rules.drl
@@ -68,6 +68,17 @@ then
$b.getParentDRDElement().getIdentifierString() );
end
+rule NAME_EMPTY
+when
+ $ne : NamedElement( !(this instanceof Import),
+ !FEELParser.isVariableNameEmpty( name ) )
+then
+ java.util.List<FEELEvent> errors = FEELParser.checkVariableNameEmpty(
$ne.getName() );
+ if ( ! errors.isEmpty() ) {
+ reporter.report( DMNMessage.Severity.ERROR, $ne , Msg.INVALID_NAME,
$ne.getName(), errors.get( 0 ).getMessage() );
+ }
+end
+
rule NAME_INVALID
when
$ne : NamedElement( parent != null,
diff --git
a/kie-dmn/kie-dmn-validation/src/test/java/org/kie/dmn/validation/ValidatorTest.java
b/kie-dmn/kie-dmn-validation/src/test/java/org/kie/dmn/validation/ValidatorTest.java
index c3ce093772..f19151aa40 100644
---
a/kie-dmn/kie-dmn-validation/src/test/java/org/kie/dmn/validation/ValidatorTest.java
+++
b/kie-dmn/kie-dmn-validation/src/test/java/org/kie/dmn/validation/ValidatorTest.java
@@ -138,6 +138,13 @@ public class ValidatorTest extends AbstractValidatorTest {
assertThat(validate.stream().anyMatch(p ->
p.getMessageType().equals(DMNMessageType.INVALID_NAME) &&
p.getSourceId().equals("_5e43b55c-888e-443c-b1b9-80e4aa6746bd"))).isTrue();
assertThat(validate.stream().anyMatch(p ->
p.getMessageType().equals(DMNMessageType.INVALID_NAME) &&
p.getSourceId().equals("_b1e4588e-9ce1-4474-8e4e-48dbcdb7524b"))).isTrue();
}
+
+ @Test
+ public void testNAME_EMPTY_empty_model_name() {
+ List<DMNMessage> validate = validator.validate( getReader(
"EmptyModelName.dmn" ), VALIDATE_SCHEMA, VALIDATE_MODEL, VALIDATE_COMPILATION);
+
assertThat(validate).withFailMessage(ValidatorUtil.formatMessages(validate)).hasSize(1);
+ assertThat(validate.stream().anyMatch(p ->
p.getMessageType().equals(DMNMessageType.INVALID_NAME) &&
p.getSourceId().equals("_f27bb64b-6fc7-4e1f-9848-11ba35e0df44"))).isTrue();
+ }
@Test
public void testDRGELEM_NOT_UNIQUE() {
diff --git
a/kie-dmn/kie-dmn-validation/src/test/java/org/kie/dmn/validation/v1_5/DMN15ValidationsTest.java
b/kie-dmn/kie-dmn-validation/src/test/java/org/kie/dmn/validation/v1_5/DMN15ValidationsTest.java
new file mode 100644
index 0000000000..90326b19a9
--- /dev/null
+++
b/kie-dmn/kie-dmn-validation/src/test/java/org/kie/dmn/validation/v1_5/DMN15ValidationsTest.java
@@ -0,0 +1,162 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.kie.dmn.validation.v1_5;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+import org.drools.io.ClassPathResource;
+import org.junit.Test;
+import org.kie.api.io.Resource;
+import org.kie.dmn.api.core.DMNContext;
+import org.kie.dmn.api.core.DMNMessage;
+import org.kie.dmn.api.core.DMNModel;
+import org.kie.dmn.api.core.DMNResult;
+import org.kie.dmn.api.core.DMNRuntime;
+import org.kie.dmn.core.compiler.profiles.ExtendedDMNProfile;
+import org.kie.dmn.core.util.DMNRuntimeUtil;
+import org.kie.dmn.validation.DMNValidator;
+import org.kie.dmn.validation.DMNValidatorFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.kie.dmn.core.util.DynamicTypeUtils.entry;
+import static org.kie.dmn.core.util.DynamicTypeUtils.prototype;
+
+public class DMN15ValidationsTest {
+
+ public static final Logger LOG =
LoggerFactory.getLogger(DMN15ValidationsTest.class);
+
+ static final DMNValidator validator =
DMNValidatorFactory.newValidator(List.of(new ExtendedDMNProfile()));
+ static final DMNValidator.ValidatorBuilder validatorBuilder =
validator.validateUsing(DMNValidator.Validation.VALIDATE_SCHEMA,
DMNValidator.Validation.VALIDATE_MODEL);
+
+
+ @Test
+ public void overridingUnnamedImportValidation() {
+ String importedModelFileName = "Imported_Model_Unamed.dmn";
+ String importingModelFileName =
"Importing_OverridingEmptyNamed_Model.dmn";
+ String modelName = "Importing empty-named Model";
+ String modelNamespace =
"http://www.trisotech.com/dmn/definitions/_f79aa7a4-f9a3-410a-ac95-bea496edabgc";
+ validate(importedModelFileName, importingModelFileName);
+ Map<String, Object> inputData = Map.of("A Person",
prototype(entry("name", "Hugh"), entry("age", 32)));
+ evaluate(modelNamespace, modelName, importingModelFileName, inputData,
importedModelFileName);
+ }
+
+ @Test
+ public void namedImportValidation() {
+ String importedModelFileName = "Imported_Model_Unamed.dmn";
+ String importingModelFileName = "Importing_Named_Model.dmn";
+ String modelName = "Importing named Model";
+ String modelNamespace =
"http://www.trisotech.com/dmn/definitions/_f79aa7a4-f9a3-410a-ac95-bea496edabgc";
+ validate(importedModelFileName, importingModelFileName);
+ Map<String, Object> inputData = Map.of("A Person",
prototype(entry("name", "Hugh"), entry("age", 32)));
+ evaluate(modelNamespace, modelName, importingModelFileName, inputData,
importedModelFileName);
+ }
+
+ @Test
+ public void unnamedImportValidation() {
+ String importedModelFileName = "Imported_Model_Unamed.dmn";
+ String importingModelFileName = "Importing_EmptyNamed_Model.dmn";
+ String modelName = "Importing empty-named Model";
+ String modelNamespace =
"http://www.trisotech.com/dmn/definitions/_f79aa7a4-f9a3-410a-ac95-bea496edabgc";
+ validate(importedModelFileName, importingModelFileName);
+ Map<String, Object> inputData = Map.of("A Person",
prototype(entry("name", "Hugh"), entry("age", 32)));
+ evaluate(modelNamespace, modelName, importingModelFileName, inputData,
importedModelFileName);
+ }
+
+ @Test
+ public void forLoopDatesEvaluateValidation() {
+ String modelFileName = "ForLoopDatesEvaluate.dmn";
+ String modelName = "For Loop Dates Evaluate";
+ String modelNamespace =
"http://www.trisotech.com/dmn/definitions/_09E8A38A-AD24-4C3D-8307-029C0C4D373F";
+ validate(modelFileName);
+ evaluate(modelNamespace, modelName, modelFileName,
Collections.EMPTY_MAP);
+ }
+
+ @Test
+ public void listReplaceEvaluateValidation() {
+ String modelFileName = "ListReplaceEvaluate.dmn";
+ String modelName = "List Replace Evaluate";
+ String modelNamespace =
"http://www.trisotech.com/dmn/definitions/_09E8A38A-AD24-4C3D-8307-029C0C4D373F";
+ validate(modelFileName);
+ evaluate(modelNamespace, modelName, modelFileName,
Collections.EMPTY_MAP);
+ }
+
+ @Test
+ public void negationOfDurationEvaluateValidation() {
+ String modelFileName = "NegationOfDurationEvaluate.dmn";
+ String modelName = "Negation of Duration Evaluate";
+ String modelNamespace =
"http://www.trisotech.com/dmn/definitions/_09E8A38A-AD24-4C3D-8307-029C0C4D373F";
+ validate(modelFileName);
+ evaluate(modelNamespace, modelName, modelFileName,
Collections.EMPTY_MAP);
+ }
+
+ @Test
+ public void dateToDateTimeFunctionValidation() {
+ String modelFileName = "DateToDateTimeFunction.dmn";
+ String modelName = "new-file";
+ String modelNamespace =
"https://kiegroup.org/dmn/_A7F17D7B-F0AB-4C0B-B521-02EA26C2FBEE";
+ validate(modelFileName);
+ evaluate(modelNamespace, modelName, modelFileName,
Collections.EMPTY_MAP);
+ }
+
+ @Test
+ public void typeConstraintsChecksValidation() {
+ String modelFileName = "TypeConstraintsChecks.dmn";
+ String modelName = "TypeConstraintsChecks";
+ String modelNamespace =
"http://www.trisotech.com/definitions/_238bd96d-47cd-4746-831b-504f3e77b442";
+ validate(modelFileName);
+ Map<String, Object> inputData = Map.of("p1", prototype(entry("Name",
"P1"), entry("Interests", Collections.singletonList("Golf"))));
+ evaluate(modelNamespace, modelName, modelFileName, inputData);
+ }
+
+ private void validate(String modelFileName, String... otherFileNames) {
+ List<String> allModelsFileNames = new ArrayList<>();
+ allModelsFileNames.add(modelFileName);
+ allModelsFileNames.addAll(List.of(otherFileNames));
+ Resource[] resources = allModelsFileNames.stream()
+ .map(fileName -> new ClassPathResource(fileName,
+ this.getClass()))
+ .toArray(value -> new Resource[allModelsFileNames.size()]);
+ List<DMNMessage> dmnMessages = validatorBuilder.theseModels(resources);
+ assertNotNull(dmnMessages);
+ dmnMessages.forEach(dmnMessage -> LOG.error(dmnMessage.toString()));
+ assertTrue(dmnMessages.isEmpty());
+ }
+
+ private void evaluate(String modelNamespace, String modelName, String
modelFileName,
+ Map<String, Object> inputData, String...
otherFileNames) {
+ final DMNRuntime runtime =
DMNRuntimeUtil.createRuntimeWithAdditionalResources(modelFileName,
+
this.getClass(),
+
otherFileNames);
+ final DMNModel dmnModel = runtime.getModel(modelNamespace,
+ modelName);
+ assertThat(dmnModel).isNotNull();
+
assertThat(dmnModel.hasErrors()).as(DMNRuntimeUtil.formatMessages(dmnModel.getMessages())).isFalse();
+ final DMNContext ctx = runtime.newContext();
+ inputData.forEach(ctx::set);
+ DMNResult toReturn = runtime.evaluateAll(dmnModel, ctx);
+
assertThat(toReturn.hasErrors()).as(DMNRuntimeUtil.formatMessages(toReturn.getMessages())).isFalse();
+ }
+}
diff --git
a/kie-dmn/kie-dmn-validation/src/test/resources/org/kie/dmn/validation/EmptyModelName.dmn
b/kie-dmn/kie-dmn-validation/src/test/resources/org/kie/dmn/validation/EmptyModelName.dmn
new file mode 100644
index 0000000000..69a239b267
--- /dev/null
+++
b/kie-dmn/kie-dmn-validation/src/test/resources/org/kie/dmn/validation/EmptyModelName.dmn
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<dmn:definitions
xmlns="http://www.trisotech.com/dmn/definitions/_f27bb64b-6fc7-4e1f-9848-11ba35e0df44"
+ xmlns:dc="http://www.omg.org/spec/DMN/20180521/DC/"
+ xmlns:di="http://www.omg.org/spec/DMN/20180521/DI/"
+ xmlns:dmndi="https://www.omg.org/spec/DMN/20230324/DMNDI/"
+ xmlns:feel="https://www.omg.org/spec/DMN/20230324/FEEL/"
+ xmlns:dmn="https://www.omg.org/spec/DMN/20230324/MODEL/"
+ xmlns:tc="http://www.omg.org/spec/DMN/20160719/testcase"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ exporter="DMN Modeler"
+ exporterVersion="6.0.3.201802231629"
+ id="_f27bb64b-6fc7-4e1f-9848-11ba35e0df44"
+ name=""
+
namespace="http://www.trisotech.com/dmn/definitions/_f27bb64b-6fc7-4e1f-9848-11ba35e0df44">
+ <dmn:extensionElements>
+ </dmn:extensionElements>
+ <dmn:itemDefinition id="_63824D3F-9173-446D-A940-6A7F0FA056BB"
name="tPerson" isCollection="false">
+ <dmn:itemComponent id="_9bb0759c-b3c1-482f-87f5-c047dc65cef0" name="name">
+ <dmn:typeRef>string</dmn:typeRef>
+ </dmn:itemComponent>
+ <dmn:itemComponent id="_929acc15-101c-4e49-9b11-494fff411e50" name="age">
+ <dmn:typeRef>number</dmn:typeRef>
+ </dmn:itemComponent>
+ </dmn:itemDefinition>
+
+ <dmn:inputData id="_51190b90-924d-479b-872b-4c6f3486c2de" name="An Imported
Person">
+ <dmn:variable id="_44a44de4-c0ab-408e-9ba9-983d8ec2f6c6"
+ name="An Imported Person"
+ typeRef="tPerson"/>
+ </dmn:inputData>
+ <dmn:decision id="_bf4a9628-15ae-4887-97f2-7099426cb61g" name="Remote
Greeting">
+ <dmn:variable id="_ecc6e0bb-a0af-4e99-aac6-5b8bed09c549"
+ name="Remote Greeting"
+ typeRef="string"/>
+ <dmn:informationRequirement>
+ <dmn:requiredInput href="#_51190b90-924d-479b-872b-4c6f3486c2de"/>
+ </dmn:informationRequirement>
+ <dmn:knowledgeRequirement>
+ <dmn:requiredKnowledge href="#_32543811-b499-4608-b784-6c6f294b1c58"/>
+ </dmn:knowledgeRequirement>
+ <dmn:literalExpression
xmlns:triso="http://www.trisotech.com/2015/triso/modeling"
+ id="_d7e6836b-8491-487a-a653-5735daa85bf2"
+ triso:unparsed="true">
+ <dmn:text>Say Hello( An Imported Person )</dmn:text>
+ </dmn:literalExpression>
+ </dmn:decision>
+
+ <dmn:businessKnowledgeModel id="_32543811-b499-4608-b784-6c6f294b1c58"
name="Say Hello">
+ <dmn:variable id="_a8eb10e1-30e6-40d8-a564-a868f4e0af34"
+ name="Say Hello"
+ typeRef="string"/>
+ <dmn:encapsulatedLogic kind="FEEL"
id="_acbb96c9-34a3-4628-8179-dfc5f583e695">
+ <dmn:formalParameter id="_4a626f74-2ecc-4759-b76a-04baec6b795d"
+ name="Person"
+ typeRef="tPerson"/>
+ <dmn:literalExpression id="_c173a894-3719-4d2f-a365-25850e217310">
+ <dmn:text>"Hello " + Person.name + "!"</dmn:text>
+ </dmn:literalExpression>
+ </dmn:encapsulatedLogic>
+ </dmn:businessKnowledgeModel>
+
+</dmn:definitions>
diff --git a/kie-dmn/pom.xml b/kie-dmn/pom.xml
index 1b7c2de291..b875a0445d 100644
--- a/kie-dmn/pom.xml
+++ b/kie-dmn/pom.xml
@@ -39,6 +39,7 @@
<modules>
<module>kie-dmn-api</module>
<module>kie-dmn-model</module>
+ <module>kie-dmn-test-resources</module>
<module>kie-dmn-feel</module>
<module>kie-dmn-core</module>
<module>kie-dmn-backend</module>
@@ -54,7 +55,6 @@
<module>kie-dmn-core-jsr223-jq</module>
<module>kie-dmn-core-jsr223</module>
<module>kie-dmn-ruleset2dmn-parent</module>
- <module>kie-dmn-test-resources</module>
</modules>
<dependencyManagement>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]