W3C home > Mailing lists > Public > xmlschema-dev@w3.org > March 2005

Re: [Bulk] Trying to Understand Complex Abstract Types: How To Define?

From: Eric Sirois <easirois@rogers.com>
Date: Wed, 23 Mar 2005 11:20:57 -0500
Message-ID: <42419769.9000702@rogers.com>
To: Eliot Kimber <ekimber@innodata-isogen.com>
CC: xml-schema-dev <xmlschema-dev@w3.org>

Hi Eliot,

The only thing that XML Schemas will not allow you to specialize in DITA 
is substitution/aliasing an element in a specific content model using 
extension/restriction. Domains elements (globally substituted elements) 
can use substitutionGroups only if the derived content model does not 
have attempt to substitute/alias an element specific to that new content 
model.  Even with the new subsumption algorithm I don't belive that this 
will
be possible in XML Schema 1.1 spec. 

If I remember correctly (someone, please correct me if I'm wrong), even 
if the specialized element content model is based on its parent becasue 
the specialized element is not base type - validation will fail.  Even 
if the base is extended with the new element first (Intemediate content 
model) and the derived type is based on intermediate model there is no 
way to guarentee validity based on the permutated tree of valid 
elements.  Right?

One hack I did in the past was to create a global abstarct version of 
specialized element and then a local element of the same name to the 
content model.
Some parser implementation did not check whether or not the element was 
global or local and validated the schema with no issues...but that did 
not last to long.

<xs:element name="prereq" type="prereq.class" abstarct="true" 
substitutionGroup="section">

In the example below there is no way to substitute/alias ( in the 
current WXS spec and the WXS 1.1 spec either)  prereq, context, result, 
and postreq for section in taskbody only (taskbody is a derivative 
body). This is one of the I had to remove any use of the XML Schema 
inheritance model from the DITA schemas.

Does someone now of a way substitute a global element in a specific 
context while making use of WXS extension/restriction model where the 
new element has the same content model  as the base element?

Kind regards,
Eric

Example
Base
<xs:element name="body" type="body.class">
    <xs:annotation>
      <xs:documentation>The &lt;<keyword>body</keyword>> element is the 
container for the
        main content of a &lt;<keyword>topic</keyword>>.
      </xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:complexType name="body.class">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:group ref="body.cnt"/>
      <xs:group ref="section"/>
      <xs:group ref="example"/>
    </xs:choice>
    <xs:attribute name="outputclass" type="xs:string"/>
    <xs:attributeGroup ref="id-atts"/>
    <xs:attribute name="translate" type="yesno-att.class"/>
    <xs:attribute ref="xml:lang"/>
    <xs:attributeGroup ref="global-atts"/>
    <xs:attribute ref="class" default="- topic/body "/>
  </xs:complexType>

Would be derivative
<xs:complexType name="taskbody.class">
    <xs:sequence>
      <xs:group ref="prereq" minOccurs="0"/>
      <xs:group ref="context" minOccurs="0"/>
      <xs:choice minOccurs="0" maxOccurs="1">
        <xs:group ref="steps" />
        <xs:group ref="steps-unordered" />
      </xs:choice>
      <xs:group ref="result" minOccurs="0"/>
      <xs:group ref="example" minOccurs="0"/>
      <xs:group ref="postreq" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="outputclass" type="xs:string"/>
    <xs:attributeGroup ref="id-atts"/>
    <xs:attribute name="translate" type="yesno-att.class"/>
    <xs:attribute ref="xml:lang"/>
    <xs:attributeGroup ref="global-atts"/>
    <xs:attribute ref="class" default="- topic/body  task/taskbody "/>
  </xs:complexType>
Received on Wednesday, 23 March 2005 16:21:37 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Tuesday, 11 January 2011 00:14:49 GMT