- From: Costello, Roger L. <costello@mitre.org>
- Date: Fri, 15 Jun 2012 17:48:07 +0000
- To: "xmlschema-dev@w3.org" <xmlschema-dev@w3.org>
Hi Folks,
In section 2.2.4.4 of the Structures specification it says:
... elements substitutable for E are required to
have types derived from T, but are not required
to enforce the identity constraints ... of E.
I am trying to construct an example to illustrate this. That is, I seek to construct an element that has identity constraints and has substitutable elements, and the identity constraints are not enforced on the substitution elements.
Here's what I tried:
A BookStore contains multiple Books and each Book has a Title, Author, Date, ISBN, and Publisher. xsd:key is used to constrain each ISBN to be unique:
-----------------------------------------------------------------------------------
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.books.org"
xmlns="http://www.books.org"
xmlns:bk="http://www.books.org"
elementFormDefault="qualified">
<xsd:element name="BookStore">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Book" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Title" type="xsd:string" />
<xsd:element name="Author" type="xsd:string" />
<xsd:element name="Date" type="xsd:string" />
<xsd:element ref="ISBN" />
<xsd:element name="Publisher" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:key name="PK">
<xsd:selector xpath="bk:Book"/>
<xsd:field xpath="bk:ISBN"/>
</xsd:key>
</xsd:element>
<xsd:element name="ISBN" type="xsd:string" />
<xsd:element name="ISBN-10" substitutionGroup="ISBN" />
<xsd:element name="ISBN-13" substitutionGroup="ISBN" />
</xsd:schema>
-----------------------------------------------------------------------------------
Notice the xsd:key requires the ISBN element be unique.
Also notice that I declared ISBN globally, and declared ISBN-10 and ISBN-13 to be substitutable for ISBN.
Here is an instance document that has each ISBN value unique and is schema-valid:
<?xml version="1.0"?>
<BookStore xmlns="http://www.books.org"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://www.books.org
BookStore.xsd">
<Book>
<Title>My Life and Times</Title>
<Author>Paul McCartney</Author>
<Date>1998</Date>
<ISBN>1-56592-235-2</ISBN>
<Publisher>McMillin Publishing</Publisher>
</Book>
<Book>
<Title>Illusions The Adventures of a Reluctant Messiah</Title>
<Author>Richard Bach</Author>
<Date>1977</Date>
<ISBN>0-440-34319-4</ISBN>
<Publisher>Dell Publishing Co.</Publisher>
</Book>
<Book>
<Title>The First and Last Freedom</Title>
<Author>J. Krishnamurti</Author>
<Date>1954</Date>
<ISBN>0-06-064831-7</ISBN>
<Publisher>Harper & Row</Publisher>
</Book>
</BookStore>
Here is the same instance document, except I appended a copy of the first book, replacing its ISBN element with an ISBN-10 element:
<?xml version="1.0"?>
<BookStore xmlns="http://www.books.org"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://www.books.org
BookStore.xsd">
<Book>
<Title>My Life and Times</Title>
<Author>Paul McCartney</Author>
<Date>1998</Date>
<ISBN>1-56592-235-2</ISBN>
<Publisher>McMillin Publishing</Publisher>
</Book>
<Book>
<Title>Illusions The Adventures of a Reluctant Messiah</Title>
<Author>Richard Bach</Author>
<Date>1977</Date>
<ISBN>0-440-34319-4</ISBN>
<Publisher>Dell Publishing Co.</Publisher>
</Book>
<Book>
<Title>The First and Last Freedom</Title>
<Author>J. Krishnamurti</Author>
<Date>1954</Date>
<ISBN>0-06-064831-7</ISBN>
<Publisher>Harper & Row</Publisher>
</Book>
<Book>
<Title>My Life and Times</Title>
<Author>Paul McCartney</Author>
<Date>1998</Date>
<ISBN-10>1-56592-235-2</ISBN-10>
<Publisher>McMillin Publishing</Publisher>
</Book>
</BookStore>
That generates this error,
The field in constraint {PK} has no value.
That's not the problem that I am trying to illustrate.
I seek a way to use an ISBN-10 element, containing a value that duplicates one of the ISBN element values, and does NOT generate an error.
But how?
/Roger
Received on Friday, 15 June 2012 17:48:36 UTC