- From: Costello, Roger L. <costello@mitre.org>
- Date: Sat, 6 Jun 2009 17:36:59 -0400
- To: "xmlschema-dev@w3.org" <xmlschema-dev@w3.org>
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@blackmesatech.com]
> Sent: Saturday, June 06, 2009 3:19 PM
> To: Costello, Roger L.
> Cc: C. M. Sperberg-McQueen; xmlschema-dev@w3.org
> 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
> ****************************************************************
>
>
>
>
>
Received on Saturday, 6 June 2009 21:37:39 UTC