The OAGIS 8.0 issues are supposed to be resolved in webMethods 6.0. Please log this as an issue because webMethod’s is not planning on creating a patch for to add the increased schema functionality to 4.6. If enough of us open tickets it might move up in their priority list.
Just in case you haven’t seen this yet:
webMethods response to OAGIS 8 issues/questions
Our analysis is focused on 2 usage scenarios:
[UC-1] Validate XML Node using IS Schema, created using XML Schema Documents
[UC-2] Create Records (or Flows, Specs, Service I/O Signatures, etc.) using XML Schema Documents
OAGIS Release 8
[Issue 1] XSD Source Packager is the internal component that packages all the schema documents into one bundle for downstream processing. This packager incorrectly resolves relative URIs. OAGIS release 8 uses approximately 300 schema documents and uses lots of relative URIs (and ‘…’ relative URIs). See TRAX entry 1-6T8PD for a fix for this issue in webMethods 6.0.
This is critical for both [UC-1] and [UC-2]. There are simple work arounds: use absolute URI or put all the files in one directory & use simple relative URIs. However, this is very complicated if there are more than 4 to 5 files. OAG release 8 has approximately 300 files. If there is sufficient customer interest, we should consider porting the fix above to IS 4.6.
[Issue 2] Release 8 uses substitution group, a high-end feature of XML
Schema. Release 8 uses this feature heavily.
We support substitution group[1] in [UC-1]. IS type system does not support substitution group. Thus, we cannot support this feature in [UC-2]. IS will not report any problems while creating record, flow, spec, etc. But, IS will create these objects without honoring substitution group.
[1] XML Schema Part 0: Primer Second Edition
Suggested work around for [UC-2]. Using an example,
Lets say there are 3 element declarations - A, B and C
<xs:element name=“A” type=“xs:string”/>
<xs:element name=“B” type=“xs:string” substitutionGroup=“A”/>
<xs:element name=“C” type=“xs:string” substitutionGroup=“A”/>
Where A is the head element and B & C may be substituted for A. Lets declare a complex content using sequence compositor,
xs:sequence
<xs:element ref=“someElement”/>
<xs:element ref=“A”/>
<xs:element ref=“anotherElement”/>
</xs:sequence>
For the above model, A can be either A, B or C. 'Cos, B and C may be
substituted for A. There is a simpler representation for the complex content without using substitution group. That is,
<!�- create a global model group, per substitution group →
<xs:group name=�A�>
xs:choice
<xs:element ref=“A”/>
<xs:element ref=“B”/>
<xs:element ref=“C”/>
xs:choice
</xs:group>
<!�- use this global model group by reference in complex content →
xs:sequence
<xs:element ref=“someElement”/>
<xs:group ref=�A�/>
<xs:element ref="anotherElement"/>
</xs:sequence>
This is the work around.
A simple data sheet that enumerates IS (4.6) support for XML Schema is available (see schema-data-sheet.html). Highlighted items are problem areas for [UC-2].
[Issue 3] Release 8 uses recursive complex types. This is legal per XML
Schema and we have support in [UC-1]. However, it impacts [UC-2] and is a known issue. Here is a sample from release 8 that uses recursive complex types.
Source - line 1832, OAGIS8.0\OAGIS\Resources\Components.xsd
<xs:complexType name=“OrganizationalUnit”>
xs:annotation
<xs:documentation source=“http://www.openapplications.org/oagis”>
A fully generic means of identifying an organizational unit. Can
be an actual business unit (at any level) or an area of
responsibility. Each is described with respect to others,
via the ProximalUnit construct.</xs:documentation>
</xs:annotation>
xs:sequence
<xs:element name=“Id” type=“OrganizationalUnitId” minOccurs=“0”/>
<xs:element name=“Function” type=“OrganizationalUnitName”
minOccurs=“0”/>
<xs:element name=“Name” type=“Name” minOccurs=“0”/>
<xs:element name=“RelatedUnit” type=“RelatedUnitType”
^^^^^^^^^^^^^^^
minOccurs=“0” maxOccurs=“unbounded”/>
<xs:element ref=“UserArea” minOccurs=“0”/>
</xs:sequence>
</xs:complexType>
<xs:complexType name=“RelatedUnitType”>
xs:sequence
<xs:element name=“Relationship” type=“Relationship” minOccurs=“0”>
xs:annotation
<xs:documentation
source=“http://www.openapplications.org/oagis”>Defines the
relationship between this related unit and the preceeding
unit,</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name=“Unit” type=“OrganizationalUnit” minOccurs=“0”/>
^^^^^^^^^^^^^^^^^^
</xs:sequence>
</xs:complexType>
Any suggested work around?
Calls for 2 changes,
[Change 1] Create a new global element decl for ‘RelatedUnit’. That is,
<xs:element name=“RelatedUnit” type=“RelatedUnitType”/>
[Change 2] Within ‘OrganizationUnit’ complex type, replace �RelatedUnit’ local element decl with an element decl that uses the global element decl ‘RelatedUnit’ by reference. That is, replace
<xs:element name="RelatedUnit" type="RelatedUnitType"
^^^^^^^^^^^^^^^
with
<xs:element ref="RelatedUnit"
[Issue 4] Release 8 uses chameleon include. This is legal per XML Schema and we do not support it. This is a known issue, and is critical for both [UC-1] and [UC-2].
Any suggested work around?
Calls for 1 change,
[Change 1] Explicitly specify the target namespace. Replace one statement,
Line 14, OAGIS8.0\OAGIS\Resources\Verbs\Verbase.xsd
“<xs:schema xmlns:xs=“XML Schema”
elementFormDefault=“qualified” attributeFormDefault=“unqualified”>”
with
“<xs:schema xmlns:xs=“XML Schema”
xmlns=“http://www.openapplications.org/oagis”
targetNamespace=“http://www.openapplications.org/oagis”
elementFormDefault=“qualified” attributeFormDefault=“unqualified”>”