This topic applies only to the IBM Business Process Manager Advanced configuration.

Modellgruppenunterstützung (Verweise für alle, Auswahloptionen, Sequenzen und Gruppen)

Gemäß der SDO-Spezifikation müssen Modellgruppen (Verweistypen "all", "choice", "sequence" und "group") direkt erweitert werden und dürfen keine Typen oder Eigenschaften beschreiben.

Dies bedeutet im Wesentlichen, dass alle derartigen Strukturen, die sich in denselben Strukturen befinden, auf eine Ebene gebracht werden (flattened). Diese Nivellierung der untergeordneten Strukturen kann dazu führen, dass in einem SDO, dessen Struktur sich aus den nivellierten Daten ableitet, Probleme durch doppelte Namen entstehen. Werden die Gruppen nicht durch eine XSD nivelliert, bleibt die Abgrenzung von Duplikaten, die in unterschiedlichen Elternelementen enthalten sind, erhalten.

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
 targetNamespace="http://MultipleGroup">
  <xsd:complexType name="MultipleGroup">
    <xsd:sequence>
      <xsd:choice>
        <xsd:element name="option1" type="xsd:string"/>
        <xsd:element name="option2" type="xsd:string"/>
      </xsd:choice>
      <xsd:element name="separator" type="xsd:string"/>
      <xsd:choice>
        <xsd:element name="option1" type="xsd:string"/>
        <xsd:element name="option2" type="xsd:string"/>
      </xsd:choice>
    </xsd:sequence>
  </xsd:complexType>
</xsd:schema>

Da das mehrmalige Vorkommen von "option1" und "option2" auf verschiedene Blöcke des Typs "choice" beschränkt und sogar ein Trennelement zwischen diesen Vorkommen eingefügt ist, können die Vorkommen problemlos von XSD und XML unterschieden werden. Werden diese Gruppen jedoch vom SDO nivelliert, sind alle Optionseigenschaften anschließend demselben Container "MultipleGroup" untergeordnet.

Selbst ohne doppelte Namen entsteht ein semantisches Problem durch die Nivellierung dieser Gruppen. Dazu folgende Beispiel-XSD:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
 targetNamespace="http://SimpleChoice">
  <xsd:complexType name="SimpleChoice">
    <xsd:sequence>
      <xsd:choice>
        <xsd:element name="option1" type="xsd:string"/>
        <xsd:element name="option2" type="xsd:string"/>
      </xsd:choice>
    </xsd:sequence>
  </xsd:complexType>
</xsd:schema>

Es ist wenig sinnvoll, die Benutzer zum Verwenden anderer Namen oder Hinzufügen spezieller Anmerkungen aufzufordern, da die Benutzer in vielen Fällen, z. B. bei bestimmten Standards oder branchenspezifischen Schemas, keinen Einfluss auf die XSDs haben, mit denen sie arbeiten.

Um eine Konsistenz für alle Eigenschaften zu gewährleisten, enthalten Geschäftsobjekte eine Methode für den Zugriff auf die einzelnen Vorkommen gleichnamiger Eigenschaften über XPath. Entsprechend der Namenskonvention für das Geschäftsobjektframework wird bei doppelt vorhandenen Eigenschaftsnamen jeweils die nächste nicht verwendete Ziffer an den Namen angehängt. Dazu folgende Beispiel-XSD:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
 targetNamespace="http://TieredGroup">
  <xsd:complexType name="TieredGroup">
    <xsd:sequence>
      <xsd:choice minOccurs="0">
        <xsd:sequence>
          <xsd:element name="low" minOccurs="1" 
					maxOccurs="1" type="xsd:string"/>
          <xsd:choice minOccurs="0">
            <xsd:element name="width" minOccurs="0" 
						maxOccurs="1" type="xsd:string"/>
            <xsd:element name="high" minOccurs="0" 
						maxOccurs="1" type="xsd:string"/>
          </xsd:choice>
        </xsd:sequence>
        <xsd:element name="high" minOccurs="1" 
				maxOccurs="1" type="xsd:string"/>
        <xsd:sequence>
          <xsd:element name="width" minOccurs="1" 
					maxOccurs="1" type="xsd:string"/>
          <xsd:element name="high" minOccurs="0" 
					maxOccurs="1" type="xsd:string"/>
        </xsd:sequence>
        <xsd:sequence>
          <xsd:element name="center" minOccurs="1" 
					maxOccurs="1" type="xsd:string"/>
          <xsd:element name="width" minOccurs="0" 
					maxOccurs="1" type="xsd:string"/>
        </xsd:sequence>
      </xsd:choice>
    </xsd:sequence>
  </xsd:complexType>
</xsd:schema>

Die vorangehende XSD erstellt das folgende Datenobjektmodell:

DataObject - TieredGroup
	Property[0] - low - string
	Property[1] - width - string
	Property[2] - high - string
	Property[3] - high1 - string
	Property[4] - width1 - string
	Property[5] - high2 - string
	Property[6] - center - string
	Property[7] - width2 - string

Dabei sind width, width1, und width2 die Namen der Eigenschaften mit dem Namen "width", beginnend mit der ersten Eigenschaft in der XSD. Dasselbe gilt für high, high1, high2.

Diese neuen Eigenschaftsnamen stellen lediglich die Namen dar, die für Verweise und XPath verwendet werden, und haben keine Auswirkungen auf serialisierten Inhalt. Die "echten" Namen der einzelnen Eigenschaften, die im serialisierten XML-Code erscheinen, entsprechen den Werten, die in der XSD vergeben werden. Für die XML-Instanz bedeutet dies Folgendes:

<?xml version="1.0" encoding="UTF-8"?>
<p:TieredGroup xsi:type="p:TieredGroup"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:p="http://TieredGroup">
  <width>foo</width>
  <high>bar</high>
</p:TieredGroup>

Für den Zugriff auf diese Eigenschaften benötigen Sie den folgenden Code:

	DataObject tieredGroup = ...

	// Zeigt 'foo' an
	System.out.println(tieredGroup.get("width1"));

	// Zeigt 'bar' an
	System.out.println(tieredGroup.get("high2"));