Home. 
.

transparent

transparent

transparent

Altova Mailing List Archives


RE: [XML Schema 1.1] [Summary] Five questions about openContent when

From: "Costello, Roger L." <costello@-----.--->
To: "xmlschema-dev@--.---" <-------------@--.--->
Date: 6/6/2009 9:39:00 PM
 
Thanks a lot Michael!

I think there is one mistake in something you said:

> If the default open content specified 
> at schema-document-level has mode="none",
> then ...

I believe that <xs:defaultOpenContent cannot have mode="none". Here's how it is declared in the Schema-for-Schemas:

  <xs:element name="defaultOpenContent">
    <xs:complexType>
      <xs:complexContent>
        <xs:extension base="xs:annotated">
          <xs:sequence>
            <xs:element name="any" type="xs:wildcard"/>
          </xs:sequence>
          <xs:attribute name="appliesToEmpty" type="xs:boolean"
                        default="false" use="optional"/>
          <xs:attribute name="mode" default="interleave" use="optional">
            <xs:simpleType>
              <xs:restriction base="xs:NMTOKEN">
                <xs:enumeration value="interleave"/>
                <xs:enumeration value="suffix"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
          
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

Do you agree that mode="none" is not allowed?

/Roger



> -----Original Message-----
> From: C. M. Sperberg-McQueen [mailto:cmsmcq@b...] 
> Sent: Saturday, June 06, 2009 3:19 PM
> To: Costello, Roger L.
> Cc: C. M. Sperberg-McQueen; xmlschema-dev@w...
> Subject: Re: [XML Schema 1.1] [Summary] Five questions about 
> openContent when used with a type and subtype
> 
> 
> On 5 Jun 2009, at 11:44 , Costello, Roger L. wrote:
> 
> >
> > Hi Folks,
> >
> > Here are five questions I have about openContent when used with a  
> > type and subtype.
> >
> >
> > QUESTION #1
> >
> > Consider this base type (with mode="interleave") and a subtype:
> >
> >    <complexType name="Publication" abstract="true">
> >        <openContent mode="interleave">
> >            <any />
> >        </openContent>
> >        <sequence>
> >            <element name="Title" type="string" />
> >            <element name="Author" type="string" />
> >            <element name="Date" type="gYear"/>
> >        </sequence>
> >    </complexType>
> >
> >    <complexType name="BookPublication">
> >        <complexContent>
> >            <extension base="pub:Publication">
> >                <sequence>
> >                    <element name="ISBN" type="string"/>
> >                    <element name="Publisher" type="string"/>
> >                </sequence>
> >            </extension>
> >        </complexContent>
> >    </complexType>
> >
> > Now I declare the <Book> element to be of type BookPublication:
> >
> >    <element name="Book" type="pub:BookPublication">
> >
> > In the instance document, can I insert extension elements 
> around the  
> > base type elements: Title, Author, Date? How about around the  
> > subtype elements: ISBN, Publisher?
> >
> >    <Book>
> >        <Title>My Life and Times</Title> <-- around here?
> >        <Author>Paul McCartney</Author> <-- around here?
> >        <Date>1998</Date> <-- around here?
> >        <ISBN>1-56592-235-2</ISBN> <-- around here?
> >        <Publisher>McMillin Publishing</Publisher> <-- around here?
> >    </Book>
> 
> You can do anything you want; nothing in the XSD spec will
> get in your way.
> 
> If you mean "can a valid instance of pub:BookPublication
> have extension elements in these places?", then the answer
> depends, I think, on whether there is a <defaultOpenContent>
> element appearing as a child of the schema document, and
> if so what its properties are.
> 
> (1) If there is no default open content, then since
> BookPublication has no explicit statement about open
> content, it inherits the {open content} property of
> its base type, and valid instances of BookPublication
> can have extension elements in the places you mention.
> 
> (2) If the enclosing schema document has a default open
> content element, then I believe that section 3.4.2.3.3
> Mapping Rules for Content Type Property of Complex Content
> says that it is the schema-document-level open content
> specification which applies here.  If the default open
> content specified at schema-document-level has mode="none",
> then BookPublication does not have open content.  Otherwise,
> it has the open content wildcard specified in the
> <defaultOpenContent> element.
> 
> It may feel a little surprising that the open content
> specification of the base type does not override that of
> the schema document.  That is to say, it did surprise me
> a little, so I'm worried that there is some rule I have
> overlooked here.  But if I'm reading the spec correctly,
> the consequence is just that you have to remember that
> the rules for open content say, in effect, that a locally
> specified rule wins, then a rule specified at the
> schema-document level, and then a rule inherited from the
> base type.
> 
> >
> >
> >
> > QUESTION #2
> >
> > Consider this base type (with mode="interleave") and subtype (with  
> > mode="none"):
> >
> >    <complexType name="Publication" abstract="true">
> >        <openContent mode="interleave">
> >            <any />
> >        </openContent>
> >        <sequence>
> >            <element name="Title" type="string" />
> >            <element name="Author" type="string" />
> >            <element name="Date" type="gYear"/>
> >        </sequence>
> >    </complexType>
> >
> >    <complexType name="BookPublication">
> >        <complexContent>
> >            <extension base="pub:Publication">
> >                <openContent mode="none">
> >                    <any />
> >                </openContent>
> >                <sequence>
> >                    <element name="ISBN" type="string"/>
> >                    <element name="Publisher" type="string"/>
> >                </sequence>
> >            </extension>
> >        </complexContent>
> >    </complexType>
> >
> > Now I declare the <Book> element to be of type BookPublication:
> >
> >    <element name="Book" type="pub:BookPublication">
> >
> > In the instance document, can I insert extension elements 
> around the  
> > base type elements: Title, Author, Date? How about around the  
> > subtype elements: ISBN, Publisher?
> >
> >    <Book>
> >        <Title>My Life and Times</Title> <-- around here?
> >        <Author>Paul McCartney</Author> <-- around here?
> >        <Date>1998</Date> <-- around here?
> >        <ISBN>1-56592-235-2</ISBN> <-- around here?
> >        <Publisher>McMillin Publishing</Publisher> <-- around here?
> >    </Book>
> 
> 
> 
> >
> > -- From Michael's latest message, 
> > -- this is an invalid schema. Yes?
> 
> Yes.  The base type has open content with mode=interleave.
> (For brevity, let's call the open content of the base type
> B, and that of the extension E.)  And E.mode=none.
> 
> Clause 1.4.3.2.2.3 of Schema Component Constraint: Derivation
> Valid (Extension), in section 3.4.6.2 Derivation Valid
> (Extension) of Structures, says that one of the following
> must be true:
> 
>    1 B does not exist.          // false
>    2 E.mode = interleave.       // false
>    3 B.mode = E.mode = suffix.  // false
> 
> So the derivation fails to satisfy a cascade of clauses.
> Because it doesn't satisfy 1.4.3.2.2.3, it also doesn't
> satisfy 1.4.3.2.2, which means (together with some
> other things) that it doesn't satisfy 1.4.3.2,
> which means it fails 1.4.3, which means it fails 1.4,
> which means it fails to satisfy clause 1, which means
> the derivation is not valid.
> 
> 
> >
> >
> >
> > QUESTION #3
> >
> > Consider this base type and subtype (with mode="interleave"):
> >
> >    <complexType name="Publication" abstract="true">
> >        <sequence>
> >            <element name="Title" type="string" />
> >            <element name="Author" type="string" />
> >            <element name="Date" type="gYear"/>
> >        </sequence>
> >    </complexType>
> >
> >    <complexType name="BookPublication">
> >        <complexContent>
> >            <extension base="pub:Publication">
> >                <openContent mode="interleave">
> >                    <any />
> >                </openContent>
> >                <sequence>
> >                    <element name="ISBN" type="string"/>
> >                    <element name="Publisher" type="string"/>
> >                </sequence>
> >            </extension>
> >        </complexContent>
> >    </complexType>
> >
> > Now I declare the <Book> element to be of type BookPublication:
> >
> >    <element name="Book" type="pub:BookPublication">
> >
> > In the instance document, can I insert extension elements 
> around the  
> > base type elements: Title, Author, Date? How about around the  
> > subtype elements: ISBN, Publisher?
> >
> >    <Book>
> >        <Title>My Life and Times</Title> <-- around here?
> >        <Author>Paul McCartney</Author> <-- around here?
> >        <Date>1998</Date> <-- around here?
> >        <ISBN>1-56592-235-2</ISBN> <-- around here?
> >        <Publisher>McMillin Publishing</Publisher> <-- around here?
> >    </Book>
> 
> The complex type of BookPublication has open content with
> mode = interleave.  You declared it so, and it is so.
> In valid instances of that type, extension elements
> may appear in any of the locations you mention.  The
> openness is not restricted to elements not present in the
> base type.
> 
> >
> >
> > QUESTION #4
> >
> > Consider this base type (mode="suffix") and subtype (with  
> > mode="interleave"):
> >
> >    <complexType name="Publication" abstract="true">
> >        <openContent mode="suffix">
> >            <any />
> >        </openContent>
> >        <sequence>
> >            <element name="Title" type="string" />
> >            <element name="Author" type="string" />
> >            <element name="Date" type="gYear"/>
> >        </sequence>
> >    </complexType>
> >
> >    <complexType name="BookPublication">
> >        <complexContent>
> >            <extension base="pub:Publication">
> >                <openContent mode="interleave">
> >                    <any />
> >                </openContent>
> >                <sequence>
> >                    <element name="ISBN" type="string"/>
> >                    <element name="Publisher" type="string"/>
> >                </sequence>
> >            </extension>
> >        </complexContent>
> >    </complexType>
> >
> > Now I declare the <Book> element to be of type BookPublication:
> >
> >    <element name="Book" type="pub:BookPublication">
> >
> > In the instance document, can I insert extension elements 
> around the  
> > base type elements: Title, Author, Date? How about around the  
> > subtype elements: ISBN, Publisher?
> >
> >    <Book>
> >        <Title>My Life and Times</Title> <-- around here?
> >        <Author>Paul McCartney</Author> <-- around here?
> >        <Date>1998</Date> <-- around here?
> >        <ISBN>1-56592-235-2</ISBN> <-- around here?
> >        <Publisher>McMillin Publishing</Publisher> <-- around here?
> >    </Book>
> 
> Same as for question 4.  A type with mode=suffix can be
> extended by a type with mode=interleave.  It is the mode
> on the type you are using that matters, not the mode on
> the types in its base-type chain.
> 
> >
> >
> > QUESTION #5
> >
> > Consider this base type (mode="interleave") and subtype (with  
> > mode="suffix"):
> >
> >    <complexType name="Publication" abstract="true">
> >        <openContent mode="interleave">
> >            <any />
> >        </openContent>
> >        <sequence>
> >            <element name="Title" type="string" />
> >            <element name="Author" type="string" />
> >            <element name="Date" type="gYear"/>
> >        </sequence>
> >    </complexType>
> >
> >    <complexType name="BookPublication">
> >        <complexContent>
> >            <extension base="pub:Publication">
> >                <openContent mode="suffix">
> >                    <any />
> >                </openContent>
> >                <sequence>
> >                    <element name="ISBN" type="string"/>
> >                    <element name="Publisher" type="string"/>
> >                </sequence>
> >            </extension>
> >        </complexContent>
> >    </complexType>
> >
> > Now I declare the <Book> element to be of type BookPublication:
> >
> >    <element name="Book" type="pub:BookPublication">
> >
> > In the instance document, can I insert extension elements 
> around the  
> > base type elements: Title, Author, Date? How about around the  
> > subtype elements: ISBN, Publisher?
> >
> >    <Book>
> >        <Title>My Life and Times</Title> <-- around here?
> >        <Author>Paul McCartney</Author> <-- around here?
> >        <Date>1998</Date> <-- around here?
> >        <ISBN>1-56592-235-2</ISBN> <-- around here?
> >        <Publisher>McMillin Publishing</Publisher> <-- around here?
> >    </Book>
> 
> You can do anything you like.  Nothing in XSD will get
> in your way, or declare the element invalid.  (The element
> can't be validated, because the schema document does not
> map to a conforming schema:  it violates the rules for
> complex type extension, see above, question 2.
> 
> hth
> 
> -- 
> ****************************************************************
> * C. M. Sperberg-McQueen, Black Mesa Technologies LLC
> * http://www.blackmesatech.com
> * http://cmsmcq.com/mib
> * http://balisage.net
> ****************************************************************
> 
> 
> 
> 
> 


transparent
Print
Mail
Like It
Disclaimer
.

These Archives are provided for informational purposes only and have been generated directly from the Altova mailing list archive system and are comprised of the lists set forth on www.altova.com/list/index.html. Therefore, Altova does not warrant or guarantee the accuracy, reliability, completeness, usefulness, non-infringement of intellectual property rights, or quality of any content on the Altova Mailing List Archive(s), regardless of who originates that content. You expressly understand and agree that you bear all risks associated with using or relying on that content. Altova will not be liable or responsible in any way for any content posted including, but not limited to, any errors or omissions in content, or for any losses or damage of any kind incurred as a result of the use of or reliance on any content. This disclaimer and limitation on liability is in addition to the disclaimers and limitations contained in the Website Terms of Use and elsewhere on the site.

.
.

transparent

transparent