You are viewing the documentation for Blueriq 17. Documentation for other versions is available in our documentation directory.

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 19 Next »

This page lists the behaviour of the Runtime when creating or parsing XML messages based on XSD schemas (SOAP and REST with schema sets). 


The behaviour is broken down by:

  • whether the message is being sent or being received
  • whether attributes and relations are inside a sequence or a choice
  • whether an element is mapped to an attribute or a relation
  • whether the attribute or relation is single-valued or multi-valued

1. Sending an XML message 

TBD

1.1 Sequences

TBD

1.1.1 Single-Valued Attributes


ValueSourceminOccursnillableResult
unknownsystem0*element not present
unknownsystem> 0*error
unknownuser0falseempty element
unknownuser0truenil element
unknownuser1falseempty element
unknownuser1truenil element
unknownuser> 1falseas many empty elements as required by minOccurs
unknownuser> 1trueas many nil elements as required by minOccurs
known***an element containing the value


1.1.2 Multi-Valued Attributes


ValueSourceminOccursnillableResult
unknownsystem0*no elements present
unknownsystem> 0*error
unknownuser0falseempty element
unknownuser0truenil element
unknownuser> 0falseas many empty elements as required by minOccurs
unknownuser> 0trueas many nil elements as required by minOccurs
known, count < minOccurs**falsecount elements with values, padded with empty elements as required by minOccurs
known, count < minOccurs**truecount elements with values, padded with nil elements as required by minOccurs
known, minOccurs <= count <= maxOccurs***as many elements as there are values, each element containing the corresponding value
known, maxOccurs < count***error


1.1.3 Single-Valued Relations

The source of relations is not used when handing unknown relations. Empty or nil tags are never created for relations, as that would lead to extra, unwanted instances on the receiving side.


ValueminOccursnillableResult
unknown0*element not present
unknown> 0*error
known, attributes and relations do not generate sub-elements*falseempty element
known, attributes and relations do not generate sub-elements*truenil element
known, at least one attribute or relation generates a sub-element**an element with sub-elements according to the rules on this page


1.1.4 Multi-Valued Relations

TBD

ValueminOccursnillableResult
unknown0*no elements present
unknown> 0*error
known, count < minOccurs**error
known, minOccurs <= count <= maxOccurs*falsecount elements
known, minOccurs <= count <= maxOccurs*truecount elements. If any of the instances do not generate sub-elements, the element corresponding to that instance is nil
known, maxOccurs < count**error


1.2 Choices

The behaviour of choices depends on the min/maxOccurs on the choice, the min/maxOccurs of the elements inside the choice, as well as the value and source of the attributes or relations mapped to those elements. 

It is possible to choose multiple times, as required by minOccurs and restricted by maxOccurs on the choice. When choosing a second time, the same element that was chosen on the first choice cannot be chosen again (Petru Galanton : there is a contradiction to this in the single-valued attributes table, see below - in reality an element can be chosen multiple times if it has minOccurs = 0, in that case it chosen 0 times).

Other rules:

  • System-set attributes are never chosen.
  • Unknown relations are never chosen (source doesn't matter)




1.2.1 Single-Valued Attributes

TBD

Petru Galanton : would it be more clear if we had only the following combinations ?

  • unknown/system with all of unknown/system, unknown/user, known
  • unknown/user with unknown/user and known (so leave out unknown/user + unknown/system, as that was covered already by unknown/system + unknown/user)
  • known with known (so leave out known + unknown/system and known + unknown/user, as those were covered already by unknown/system + known and unknown/user + known)


TODO Petru Galanton : clarify that in the table below minOccurs is abbreviated to "min" and nillable is abbreviated to "nill" due to lack of space.


Choice

min

Element AElement BResultExplanation
ValueSource

min

nillValueSourceminnill
0unknownsystem**unknownsystem**no element is presentchosen 0 times, or chosen element A 0 times, or chosen element B 0 times
0unknownsystem**unknownuser0false<B/>chosen element B 1 time
0unknownsystem**unknownuser0true<B xsi:nil="true"/>chosen element B 1 time
0unknownsystem**unknownuser1false<B/>chosen element B 1 time
0unknownsystem**unknownuser1true<B xsi:nil="true"/>chosen element B 1 time
0unknownsystem**unknownuser> 1false

<B />

<B/>

chosen as many empty B elements as required by element B minOccurs, chosen 1 time
0unknownsystem**unknownuser> 1true

<B xsi:nil="true"/>

<B xsi:nil="true"/>

chosen as many nil B elements as required by element B minOccurs, chosen 1 time
0unknownsystem**known<= 1**

<B>value</B>


0unknownsystem**known> 1*false

<B>value</B>

<B/>

chosen 1 B element and padded with as many empty elements as required by minOccurs of element B, chosen 1 time
0unknownsystem**known> 1*true

<B>value</B>

<B xsi:nil="true"/>

chosen 1 B element and padded with as many nil elements as required by minOccurs of element B, chosen 1 time
0unknownuser0falseunknownsystem**<A>chosen element A 1 time
0unknownuser0trueunknownsystem**<A xsi:nil="true"/>chosen element A 1 time
0unknownuser1falseunknownsystem**<A>chosen element A 1 time
0unknownuser1trueunknownsystem**<A xsi:nil="true"/>chosen element A 1 time
0unknownuser> 1falseunknownsystem**

<A>value</A>

<A/>

chosen 1 A element and padded with as many empty elements as required by minOccurs of element A, chosen 1 time
0unknownuser> 1trueunknownsystem**

<A>value</A>

<A xsi:nil="true"/>

chosen 1 A element and padded with as many nil elements as required by minOccurs of element A, chosen 1 time
0unknownuser**unknownuser**error
0unknownuser**known***error
0known***unknownsystem**<A>value</A>chosen 1 A element 1 time
0known***unknownuser**error
0known***known***error
1unknownsystem0*unknownsystem0*no element is presentchosen element A 0 times, or chosen element B 0 times
1unknownsystem0*unknownsystem> 0*no element is presentchosen element A 0 times
1unknownsystem0*unknownuser<= 1false<B />chosen element B 1 time
1unknownsystem0*unknownuser<= 1true<B xsi:nil="true"/>chosen element B 1 time
1unknownsystem0*unknownuser> 1false

<B/>

<B/>

chosen element B 1 time, padded with as many empty elements as required by minOccurs of element B
1unknownsystem0*unknownuser> 1true

<B xsi:nil="true" />

<B xsi:nil="true" />

chosen element B 1 time, padded with as many nil elements as required by minOccurs of element B
1unknownsystem0*known*<= 1*<B>value</B>chosen element B 1 time
1unknownsystem0*known*> 1false

<B>value</B>

<B />

chosen element B 1 time, padded with as many empty elements as required by minOccurs of element B
1unknownsystem0*known*> 1true

<B>value</B>

<B xsi:nil="true" />

chosen element B 1 time, padded with as many nil element as required by minOccurs of element B
1unknownsystem> 0*unknownsystem0*no element is presentchosen element B 0 times
1unknownsystem> 0*unknownsystem> 0*errorno element could be chosen
1unknownsystem> 0*unknownuser<= 1false<B/>chosen element B 1 time
1unknownsystem> 0*unknownuser<= 1true<B xsi:nil="true"/>chosen element B 1 time
1unknownsystem> 0*unknownuser> 1false

<B />

<B />

chosen element B 1 time, padded with as many empty elements as required by minOccurs of element B
1unknownsystem> 0*unknownuser> 1true

<B xsi:nil="true" />

<B xsi:nil="true" />

chosen element B 1 time, padded with as many empty elements as required by minOccurs of element B
1unknownsystem> 0*known*<= 1*<B>value</B>chosen element B 1 time
1unknownsystem> 0*known*> 1false

<B>value<B>

<B />

chosen element B 1 time, padded with as many empty elements as required by minOccurs of element B
1unknownsystem> 0*known*> 1true

<B>value</B>

<B xsi:nil="true"/>

chosen element B 1 time, padded with as many nil elements as required by minOccurs of element B
1unknownuser<= 1falseunknownsystem**<A/>chosen element A 1 time
1unknownuser<= 1trueunknownsystem**<A xsi:nil="true" />chosen element A 1 time
1unknownuser> 1falseunknownsystem**

<A/>

<A/>

chosen element A 1 time, padded with as many empty elements as required by minOccurs of element A
1unknownuser> 1trueunknownsystem**

<A xsi:nil="true" />

<A xsi:nil="true" />

chosen element A 1 time, padded with as many nil elements as required by minOccurs of element A
1unknownuser**unknownuser**error
1unknownuser**known***error
1known*<= 1*unknownsystem**<A>value</A>
1known*> 1falseunknownsystem**

<A>value</A>

<A/>

chosen element A 1 time, padded with as many empty elements as required by minOccurs of element A
1known*> 1trueunknownsystem**

<A>value</A>

<A xsi:nil="true" />

chosen element A 1 time, padded with as many nil elements as required by minOccurs of element A
1known***unknownuser**error
1known***known***error
> 1unknownsystem0*unknownsystem0*no element present

Chosen as many times as required by minOccurs of choice.

At each choice, either element A was chosen 0 times, or element B was chosen 0 times

> 1unknownsystem0*unknownsystem> 1*no element present

Chosen as many times as required by minOccurs of choice.

At each choice, element A was chosen 0 times

> 1unknownsystem0*unknownuser<= 1*<B>

Chosen as many times as required by minOccurs of choice.

On the first choice, element B was chosen 1 time.

On the remaining choices, element A was chosen 0 times.

> 1unknownsystem0*unknownuser> 1false

<B>

<B>

Chosen as many times as required by minOccurs of choice.

On the first choice, element B was chosen as many times as required by minOccurs of element B.

On the remaining choices, element A was chosen 0 times

> 1unknownsystem0*unknownuser> 1true

<B xsi:nil="true" />

<B xsi:nil="true" />

Chosen as many times as required by minOccurs of choice.

On the first choice, element B was chosen as many times as required by minOccurs of element B.

On the remaining choices, element A was chosen 0 times

> 1unknownsystem0*known*<= 1*<B>value</B>

Chosen as many times as required by minOccurs of choice.

On the first choice, element B was chosen.

On the remaining choices, element A was chosen 0 times

> 1unknownsystem0*known*> 1false

<B>value</B>

<B/>

Chosen as many times as required by minOccurs of choice.

On the first choice, element B was chosen, padded with as many empty elements as required by minOccurs of element B

On the remaining choices, element A was chosen 0 times

> 1unknownsystem0*known*> 1true

<B>value</B>

<B xsi:nil="true"/>

Chosen as many times as required by minOccurs of choice.

On the first choice, element B was chosen, padded with as many nill elements as required by minOccurs of element B

On the remaining choices, element A was chosen 0 times

> 1unknownsystem> 0*unknownsystem0*no element present

Chosen as many times as required by minOccurs of choice.

On each choice, element B was chosen 0 times

> 1unknownsystem> 0*unknownsystem> 0*errorno element could be chosen
> 1unknownsystem> 0*unknownuser0false<B>

Chosen as many times as required by minOccurs of choice

On the first choice, element B was chosen 1 time

On the remaining choices, element B was chosen 0 times

> 1unknownsystem> 0*unknownuser0true<B xsi:nil="true"/>

Chosen as many times as required by minOccurs of choice

On the first choice, element B was chosen 1 time.

On the remaining choices, element B was chosen 0 times.

> 1unknownsystem> 0*unknownuser> 0*error

Chosen as many times as required by minOccurs of choice

On the first choice, element B was chosen as many times as required by minOccurs of element B

On the remaining choices, no other element could be chosen

> 1unknownsystem> 0*known*0*<B>value</B>

Chosen as many times as required by minOccurs of choice.

On the first choice, element B was chosen 1 time.

On the remaining choices, element B was chosen 0 times (Petru Galanton : this is in contradiction with the statement that the same element cannot be chosen twice)

> 1unknownsystem> 0*known*> 0*error

Chosen as many times as required by minOccurs of choice

On the first choice, element B was chosen as many times as required by minOccurs of element B

On the remaining choices, no other element could be chosen

> 1unknownuser0falseunknownsystem0*<A>

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen 1 time

On the remaining choices, element A was chosen 0 times or element B was chosen 0 times

> 1unknownuser0falseunknownsystem> 0*<A>

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen 1 time

On the remaining choices, element A was chosen 0 times

> 1unknownuser0falseunknownuser<= 1false

<A>

<B>

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen 1 time

On the second choice element B was chosen 1 time

On the remaining choices, element A was chosen 0 times or element B was chosen 0 times

> 1unknownuser0falseunknownuser<= 1true

<A>

<B xsi:nil="true" />

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen 1 time

On the second choice element B was chosen 1 time

On the remaining choices, element A was chosen 0 times or element B was chosen 0 times

> 1unknownuser0falseunknownuser> 1false

<A>

<B>

<B>

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen 1 time

On the second choice element B was chosen as many times as required by minOccurs of element B

On the remaining choices, element A was chosen 0 times

> 1unknownuser0falseunknownuser> 1true

<A>

<B xsi:nil="true"/>

<B xsi:nil="true"/>

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen 1 time

On the second choice element B was chosen as many times as required by minOccurs of element B

On the remaining choices, element A was chosen 0 times

> 1unknownuser0falseknown*<= 1*

<A>

<B>value</A>

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen 1 time

On the second choice element B was chosen as many times as required by minOccurs of element B

On the remaining choices, element A was chosen 0 times or element B was chosen 0 times

> 1unknownuser0falseknown*> 1false

<A>

<B>value</B>

<B/>

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen 1 time

On the second choice element B was chosen, padded with empty elements as required by minOccurs of element B

On the remaining choices, element A was chosen 0 times or element B was chosen 0 times

> 1unknownuser0falseknown*> 1true

<A>

<B>value</B>

<B xsi:nil="true"/>

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen 1 time

On the second choice element B was chosen, padded with nil elements as required by minOccurs of element B

On the remaining choices, element A was chosen 0 times or element B was chosen 0 times

> 1unknownuser0trueunknownsystem0*<A xsi:nil="true"/>

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen 1 time

On the remaining choices, element A was chosen 0 times or element B was chosen 0 times

> 1unknownuser0trueunknownsystem> 0*<A xsi:nil="true"/>

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen 1 time

On the remaining choices, element A was chosen 0 times

> 1unknownuser0trueunknownuser<= 1false

<A xsi:nil="true">

<B>

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen 1 time

On the second choice element B was chosen 1 time

On the remaining choices, element A was chosen 0 times or element B was chosen 0 times

> 1unknownuser0trueunknownuser<= 1true

<A xsi:nil="true"/>

<B xsi:nil="true" />

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen 1 time

On the second choice element B was chosen 1 time

On the remaining choices, element A was chosen 0 times or element B was chosen 0 times

> 1unknownuser0trueunknownuser> 1false

<A xsi:nil="true"/>

<B>

<B>

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen 1 time

On the second choice element B was chosen as many times as required by minOccurs of element B

On the remaining choices, element A was chosen 0 times

> 1unknownuser0trueunknownuser> 1true

<A xsi:nil="true"/>

<B xsi:nil="true"/>

<B xsi:nil="true"/>

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen 1 time

On the second choice element B was chosen as many times as required by minOccurs of element B

On the remaining choices, element A was chosen 0 times

> 1unknownuser0trueknown*<= 1*

<A xsi:nil="true"/>

<B>value</A>

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen 1 time

On the second choice element B was chosen as many times as required by minOccurs of element B

On the remaining choices, element A was chosen 0 times or element B was chosen 0 times

> 1unknownuser0trueknown*> 1false

<A xsi:nil="true"/>

<B>value</B>

<B/>

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen 1 time

On the second choice element B was chosen, padded with empty elements as required by minOccurs of element B

On the remaining choices, element A was chosen 0 times or element B was chosen 0 times

> 1unknownuser0trueknown*> 1true

<A xsi:nil="true"/>

<B>value</B>

<B xsi:nil="true"/>

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen 1 time

On the second choice element B was chosen, padded with nil elements as required by minOccurs of element B

On the remaining choices, element A was chosen 0 times or element B was chosen 0 times

> 1unknownuser> 0falseunknownsystem0*

<A/>

<A/>

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen, padded with empty elements as required by minOccurs of element A

On the remaining choices, element B was chosen 0 times

> 1unknownuser> 0falseunknownsystem> 0*error

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen as many times as required by minOccurs of element A

On the remaining choices, no other element could be chosen

> 1unknownuser> 0falseunknownuser0*

<A/>

<A/>

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen, padded with empty elements as required by minOccurs of element A

On the remaining choices, element B was chosen 0 times

> 1unknownuser> 0falseunknownuser> 0false

<A/>

<A/>

<B/>

<B/>

or error

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen, padded with empty elements as required by minOccurs of element A

On the second choice, element B was chosen, padded with empty elements as required by minOccurs of element B

If choice minOccurs > 2, then it is an error, as there is no 3rd element that could be chosen

> 1unknownuser> 0falseunknownuser> 0true

<A/>

<A/>

<B xsi:nil="true"/>

<B xsi:nil="true"/>

or error

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen, padded with empty elements as required by minOccurs of element A

On the second choice, element B was chosen, padded with nil elements as required by minOccurs of element B

If choice minOccurs > 2, then it is an error, as there is no 3rd element that could be chosen

> 1unknownuser> 0falseknown*0*

<A/>

<A/>

<B>value</B>

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen, padded with empty elements as required by minOccurs of element A

On the second choice, element B was chosen 1 time

On the remaining choices, element B was chosen 0 times

> 1unknownuser> 0falseknown*> 0false

<A/>

<A/>

<B>value</B>

<B/>

or error

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen, padded with empty elements as required by minOccurs of element A

On the second choice, element B was chosen, padded with empty elements as required by minOccurs of element B

If choice minOccurs > 2, then it is an error, as there is no 3rd element that could be chosen

> 1unknownuser> 0falseknown*> 0true

<A/>

<A/>

<B>value</B>

<B xsi:nil="true"/>

or error

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen, padded with empty elements as required by minOccurs of element A

On the second choice, element B was chosen, padded with nil elements as required by minOccurs of element B

If choice minOccurs > 2, then it is an error, as there is no 3rd element that could be chosen

> 1known*0*unknownsystem0*<A>value</A>

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen 1 time

On the remaining choices, element A was chosen 0 times or element B was chosen 0 times

> 1known*0*unknownsystem> 0*<A>value</A>

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen 1 time

On the remaining choices, element A was chosen 0 times

> 1known*0*known*0*

<A>value</A>

<B>value</A>

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen 1 time

On the second choice, element B was chosen 1 time

On the remaining choices, element A was chosen 0 times or element B was chosen 0 times

> 1known*0*known*> 0false

<A>value</A>

<B>value</B>

<B/>

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen 1 time

On the second choice, element B was chosen, padded with empty elements as required by minOccurs of element B

On the remaining choices, element A was chosen 0 times

> 1known*0*known*> 0true

<A>value</A>

<B>value</B>

<B xsi:nil="true"/>

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen 1 time

On the second choice, element B was chosen, padded with nil elements as required by minOccurs of element B

On the remaining choices, element A was chosen 0 times

> 1known*> 0falseunknownsystem0*

<A>value</A>

<A/>

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen, padded with empty element as required by minOccurs of element A

On the remaining choices, element B was chosen 0 times

> 1known*> 0falseunknownsystem> 0*error

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen, padded with empty element as required by minOccurs of element A

On the remaining choices, no other element could be chosen

> 1known*> 0falseunknownuser0false

<A>value</A>

<A/>

<B/>

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen, padded with empty elements as required by minOccurs of element A

On the second choice, element B was chosen 1 time

On the remaining choices, element B was chosen 0 times

> 1known*> 0falseunknownuser0true

<A>value</A>

<A/>

<B xsi:nil="true"/>

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen, padded with empty elements as required by minOccurs of element A

On the second choice, element B was chosen 1 time

On the remaining choices, element B was chosen 0 times

> 1known*> 0falseunknownuser> 0false

<A>value</A>

<A/>

<B/>

<B/>

or error

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen, padded with empty elements as required by minOccurs of element A

On the second choice, element B was chosen, padded with empty elements as required by minOccurs of element B

If choice minOccurs > 2, then error as no 3rd element could be chosen

> 1known*> 0falseunknownuser> 0true

<A>value</A>

<A/>

<B xsi:nil="true"/>

<B xsi:nil="true"/>

or error

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen, padded with empty elements as required by minOccurs of element A

On the second choice, element B was chosen, padded with nil elements as required by minOccurs of element B

If choice minOccurs > 2, then error as no 3rd element could be chosen

> 1known*> 0falseknown*0*

<A>value</A>

<A/>

<B>value</B>

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen, padded with empty elements as required by minOccurs of element A

On the second choice, element B was chosen 1 time

On the remaining choices, element B was chosen 0 times

> 1known*> 0falseknown*> 0false

<A>value</A>

<A/>

<B>value</B>

<B/>

or error

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen, padded with empty elements as required by minOccurs of element A

On the second choice, element B was chosen, padded with empty elements as required by minOccurs of element B

If choice minOccurs > 2, then error as no 3rd element could be chosen

> 1known*> 0falseknown*> 0true

<A>value</A>

<A/>

<B>value</B>

<B xsi:nil="true"/>

or error

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen, padded with empty elements as required by minOccurs of element A

On the second choice, element B was chosen, padded with nil elements as required by minOccurs of element B

If choice minOccurs > 2, then error as no 3rd element could be chosen

> 1known*> 0trueunknownsystem0*

<A>value</A>

<A xsi:nil="true"/>

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen, padded with nil elements as required by minOccurs of element A

On the remaining choices, element B was chosen 0 times

> 1known*> 0trueunknownsystem> 0*error

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen, padded with nil elements as required by minOccurs of element A

On the remaining choices, no other element could be chosen

> 1known*> 0trueunknownuser0false

<A>value</A>

<A xsi:nil="true"/>

<B/>

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen, padded with nil elements as required by minOccurs of element A

On the second choice, element B was chosen 1 time

On the remaining choices, element B was chosen 0 times

> 1known*> 0trueunknownuser0true

<A>value</A>

<A xsi:nil="true"/>

<B xsi:nil="true"/>

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen, padded with nil elements as required by minOccurs of element A

On the second choice, element B was chosen 1 time

On the remaining choices, element B was chosen 0 times

> 1known*> 0trueunknownuser> 0false

<A>value</A>

<A xsi:nil="true"/>

<B/>

<B/>

or error

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen, padded with nil elements as required by minOccurs of element A

On the second choice, element B was chosen, padded with empty elements as required by minOccurs of element B

If choice minOccurs > 2, then error as no 3rd element could be chosen

> 1known*> 0trueunknownuser> 0true

<A>value</A>

<A xsi:nil="true"/>

<B xsi:nil="true"/>

<B xsi:nil="true"/>

or error

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen, padded with nil elements as required by minOccurs of element A

On the second choice, element B was chosen, padded with nil elements as required by minOccurs of element B

If choice minOccurs > 2, then error as no 3rd element could be chosen

> 1known*> 0trueknown*0*

<A>value</A>

<A xsi:nil="true"/>

<B>value</B>

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen, padded with nil elements as required by minOccurs of element A

On the second choice, element B was chosen 1 time

On the remaining choices, element B was chosen 0 times

> 1known*> 0trueknown*> 0false

<A>value</A>

<A xsi:nil="true"/>

<B>value</B>

<B/>

or error

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen, padded with nil elements as required by minOccurs of element A

On the second choice, element B was chosen, padded with empty elements as required by minOccurs of element B

If choice minOccurs > 2, then error as no 3rd element could be chosen

> 1known*> 0trueknown*> 0true

<A>value</A>

<A xsi:nil="true"/>

<B>value</B>

<B xsi:nil="true"/>

or error

Chosen as many times as required by minOccurs of choice

On the first choice, element A was chosen, padded with nil elements as required by minOccurs of element A

On the second choice, element B was chosen, padded with nil elements as required by minOccurs of element B

If choice minOccurs > 2, then error as no 3rd element could be chosen


1.2.2 Multi-Valued Attributes

TBD

The same general rules apply for multi-valued attributes as for single-valued attributes. In addition, there can be situations where the attribute is known and the value count is :

  • too low to satisfy the minOccurs requirement
  • too high to satisfy the maxOccurs requirement

The following table summarizes the Runtime behaviour for a multi-valued attribute with a known value.

Value CountnillableResultExplanation
count < minOccursfalse

<A>value 1</A>

<A>value 2</A>

<A/>

count elements with values, padded with empty elements as required by minOccurs
count < minOccurstrue

<A>value 1</A>

<A>value 2</A>

<A xsi:nil="true"/>

count elements with values, padded with nil elements as required by minOccurs
minOccurs <= count <= maxOccurs*

<A>value 1</A>

<A>value 2</A>

as many elements as there are values, each element containing the corresponding value
maxOccurs < count*error

When a choice is made and the multi-valued attribute is chosen, all values of that attribute are chosen and must satisfy the maxOccurs requirement.

If the choice has maxOccurs > 1, it is not possible to choose some of the values of the attribute on the first choice and the remaining values in another choice.


1.2.3 Single-Valued Relations

TBD

Same as with sequences, unknown relations are never chosen, as that would result in extra instances created on the receiving side. 

Same as with sequences, padding with empty or nil tags to satisfy minOccurs requirements does not apply, as that also would result in extra instances created on the receiving side.

Choice

minOccurs

Choice

maxOccurs

Element AElement BResultExplanation
ValueminOccursValueminOccurs
0*unknown*unknown*no element presentchosen 0 times
0*unknown*known<= 1<B> ... </B>chosen element B 1 time
0*unknown*known> 1errorchosen element B 1 time, but could not satisfy minOccurs requirement of element B
0*known<= 1unknown*<A>...</A>chosen element A 1 time
0<= 1known<= 1known<= 1errorchosen element A 1 time and element B 1 time, but choice maxOccurs does not allow making 2 choices
0> 1known<= 1known<= 1

<A>...</A>

<B>...</B>

chosen element A 1 time and element B 1 time
0*known<= 1known> 1errorchosen element A 1 time and element B 1 time, but could not satisfy minOccurs requirement of element B
0*known> 1**errorchosen element A 1 time, but could not satisfy minOccurs requirement of element A
1*unknown0unknown0no element presentchosen element A 0 times or chosen element B 0 times
1*unknown0unknown> 0no element presentchosen element A 0 times
1*unknown0known<= 1<B>...</B>chosen element B 1 time
1*unknown0known> 1errorchosen element B 1 time, but could not satisfy minOccurs requirement of element B
1*unknown> 0unknown0no element presentchosen element B 0 times
1*unknown> 0unknown> 0errorno element could be chosen
1*unknown> 0known<= 1<B>...</B>chosen element B 1 time
1*unknown> 0known> 1errorchosen element B 1 time, but could not satisfy minOccurs requirement of element B
1*known<= 1unknown*<A>...</A>chosen element A 1 time
1<= 1known<= 1known<= 1errorchosen element A 1 time and element B 1 time, but choice maxOccurs does not allow making 2 choices
1> 1known<= 1known<= 1

<A>...</A>

<B>...</B>

chosen element A 1 time and element B 1 time
1*known<= 1known> 1errorchosen element A 1 time and element B 1 time, but could not satisfy minOccurs requirement of element B
1*known> 1**errorchosen element A 1 time, but could not satisfy minOccurs requirement of element A
2*unknown0unknown0no element presentchosen element A 0 times and element B 0 times
2*unknown0unknown> 0errorchosen element A 0 times on the first choice, but no other element could be chosen on the second choice
2*unknown0known<= 1<B>...</B>chosen element A 0 times and element B 1 time
2*unknown0known> 1errorchosen element A 0 times and element B 1 time, but could not satisfy minOccurs requirement of element B
2*unknown> 0unknown0errorchosen element B 0 times on the first choice, but no other element could be chosen on the second choice
2*unknown> 0unknown> 0errorno element could be chosen
2*unknown> 0known<= 1errorchosen element B 1 times on the first choice, but no other element could be chosen on the second choice
2*unknown> 0known> 1errorchosen element B 1 times on the first choice, but could not satisfy minOccurs requirement of element B
2*known<= 1unknown0<A>...</A>chosen element A 1 times on the first choice, and chosen element B 0 times on the second choice
2*known<= 1unknown> 0errorchosen element A 1 times on the first choice, but no other element could be chosen on the second choice
2*known<= 1known<= 1

<A>...</A>

<B>...</B>

chosen element A 1 times on the first choice, and chosen element B 1 times on the second choice
2*known<= 1known> 1errorchosen element A 1 times on the first choice and chosen element B 1 times on the second choice, but could not satisfy minOccurs requirement of element B
2*known> 1**errorchosen element A 1 times on the first choice, but could not satisfy minOccurs requirement of element A
> 2*****error

There must be at least as many elements in the choice as the choice minOccurs. The number of elements that can be chosen must not exceed choice maxOccurs.

Petru Galanton : for attributes this is an error if minOccurs = 0 on both and system unknown on both, but not an error if minOccurs = 0 on both and user unknown on both. Is this documented ?


The <A>...</A>  results in the table above can be further described as depending on:

  • whether element A is nillable or not
  • whether any of the attributes or relations of the instance mapped to element A generate sub-elements
#NillableSub-ElementsResultExplanation
1falsefalse<A/>
2falsetrue

<A>

<Sub>...</Sub>

<A>

The way in which the sub-elements are expanded depends on

  • whether they are in a sequence or a choice
  • whether they are mapped to attributes or relations
  • the minOccurs, maxOccurs, nillable properties of the sub-elements

All the rules described on this page apply recursively to sub-elements.

3truefalse<A xsi:nil="true"/>

Instead of expanding empty or nil sub-elements, the message is made smaller by setting the A element to nil.

Note that if in the XSD there are sub-elements which have minOccurs > 0 then no error is thrown, as xsi:nil="true" overrides those requirements, as described in the XSD Specification

4truetrue

<A>

<Sub>...</Sub>

</A>

The explanation for #2 applies for #4 as well.


1.2.4 Multi-Valued Relations

TBD

The same rules apply for mulit-valued relations within a choice as for single-valued relations within a choice, as described in chapter 1.2.3. In addition, there can be situations where multi-valued relations:

  • do not have enough values to satisfy the minOccurs requirement of the element
  • have too many values to satisfy the maxOccurs requirement of the element


The behaviour of multi-valued relations in choices is similar to that of multi-valued attributes in choices (described in chapter 1.2.2), except that no padding with empty or nil tags is done in order to automatically satisfy the minOccurs requirement. In contrast with multi-valued attributes in choices, for multi-valued relations in choices an error will occur if the relation doesn't have enough values.

The following table summarizes the Runtime behaviour for a multi-valued relations with a known value.

Value CountResultExplanation
count < minOccurs

error

cannot satisfy the minOccurs requirement and no padding with empty or nill elements can be done
minOccurs <= count <= maxOccurs

<A>...</A>

<A>...</A>

as many elements as there are values, each element containing the corresponding value
maxOccurs < counterror

When a choice is made and the multi-valued relation is chosen, all values of that relation are chosen and must satisfy the maxOccurs requirement.

If the choice has maxOccurs > 1, it is not possible to choose some of the values of the relation on the first choice and the remaining values in another choice.

2. Receiving an XML message

TBD

2.1 Sequences

TBD

2.1.1 Single-Valued Attributes

TBD

XML Element

XSD

Result (Profile)Explanation
presentnilemptyminOccursnillableValueSource
falseN/AN/A0*unknownsystem
falseN/AN/A> 0*errorXML not conform the XSD due to minOccurs
truefalsefalse0*knownuser
truefalsefalse1*knownuser
truefalsefalse> 1*errorXML not conform the XSD due to minOccurs
truefalsetrue0*unknownuser
truefalsetrue1*unknownuser
truefalsetrue> 1*errorXML not conform the XSD due to minOccurs
truetruefalse0falseerrorXML not conform the XSD, element cannot have xsi:nil because element is not nillable
truetruefalse0trueunknownuser

The content is ignored. Petru Galanton the spec says that a nil="true" element MUST be empty.

truetruefalse1falseerrorXML not conform the XSD, element cannot have xsi:nil because element is not nillable
truetruefalse1trueunknownuserThe content is ignored
truetruefalse> 1falseerrorXML not conform the XSD, element cannot have xsi:nil because element is not nillable
truetruefalse> 1trueerrorXML not conform the XSD due to minOccurs
truetruetrue0falseerrorXML not conform the XSD, element cannot have xsi:nil because element is not nillable
truetruetrue0trueunknownuser
truetruetrue1falseerrorXML not conform the XSD, element cannot have xsi:nil because element is not nillable
truetruetrue1trueunknownuser
truetruetrue> 1falseerrorXML not conform the XSD, element cannot have xsi:nil because element is not nillable
truetruetrue> 1trueerrorXML not conform the XSD due to minOccurs


TODO Petru Galanton : minOccurs 0 and 1 could be contracted into minOccurs <= 1 ?

Note:

  • when an element is mapped to a single-valued attribute and has minOccurs > 1 in the XSD and the element is present multiple times in the XML, the attribute will have the value of the last element from top to bottom (the value of each element is mapped in turn, later values overwrite prior values)

2.1.2 Multi-Valued Attributes


The same rules apply to multi-valued attributes in a sequence as for single-valued attributes in a sequences (chapter 2.1.1). In addition, there can be situations where the number of XML elements is too high to satisfy the maxOccurs requirements. In this situation an error occurs.

2.1.3 Single-Valued Relations

TBD

XML ElementXSDResult (Profile)Explanation
presentnilminOccursnillableValueSource
falseN/A0*unknownsystem
falseN/A> 0*errorXML not conform the XSD
truefalse<= 1*knownuser
truefalse> 1*errorXML not conform the XSD
truetrue<= 1falseerrorXML not conform the XSD, element cannot have xsi:nil because element is not nillable
truetrue<= 1trueunknownuser
truetrue> 1falseerrorXML not conform the XSD, element cannot have xsi:nil because element is not nillable
truetrue> 1trueerrorXML not conform the XSD


2.1.4 Multi-Valued Relations


The same rules apply for mulit-valued relations in a sequence as for single-valued relations in a sequence (chapter 2.1.3). In addition, there can be situations where the number of XML elements exceeds the maxOccurs value from the XSD. In this situation an error occurs.

TODO Petru Galanton: multi-valued relations can also be mapped directly onto a sequence, this needs to be documented as well.

2.2 Choices

TBD

2.2.1 Single-Valued Attributes

TBD

Ch.

min

Ch.

max

Element AElement BResult (Profile)
XMLXSDXMLXSDAttribute AAttribute B
presentnilemptyminnillpresentnilemptyminnillValueSourceValueSource
0*falseN/AN/A0*falseN/AN/A**unknownsystemunknownsystem
0*falseN/AN/A0*truefalsefalse<=1*unknownsystemknownuser
0*falseN/AN/A0*truefalsefalse>1*error
0*falseN/AN/A0*truefalsetrue<=1*unknownsystemunknownuser
0*falseN/AN/A0*truefalsetrue>1*error
0*falseN/AN/A0*truetruefalse<=1falseerror
0*falseN/AN/A0*truetruefalse<=1trueunknownsystemunknownuser
0*falseN/AN/A0*truetruefalse>1falseerror
0*falseN/AN/A0*truetruefalse>1trueerror
0*falseN/AN/A0*truetruetrue<=1falseerror
0*falseN/AN/A0*truetruetrue<=1trueunknownsystemunknownuser
0*falseN/AN/A0*truetruetrue>1falseerror
0*falseN/AN/A0*truetruetrue>1trueerror
0*falseN/AN/A>0*falseN/AN/A**unknownsystemunknownsystem
0*falseN/AN/A>0*truefalsefalse<=1*unknownsystemknownuser
0*falseN/AN/A>0*truefalsefalse>1*error
0*falseN/AN/A>0
*truefalsetrue<=1*unknownsystemunknownuser
0*falseN/AN/A>0
*truefalsetrue>1*error
0*falseN/AN/A>0
*truetruefalse<=1falseerror
0*falseN/AN/A>0
*truetruefalse<=1trueunknownsystemunknownuser
0*falseN/AN/A>0
*truetruefalse>1falseerror
0*falseN/AN/A>0
*truetruefalse>1trueerror
0*falseN/AN/A>0
*truetruetrue<=1falseerror
0*falseN/AN/A>0
*truetruetrue<=1trueunknownsystemunknownuser
0*falseN/AN/A>0
*truetruetrue>1falseerror
0*falseN/AN/A>0
*truetruetrue>1trueerror


DEL












0*truefalsefalse<=1*falseN/AN/A**knownuserunknownsystem
0<= 1true****true****error
0> 1truefalsefalse<=1*truefalsefalse<=1*knownuserknownuser
0> 1truefalsefalse<=1*truefalsefalse>1*error
0> 1truefalsefalse<=1*truefalsetrue<=1*knownuserunknownuser
0> 1truefalsefalse<=1*truefalsetrue>1*error
0> 1truefalsefalse<=1*truetruefalse<=1falseerror
0> 1truefalsefalse<=1*truetruefalse<=1trueknownuserunknownuser
0> 1truefalsefalse<=1*truetruefalse>1falseerror
0> 1truefalsefalse<=1*truetruefalse>1trueerror
0> 1truefalsefalse<=1*truetruetrue<=1falseerror
0> 1truefalsefalse<=1*truetruetrue<=1trueknownuserunknownuser
0> 1truefalsefalse<=1*truetruetrue>1falseerror
0> 1truefalsefalse<=1*truetruetrue> 1trueerror


















truefalsefalse>1*falseN/AN/A0*





truefalsefalse>1*falseN/AN/A>0*





truefalsefalse>1*trueN/AN/A0*





truefalsefalse>1*trueN/AN/A>0*




















2.2.2 Multi-Valued Attributes

TBD

2.2.3 Single-Valued Relations

TBD

2.2.4 Multi-Valued Relations

TBD

  • No labels