db-jdo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michael Watzek <mwa.t...@spree.de>
Subject Re: patch for review: updates to dtd, xsd
Date Wed, 07 Sep 2005 13:35:21 GMT
Hi Michelle,

I have a question concerning

<!ELEMENT join (extension*, primary-key?, column*, foreign-key?, index?, 
unique?, extension*)>

Does it make sense to declare elements "primary-key", "column", 
"foreign-key" as either/or content?

Regards,
Michael
> Hi,
> 
> I've attached a patch that contains updates to the api20 jdo.dtd, 
> orm.dtd, and jdo.xsd.  The updates are based on the working spec as of 
> Friday, 9/2.  I've also attached the xml schema file because the diff is 
> hard to read.  Please let me know if you see any errors.
> 
> Thanks,
> Michelle
> 
> 
> ------------------------------------------------------------------------
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
>     <xs:element name="jdo">
>         <xs:complexType>
>             <xs:sequence>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>                 <xs:choice maxOccurs="unbounded">
>                     <xs:element ref="package"/>
>                     <xs:element ref="query"/>
>                 </xs:choice>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>             </xs:sequence>
>             <xs:attributeGroup ref="attlist.jdo"/>
>         </xs:complexType>
>     <xs:attributeGroup name="attlist.jdo">
>         <xs:attribute name="catalog"/>
>         <xs:attribute name="schema"/>
>     </xs:attributeGroup>
>     </xs:element>
>     <xs:element name="package">
>         <xs:complexType>
>             <xs:sequence>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>                 <xs:choice maxOccurs="unbounded">
>                     <xs:element ref="interface"/>
>                     <xs:element ref="class"/>
>                     <xs:element ref="sequence"/>
>                 </xs:choice>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>             </xs:sequence>
>             <xs:attributeGroup ref="attlist.package"/>
>         </xs:complexType>
>     </xs:element>
>     <xs:attributeGroup name="attlist.package">
>         <xs:attribute name="name" default=""/>
>         <xs:attribute name="catalog"/>
>         <xs:attribute name="schema"/>
>     </xs:attributeGroup>
>     <xs:element name="interface">
>         <xs:complexType>
>             <xs:sequence>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>                 <xs:element minOccurs="0" ref="datastore-identity"/>
>                 <xs:element minOccurs="0" ref="primary-key"/>
>                 <xs:element minOccurs="0" ref="inheritance"/>
>                 <xs:element minOccurs="0" ref="version"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="join"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="foreign-key"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="index"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="unique"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="property"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="query"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="fetch-group"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>             </xs:sequence>
>             <xs:attributeGroup ref="attlist.interface"/>
>         </xs:complexType>
>     </xs:element>
>     <xs:attributeGroup name="attlist.interface">
>         <xs:attribute name="name" use="required"/>
>         <xs:attribute name="table"/>
>         <xs:attribute name="identity-type">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="datastore"/>
>                     <xs:enumeration value="application"/>
>                     <xs:enumeration value="nondurable"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="objectid-class"/>
>         <xs:attribute name="requires-extent" default="true">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="detachable" default="false">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="catalog"/>
>         <xs:attribute name="schema"/>
>     </xs:attributeGroup>
>     <xs:element name="property">
>         <xs:complexType>
>             <xs:sequence>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>                 <xs:choice minOccurs="0">
>                     <xs:element ref="array"/>
>                     <xs:element ref="collection"/>
>                     <xs:element ref="map"/>
>                 </xs:choice>
>                 <xs:element minOccurs="0" ref="join"/>
>                 <xs:element minOccurs="0" ref="embedded"/>
>                 <xs:element minOccurs="0" ref="element"/>
>                 <xs:element minOccurs="0" ref="key"/>
>                 <xs:element minOccurs="0" ref="value"/>
>                 <xs:element minOccurs="0" ref="order"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="column"/>
>                 <xs:element minOccurs="0" ref="foreign-key"/>
>                 <xs:element minOccurs="0" ref="index"/>
>                 <xs:element minOccurs="0" ref="unique"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>             </xs:sequence>
>             <xs:attributeGroup ref="attlist.property"/>
>         </xs:complexType>
>     </xs:element>
>     <xs:attributeGroup name="attlist.property">
>         <xs:attribute name="name" use="required"/>
>         <xs:attribute name="default-fetch-group">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="load-fetch-group"/>
>         <xs:attribute name="null-value" default="none">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="default"/>
>                     <xs:enumeration value="exception"/>
>                     <xs:enumeration value="none"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="dependent">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="embedded">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="primary-key" default="false">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="value-strategy"/>
>         <xs:attribute name="sequence"/>
>         <xs:attribute name="serialized">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="table"/>
>         <xs:attribute name="column"/>
>         <xs:attribute name="delete-action">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="restrict"/>
>                     <xs:enumeration value="cascade"/>
>                     <xs:enumeration value="null"/>
>                     <xs:enumeration value="default"/>
>                     <xs:enumeration value="none"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="indexed">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                     <xs:enumeration value="unique"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="unique">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="mapped-by"/>
>         <xs:attribute name="fetch-group"/>
>         <xs:attribute name="fetch-depth"/>
>         <xs:attribute name="field-name"/>
>     </xs:attributeGroup>
>     <xs:element name="class">
>         <xs:complexType>
>             <xs:sequence>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="implements"/>
>                 <xs:element minOccurs="0" ref="datastore-identity"/>
>                 <xs:element minOccurs="0" ref="primary-key"/>
>                 <xs:element minOccurs="0" ref="inheritance"/>
>                 <xs:element minOccurs="0" ref="version"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="join"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="foreign-key"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="index"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="unique"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="field"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="query"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="fetch-group"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>             </xs:sequence>
>             <xs:attributeGroup ref="attlist.class"/>
>         </xs:complexType>
>     </xs:element>
>     <xs:attributeGroup name="attlist.class">
>         <xs:attribute name="name" use="required"/>
>         <xs:attribute name="identity-type">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="application"/>
>                     <xs:enumeration value="datastore"/>
>                     <xs:enumeration value="nondurable"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="objectid-class"/>
>         <xs:attribute name="table"/>
>         <xs:attribute name="requires-extent" default="true">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="persistence-capable-superclass"/>
>         <xs:attribute name="detachable" default="false">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="embedded-only">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="persistence-modifier">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="persistence-capable"/>
>                     <xs:enumeration value="persistence-aware"/>
>                     <xs:enumeration value="non-persistent"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="catalog"/>
>         <xs:attribute name="schema"/>
>     </xs:attributeGroup>
>     <xs:element name="primary-key">
>         <xs:complexType>
>             <xs:sequence>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="column"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>             </xs:sequence>
>             <xs:attributeGroup ref="attlist.primary-key"/>
>         </xs:complexType>
>     </xs:element>
>     <xs:attributeGroup name="attlist.primary-key">
>         <xs:attribute name="name"/>
>         <xs:attribute name="column"/>
>     </xs:attributeGroup>
>     <xs:element name="join">
>         <xs:complexType>
>             <xs:sequence>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>                 <xs:element minOccurs="0" ref="primary-key"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="column"/>
>                 <xs:element minOccurs="0" ref="foreign-key"/>
>                 <xs:element minOccurs="0" ref="index"/>
>                 <xs:element minOccurs="0" ref="unique"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>             </xs:sequence>
>             <xs:attributeGroup ref="attlist.join"/>
>         </xs:complexType>
>     </xs:element>
>     <xs:attributeGroup name="attlist.join">
>         <xs:attribute name="table"/>
>         <xs:attribute name="column"/>
>         <xs:attribute name="outer" default="false">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="delete-action">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="restrict"/>
>                     <xs:enumeration value="cascade"/>
>                     <xs:enumeration value="null"/>
>                     <xs:enumeration value="default"/>
>                     <xs:enumeration value="none"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="indexed">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                     <xs:enumeration value="unique"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="unique">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>     </xs:attributeGroup>
>     <xs:element name="version">
>         <xs:complexType>
>             <xs:sequence>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="column"/>
>                 <xs:element minOccurs="0" ref="index"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>             </xs:sequence>
>             <xs:attributeGroup ref="attlist.version"/>
>         </xs:complexType>
>     </xs:element>
>     <xs:attributeGroup name="attlist.version">
>         <xs:attribute name="strategy"/>
>         <xs:attribute name="column"/>
>         <xs:attribute name="indexed">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                     <xs:enumeration value="unique"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>     </xs:attributeGroup>
>     <xs:element name="datastore-identity">
>         <xs:complexType>
>             <xs:sequence>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="column"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>             </xs:sequence>
>             <xs:attributeGroup ref="attlist.datastore-identity"/>
>         </xs:complexType>
>     </xs:element>
>     <xs:attributeGroup name="attlist.datastore-identity">
>         <xs:attribute name="column"/>
>         <xs:attribute name="strategy" default="native"/>
>         <xs:attribute name="sequence"/>
>     </xs:attributeGroup>
>     <xs:element name="implements">
>         <xs:complexType>
>             <xs:sequence>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="property"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>             </xs:sequence>
>             <xs:attributeGroup ref="attlist.implements"/>
>         </xs:complexType>
>     </xs:element>
>     <xs:attributeGroup name="attlist.implements">
>         <xs:attribute name="name" use="required"/>
>     </xs:attributeGroup>
>     <xs:element name="inheritance">
>         <xs:complexType>
>             <xs:sequence>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>                 <xs:element minOccurs="0" ref="join"/>
>                 <xs:element minOccurs="0" ref="discriminator"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>             </xs:sequence>
>             <xs:attributeGroup ref="attlist.inheritance"/>
>         </xs:complexType>
>     </xs:element>
>     <xs:attributeGroup name="attlist.inheritance">
>         <xs:attribute name="strategy"/>
>     </xs:attributeGroup>
>     <xs:element name="discriminator">
>         <xs:complexType>
>             <xs:sequence>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="column"/>
>                 <xs:element minOccurs="0" ref="index"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>             </xs:sequence>
>             <xs:attributeGroup ref="attlist.discriminator"/>
>         </xs:complexType>
>     </xs:element>
>     <xs:attributeGroup name="attlist.discriminator">
>         <xs:attribute name="column"/>
>         <xs:attribute name="value"/>
>         <xs:attribute name="strategy"/>
>         <xs:attribute name="indexed">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                     <xs:enumeration value="unique"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>     </xs:attributeGroup>
>     <xs:element name="column">
>         <xs:complexType>
>             <xs:sequence>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>             </xs:sequence>
>             <xs:attributeGroup ref="attlist.column"/>
>         </xs:complexType>
>     </xs:element>
>     <xs:attributeGroup name="attlist.column">
>         <xs:attribute name="name"/>
>         <xs:attribute name="target"/>
>         <xs:attribute name="target-field"/>
>         <xs:attribute name="jdbc-type"/>
>         <xs:attribute name="sql-type"/>
>         <xs:attribute name="length"/>
>         <xs:attribute name="scale"/>
>         <xs:attribute name="allows-null"/>
>         <xs:attribute name="default-value"/>
>         <xs:attribute name="insert-value"/>
>     </xs:attributeGroup>
>     <xs:element name="field">
>         <xs:complexType>
>             <xs:sequence>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>                 <xs:choice minOccurs="0">
>                     <xs:element ref="array"/>
>                     <xs:element ref="collection"/>
>                     <xs:element ref="map"/>
>                 </xs:choice>
>                 <xs:element minOccurs="0" ref="join"/>
>                 <xs:element minOccurs="0" ref="embedded"/>
>                 <xs:element minOccurs="0" ref="element"/>
>                 <xs:element minOccurs="0" ref="key"/>
>                 <xs:element minOccurs="0" ref="value"/>
>                 <xs:element minOccurs="0" ref="order"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="column"/>
>                 <xs:element minOccurs="0" ref="index"/>
>                 <xs:element minOccurs="0" ref="unique"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>             </xs:sequence>
>             <xs:attributeGroup ref="attlist.field"/>
>         </xs:complexType>
>     </xs:element>
>     <xs:attributeGroup name="attlist.field">
>         <xs:attribute name="name" use="required"/>
>         <xs:attribute name="persistence-modifier">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="persistent"/>
>                     <xs:enumeration value="transactional"/>
>                     <xs:enumeration value="none"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="table"/>
>         <xs:attribute name="column"/>
>         <xs:attribute name="primary-key" default="false">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="null-value" default="none">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="exception"/>
>                     <xs:enumeration value="default"/>
>                     <xs:enumeration value="none"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="default-fetch-group">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="embedded">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="serialized">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="dependent">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="value-strategy"/>
>         <xs:attribute name="delete-action">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="restrict"/>
>                     <xs:enumeration value="cascade"/>
>                     <xs:enumeration value="null"/>
>                     <xs:enumeration value="default"/>
>                     <xs:enumeration value="none"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="indexed">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                     <xs:enumeration value="unique"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="unique">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="sequence"/>
>         <xs:attribute name="foreign-key"/>
>         <xs:attribute name="load-fetch-group"/>
>         <xs:attribute name="fetch-depth"/>
>         <xs:attribute name="mapped-by"/>
>     </xs:attributeGroup>
>     <xs:element name="foreign-key">
>         <xs:complexType>
>             <xs:sequence>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>                 <xs:choice minOccurs="0" maxOccurs="unbounded">
>                     <xs:element ref="column"/>
>                     <xs:element ref="field"/>
>                     <xs:element ref="property"/>
>                 </xs:choice>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>             </xs:sequence>
>             <xs:attributeGroup ref="attlist.foreign-key"/>
>         </xs:complexType>
>     </xs:element>
>     <xs:attributeGroup name="attlist.foreign-key">
>         <xs:attribute name="table"/>
>         <xs:attribute name="deferred">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="delete-action" default="restrict">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="cascade"/>
>                     <xs:enumeration value="restrict"/>
>                     <xs:enumeration value="null"/>
>                     <xs:enumeration value="default"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="update-action" default="restrict">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="cascade"/>
>                     <xs:enumeration value="restrict"/>
>                     <xs:enumeration value="null"/>
>                     <xs:enumeration value="default"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="unique">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="name"/>
>     </xs:attributeGroup>
>     <xs:element name="collection">
>         <xs:complexType>
>             <xs:sequence>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>             </xs:sequence>
>             <xs:attributeGroup ref="attlist.collection"/>
>         </xs:complexType>
>     </xs:element>
>     <xs:attributeGroup name="attlist.collection">
>         <xs:attribute name="element-type"/>
>         <xs:attribute name="embedded-element">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="dependent-element">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="serialized-element">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>     </xs:attributeGroup>
>     <xs:element name="map">
>         <xs:complexType>
>             <xs:sequence>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>             </xs:sequence>
>             <xs:attributeGroup ref="attlist.map"/>
>         </xs:complexType>
>     </xs:element>
>     <xs:attributeGroup name="attlist.map">
>         <xs:attribute name="key-type"/>
>         <xs:attribute name="embedded-key">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="dependent-key">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="serialized-key">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="value-type"/>
>         <xs:attribute name="embedded-value">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="dependent-value">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="serialized-value">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>     </xs:attributeGroup>
>     <xs:element name="key">
>         <xs:complexType>
>             <xs:sequence>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>                 <xs:element minOccurs="0" ref="embedded"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="column"/>
>                 <xs:element minOccurs="0" ref="foreign-key"/>
>                 <xs:element minOccurs="0" ref="index"/>
>                 <xs:element minOccurs="0" ref="unique"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>             </xs:sequence>
>             <xs:attributeGroup ref="attlist.key"/>
>         </xs:complexType>
>     </xs:element>
>     <xs:attributeGroup name="attlist.key">
>         <xs:attribute name="column"/>
>         <xs:attribute name="table"/>
>         <xs:attribute name="delete-action">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="restrict"/>
>                     <xs:enumeration value="cascade"/>
>                     <xs:enumeration value="null"/>
>                     <xs:enumeration value="default"/>
>                     <xs:enumeration value="none"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="indexed">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                     <xs:enumeration value="unique"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="unique">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="mapped-by"/>
>     </xs:attributeGroup>
>     <xs:element name="value">
>         <xs:complexType>
>             <xs:sequence>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>                 <xs:element minOccurs="0" ref="embedded"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="column"/>
>                 <xs:element minOccurs="0" ref="foreign-key"/>
>                 <xs:element minOccurs="0" ref="index"/>
>                 <xs:element minOccurs="0" ref="unique"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>             </xs:sequence>
>             <xs:attributeGroup ref="attlist.value"/>
>         </xs:complexType>
>     </xs:element>
>     <xs:attributeGroup name="attlist.value">
>         <xs:attribute name="table"/>
>         <xs:attribute name="column"/>
>         <xs:attribute name="delete-action">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="restrict"/>
>                     <xs:enumeration value="cascade"/>
>                     <xs:enumeration value="null"/>
>                     <xs:enumeration value="default"/>
>                     <xs:enumeration value="none"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="indexed">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                     <xs:enumeration value="unique"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="unique">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="mapped-by"/>
>     </xs:attributeGroup>
>     <xs:element name="array">
>         <xs:complexType>
>             <xs:sequence>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>             </xs:sequence>
>             <xs:attributeGroup ref="attlist.array"/>
>         </xs:complexType>
>     </xs:element>
>     <xs:attributeGroup name="attlist.array">
>         <xs:attribute name="embedded-element">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="dependent-element">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="serialized-element">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>     </xs:attributeGroup>
>     <xs:element name="element">
>         <xs:complexType>
>             <xs:sequence>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>                 <xs:element minOccurs="0" ref="embedded"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="column"/>
>                 <xs:element minOccurs="0" ref="foreign-key"/>
>                 <xs:element minOccurs="0" ref="index"/>
>                 <xs:element minOccurs="0" ref="unique"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>             </xs:sequence>
>             <xs:attributeGroup ref="attlist.element"/>
>         </xs:complexType>
>     </xs:element>
>     <xs:attributeGroup name="attlist.element">
>         <xs:attribute name="column"/>
>         <xs:attribute name="table"/>
>         <xs:attribute name="delete-action">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="restrict"/>
>                     <xs:enumeration value="cascade"/>
>                     <xs:enumeration value="null"/>
>                     <xs:enumeration value="default"/>
>                     <xs:enumeration value="none"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="update-action"/>
>         <xs:attribute name="indexed">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                     <xs:enumeration value="unique"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="unique">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="mapped-by"/>
>     </xs:attributeGroup>
>     <xs:element name="order">
>         <xs:complexType>
>             <xs:sequence>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="column"/>
>                 <xs:element minOccurs="0" ref="index"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>             </xs:sequence>
>             <xs:attributeGroup ref="attlist.order"/>
>         </xs:complexType>
>     </xs:element>
>     <xs:attributeGroup name="attlist.order">
>         <xs:attribute name="column"/>
>         <xs:attribute name="indexed">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                     <xs:enumeration value="unique"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>     </xs:attributeGroup>
>     <xs:element name="fetch-group">
>         <xs:complexType>
>             <xs:choice minOccurs="0" maxOccurs="unbounded">
>                 <xs:element ref="fetch-group"/>
>                 <xs:element ref="field"/>
>             </xs:choice>
>             <xs:attributeGroup ref="attlist.fetch-group"/>
>         </xs:complexType>
>     </xs:element>
>     <xs:attributeGroup name="attlist.fetch-group">
>         <xs:attribute name="name" use="required"/>
>         <xs:attribute name="post-load">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>     </xs:attributeGroup>
>     <xs:element name="embedded">
>         <xs:complexType>
>             <xs:sequence>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="field"/>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>             </xs:sequence>
>             <xs:attributeGroup ref="attlist.embedded"/>
>         </xs:complexType>
>     </xs:element>
>     <xs:attributeGroup name="attlist.embedded">
>         <xs:attribute name="owner-field"/>
>         <xs:attribute name="null-indicator-column"/>
>         <xs:attribute name="null-indicator-value"/>
>     </xs:attributeGroup>
>     <xs:element name="sequence">
>         <xs:complexType>
>             <xs:sequence>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>             </xs:sequence>
>             <xs:attributeGroup ref="attlist.sequence"/>
>         </xs:complexType>
>     </xs:element>
>     <xs:attributeGroup name="attlist.sequence">
>         <xs:attribute name="name" use="required"/>
>         <xs:attribute name="datastore-sequence"/>
>         <xs:attribute name="factory-class"/>
>         <xs:attribute name="strategy" use="required">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="nontransactional"/>
>                     <xs:enumeration value="contiguous"/>
>                     <xs:enumeration value="noncontiguous"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>     </xs:attributeGroup>
>     <xs:element name="index">
>         <xs:complexType>
>             <xs:sequence>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>                 <xs:choice minOccurs="0" maxOccurs="unbounded">
>                     <xs:element ref="column"/>
>                     <xs:element ref="field"/>
>                     <xs:element ref="property"/>
>                 </xs:choice>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>             </xs:sequence>
>             <xs:attributeGroup ref="attlist.index"/>
>         </xs:complexType>
>     </xs:element>
>     <xs:attributeGroup name="attlist.index">
>         <xs:attribute name="name"/>
>         <xs:attribute name="table"/>
>         <xs:attribute name="unique" default="false">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>     </xs:attributeGroup>
>     <xs:element name="query">
>         <xs:complexType mixed="true">
>             <xs:sequence>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>             </xs:sequence>
>             <xs:attributeGroup ref="attlist.query"/>
>         </xs:complexType>
>     </xs:element>
>     <xs:attributeGroup name="attlist.query">
>         <xs:attribute name="name"/>
>         <xs:attribute name="language"/>
>         <xs:attribute name="unmodifiable" default="false">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="unique" default="false">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>         <xs:attribute name="result-class"/>
>     </xs:attributeGroup>
>     <xs:element name="unique">
>         <xs:complexType>
>             <xs:sequence>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>                 <xs:choice minOccurs="0" maxOccurs="unbounded">
>                     <xs:element ref="column"/>
>                     <xs:element ref="field"/>
>                     <xs:element ref="property"/>
>                 </xs:choice>
>                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>             </xs:sequence>
>             <xs:attributeGroup ref="attlist.unique"/>
>         </xs:complexType>
>     </xs:element>
>     <xs:attributeGroup name="attlist.unique">
>         <xs:attribute name="name"/>
>         <xs:attribute name="table"/>
>         <xs:attribute name="deferred" default="false">
>             <xs:simpleType>
>                 <xs:restriction base="xs:token">
>                     <xs:enumeration value="true"/>
>                     <xs:enumeration value="false"/>
>                 </xs:restriction>
>             </xs:simpleType>
>         </xs:attribute>
>     </xs:attributeGroup>
>     <xs:element name="extension">
>         <xs:complexType>
>             <xs:complexContent>
>                 <xs:extension base="any">
>                     <xs:attributeGroup ref="attlist.extension"/>
>                 </xs:extension>
>             </xs:complexContent>
>         </xs:complexType>
>     </xs:element>
>     <xs:attributeGroup name="attlist.extension">
>         <xs:attribute name="vendor-name" use="required"/>
>         <xs:attribute name="key"/>
>         <xs:attribute name="value"/>
>     </xs:attributeGroup>
>     <xs:complexType name="any" mixed="true">
>         <xs:sequence>
>             <xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip"/>
>         </xs:sequence>
>     </xs:complexType>
> </xs:schema>
> 
> 
> ------------------------------------------------------------------------
> 
> Index: src/dtd/javax/jdo/jdo.dtd
> ===================================================================
> --- src/dtd/javax/jdo/jdo.dtd	(revision 233330)
> +++ src/dtd/javax/jdo/jdo.dtd	(working copy)
> @@ -1,19 +1,25 @@
> -<!-- The following document headers belong in the user's .jdo file
>  <?xml version="1.0" encoding="UTF-8"?>
> +<!-- The DOCTYPE should be as follows for metadata documents.
>  <!DOCTYPE jdo
>      PUBLIC "-//Sun Microsystems, Inc.//DTD Java Data Objects Metadata 2.0//EN"
>      "http://java.sun.com/dtd/jdo_2_0.dtd">
>  -->
>  <!ELEMENT jdo (extension*, (package|query)+, extension*)>
> +<!ATTLIST jdo catalog CDATA #IMPLIED>
> +<!ATTLIST jdo schema CDATA #IMPLIED>
>  <!ELEMENT package (extension*, (interface|class|sequence)+, extension*)>
>  <!ATTLIST package name CDATA ''>
> -<!ELEMENT interface (extension*, datastore-identity?, inheritance?, version?, join*, foreign-key*, index*, unique*, property*, query*, fetch-group*, extension*)>
> +<!ATTLIST package catalog CDATA #IMPLIED>
> +<!ATTLIST package schema CDATA #IMPLIED>
> +<!ELEMENT interface (extension*, datastore-identity?, primary-key?, inheritance?, version?, join*, foreign-key*, index*, unique*, property*, query*, fetch-group*, extension*)>
>  <!ATTLIST interface name CDATA #REQUIRED>
>  <!ATTLIST interface table CDATA #IMPLIED>
>  <!ATTLIST interface identity-type (datastore|application|nondurable) #IMPLIED>
>  <!ATTLIST interface objectid-class CDATA #IMPLIED>
>  <!ATTLIST interface requires-extent (true|false) 'true'>
>  <!ATTLIST interface detachable (true|false) 'false'>
> +<!ATTLIST interface catalog CDATA #IMPLIED>
> +<!ATTLIST interface schema CDATA #IMPLIED>
>  
>  <!ELEMENT property (extension*, (array|collection|map)?, join?, embedded?, element?, key?, value?, order?, column*, foreign-key?, index?, unique?, extension*)>
>  <!ATTLIST property name CDATA #REQUIRED>
> @@ -36,7 +42,7 @@
>  <!ATTLIST property fetch-depth CDATA #IMPLIED>
>  <!ATTLIST property field-name CDATA #IMPLIED>
>  
> -<!ELEMENT class (extension*, implements*, datastore-identity?, inheritance?, version?, join*, foreign-key*, index*, unique*, field*, query*, fetch-group*, extension*)>
> +<!ELEMENT class (extension*, implements*, datastore-identity?, primary-key?, inheritance?, version?, join*, foreign-key*, index*, unique*, column*, field*, property*, query*, fetch-group*, extension*)>
>  <!ATTLIST class name CDATA #REQUIRED>
>  <!ATTLIST class identity-type (application|datastore|nondurable) #IMPLIED>
>  <!ATTLIST class objectid-class CDATA #IMPLIED>
> @@ -46,8 +52,14 @@
>  <!ATTLIST class detachable (true|false) 'false'>
>  <!ATTLIST class embedded-only (true|false) #IMPLIED>
>  <!ATTLIST class persistence-modifier (persistence-capable|persistence-aware|non-persistent) #IMPLIED>
> +<!ATTLIST class catalog CDATA #IMPLIED>
> +<!ATTLIST class schema CDATA #IMPLIED>
>  
> -<!ELEMENT join (extension*, column*, foreign-key?, index?, unique?, extension*)>
> +<!ELEMENT primary-key (extension*, column*, extension*)>
> +<!ATTLIST primary-key name CDATA #IMPLIED>
> +<!ATTLIST primary-key column CDATA #IMPLIED>
> +
> +<!ELEMENT join (extension*, primary-key?, column*, foreign-key?, index?, unique?, extension*)>
>  <!ATTLIST join table CDATA #IMPLIED>
>  <!ATTLIST join column CDATA #IMPLIED>
>  <!ATTLIST join outer (true|false) 'false'>
> @@ -87,6 +99,7 @@
>  <!ATTLIST column scale CDATA #IMPLIED>
>  <!ATTLIST column allows-null CDATA #IMPLIED>
>  <!ATTLIST column default-value CDATA #IMPLIED>
> +<!ATTLIST column insert-value CDATA #IMPLIED>
>  
>  <!ELEMENT field (extension*, (array|collection|map)?, join?, embedded?, element?, key?, value?, order?, column*, foreign-key?, index?, unique?, extension*)>
>  <!ATTLIST field name CDATA #REQUIRED>
> @@ -104,7 +117,6 @@
>  <!ATTLIST field indexed (true|false|unique) #IMPLIED>
>  <!ATTLIST field unique (true|false) #IMPLIED>
>  <!ATTLIST field sequence CDATA #IMPLIED>
> -<!ATTLIST field foreign-key CDATA #IMPLIED>
>  <!ATTLIST field load-fetch-group CDATA #IMPLIED>
>  <!ATTLIST field fetch-depth CDATA #IMPLIED>
>  <!ATTLIST field mapped-by CDATA #IMPLIED>
> @@ -121,39 +133,42 @@
>  <!ATTLIST collection element-type CDATA #IMPLIED>
>  <!ATTLIST collection embedded-element (true|false) #IMPLIED>
>  <!ATTLIST collection dependent-element (true|false) #IMPLIED>
> +<!ATTLIST collection serialized-element (true|false) #IMPLIED>
>  
>  <!ELEMENT map (extension)*>
>  <!ATTLIST map key-type CDATA #IMPLIED>
>  <!ATTLIST map embedded-key (true|false) #IMPLIED>
>  <!ATTLIST map dependent-key (true|false) #IMPLIED>
> +<!ATTLIST map serialized-key (true|false) #IMPLIED>
>  <!ATTLIST map value-type CDATA #IMPLIED>
>  <!ATTLIST map embedded-value (true|false) #IMPLIED>
>  <!ATTLIST map dependent-value (true|false) #IMPLIED>
> +<!ATTLIST map serialized-value (true|false) #IMPLIED>
>  
>  <!ELEMENT key (extension*, embedded?, column*, foreign-key?, index?, unique?, extension*)>
>  <!ATTLIST key column CDATA #IMPLIED>
>  <!ATTLIST key table CDATA #IMPLIED>
> -<!ATTLIST key serialized (true|false) #IMPLIED>
>  <!ATTLIST key delete-action (restrict|cascade|null|default|none) #IMPLIED>
>  <!ATTLIST key indexed (true|false|unique) #IMPLIED>
>  <!ATTLIST key unique (true|false) #IMPLIED>
> +<!ATTLIST key mapped-by CDATA #IMPLIED>
>  
>  <!ELEMENT value (extension*, embedded?, column*, foreign-key?, index?, unique?, extension*)>
> -<!ATTLIST value serialized (true|false) #IMPLIED>
>  <!ATTLIST value table CDATA #IMPLIED>
>  <!ATTLIST value column CDATA #IMPLIED>
>  <!ATTLIST value delete-action (restrict|cascade|null|default|none) #IMPLIED>
>  <!ATTLIST value indexed (true|false|unique) #IMPLIED>
>  <!ATTLIST value unique (true|false) #IMPLIED>
> +<!ATTLIST value mapped-by CDATA #IMPLIED>
>  
>  <!ELEMENT array (extension*)>
>  <!ATTLIST array embedded-element (true|false) #IMPLIED>
>  <!ATTLIST array dependent-element (true|false) #IMPLIED>
> +<!ATTLIST array serialized-element (true|false) #IMPLIED>
>  
>  <!ELEMENT element (extension*, embedded?, column*, foreign-key?, index?, unique?, extension*)>
>  <!ATTLIST element column CDATA #IMPLIED>
>  <!ATTLIST element table CDATA #IMPLIED>
> -<!ATTLIST element serialized (true|false) #IMPLIED>
>  <!ATTLIST element delete-action (restrict|cascade|null|default|none) #IMPLIED>
>  <!ATTLIST element update-action CDATA #IMPLIED>
>  <!ATTLIST element indexed (true|false|unique) #IMPLIED>
> @@ -162,6 +177,7 @@
>  <!ELEMENT order (extension*, column*, index?, extension*)>
>  <!ATTLIST order column CDATA #IMPLIED>
>  <!ATTLIST order indexed (true|false|unique) #IMPLIED>
> +<!ATTLIST order mapped-by CDATA #IMPLIED>
>  
>  <!ELEMENT fetch-group (fetch-group|field)*>
>  <!ATTLIST fetch-group name CDATA #REQUIRED>
> @@ -187,6 +203,8 @@
>  <!ATTLIST query name CDATA #IMPLIED>
>  <!ATTLIST query language CDATA #IMPLIED>
>  <!ATTLIST query unmodifiable (true|false) 'false'>
> +<!ATTLIST query unique (true|false) 'false'>
> +<!ATTLIST query result-class CDATA #IMPLIED>
>  
>  <!ELEMENT unique (extension*, (column|field|property)*, extension*)>
>  <!ATTLIST unique name CDATA #IMPLIED>
> Index: src/dtd/javax/jdo/orm.dtd
> ===================================================================
> --- src/dtd/javax/jdo/orm.dtd	(revision 233330)
> +++ src/dtd/javax/jdo/orm.dtd	(working copy)
> @@ -1,26 +1,38 @@
> -<!-- The following document headers belong in the user's .orm file
>  <?xml version="1.0" encoding="UTF-8"?>
> +<!-- The DOCTYPE should be as follows for metadata documents.
>  <!DOCTYPE orm
>      PUBLIC "-//Sun Microsystems, Inc.//DTD Java Data Objects Mapping Metadata 2.0//EN"
>      "http://java.sun.com/dtd/orm_2_0.dtd">
>  -->
>  <!ELEMENT orm (extension*, (package|query)+, extension*)>
> +<!ATTLIST orm catalog CDATA #IMPLIED>
> +<!ATTLIST orm schema CDATA #IMPLIED>
>  <!ELEMENT package (extension*, (interface|class|sequence)+, extension*)>
>  <!ATTLIST package name CDATA ''>
> +<!ATTLIST package catalog CDATA #IMPLIED>
> +<!ATTLIST package schema CDATA #IMPLIED>
>  
> -<!ELEMENT interface (extension*, datastore-identity?, inheritance?, version?, join*, foreign-key*, index*, unique*, property*, query*, extension*)>
> +<!ELEMENT interface (extension*, datastore-identity?, primary-key?, inheritance?, version?, join*, foreign-key*, index*, unique*, property*, query*, extension*)>
>  <!ATTLIST interface name CDATA #REQUIRED>
>  <!ATTLIST interface table #CDATA #IMPLIED>
> +<!ATTLIST interface catalog CDATA #IMPLIED>
> +<!ATTLIST interface schema CDATA #IMPLIED>
>  
> -<!ELEMENT property (join?, element?, key?, value?, order?, column)? , extension*)>
> +<!ELEMENT property (extension*, (join?, element?, key?, value?, order?, column)? , extension*)>
>  <!ATTLIST property name CDATA #REQUIRED>
>  <!ATTLIST property column CDATA #IMPLIED>
>  
> -<!ELEMENT class (extension*, datastore-identity?, inheritance?, version?, join*, foreign-key*, index*, unique*, field*, query*, extension*)>
> +<!ELEMENT class (extension*, datastore-identity?, primary-key?, inheritance?, version?, join*, foreign-key*, index*, unique*, column*, field*, query*, extension*)>
>  <!ATTLIST class name CDATA #REQUIRED>
>  <!ATTLIST class table CDATA #IMPLIED>
> +<!ATTLIST class catalog CDATA #IMPLIED>
> +<!ATTLIST class schema CDATA #IMPLIED>
>  
> -<!ELEMENT join (extension*, column*, foreign-key?, index?, unique?, extension*)>
> +<!ELEMENT primary-key (extension*, column*, extension*)>
> +<!ATTLIST primary-key name CDATA #IMPLIED>
> +<!ATTLIST primary-key column CDATA #IMPLIED>
> +
> +<!ELEMENT join (extension*, primary-key?, column*, foreign-key?, index?, unique?, extension*)>
>  <!ATTLIST join table CDATA #IMPLIED>
>  <!ATTLIST join column CDATA #IMPLIED>
>  <!ATTLIST join outer (true|false) 'false'>
> @@ -60,6 +72,7 @@
>  <!ATTLIST column scale CDATA #IMPLIED>
>  <!ATTLIST column allows-null CDATA #IMPLIED>
>  <!ATTLIST column default-value CDATA #IMPLIED>
> +<!ATTLIST column insert-value CDATA #IMPLIED>
>  
>  <!ELEMENT property (extension*, join?, embedded?, element?, key?, value?, order?, column*, foreign-key?, index?, unique?, extension*)>
>  <!ATTLIST property name CDATA #REQUIRED>
> @@ -81,7 +94,6 @@
>  <!ATTLIST field delete-action (restrict|cascade|null|default|none) #IMPLIED>
>  <!ATTLIST field indexed (true|false|unique) #IMPLIED>
>  <!ATTLIST field unique (true|false) #IMPLIED>
> -<!ATTLIST field foreign-key CDATA #IMPLIED>
>  <!ATTLIST field mapped-by CDATA #IMPLIED>
>  <!ATTLIST field value-strategy CDATA #IMPLIED>
>  <!ATTLIST field sequence CDATA #IMPLIED>
> @@ -97,23 +109,22 @@
>  <!ELEMENT key (column*, index?, embedded?, foreign-key?, extension*)>
>  <!ATTLIST key column CDATA #IMPLIED>
>  <!ATTLIST key table CDATA #IMPLIED>
> -<!ATTLIST key serialized (true|false) #IMPLIED>
>  <!ATTLIST key delete-action (restrict|cascade|null|default|none) #IMPLIED>
>  <!ATTLIST key indexed (true|false|unique) #IMPLIED>
>  <!ATTLIST key unique (true|false) #IMPLIED>
> +<!ATTLIST key mapped-by CDATA #IMPLIED>
>  
>  <!ELEMENT value (extension*, embedded?, column*, foreign-key?, index?, unique?, extension*)>
>  <!ATTLIST value column CDATA #IMPLIED>
>  <!ATTLIST value table CDATA #IMPLIED>
> -<!ATTLIST value serialized (true|false) #IMPLIED>
>  <!ATTLIST value delete-action (restrict|cascade|null|default|none) #IMPLIED>
>  <!ATTLIST value indexed (true|false|unique) #IMPLIED>
>  <!ATTLIST value unique (true|false) #IMPLIED>
> +<!ATTLIST value mapped-by CDATA #IMPLIED>
>  
>  <!ELEMENT element (extension*, embedded?, column*, foreign-key?, index?, unique?, extension*)>
>  <!ATTLIST element column CDATA #IMPLIED>
>  <!ATTLIST element table CDATA #IMPLIED>
> -<!ATTLIST element serialized (true|false) #IMPLIED>
>  <!ATTLIST element delete-action (restrict|cascade|null|default|none) #IMPLIED>
>  <!ATTLIST element indexed (true|false|unique) #IMPLIED>
>  <!ATTLIST element unique (true|false) #IMPLIED>
> @@ -121,6 +132,7 @@
>  <!ELEMENT order (extension*, column*, index?, extension*)>
>  <!ATTLIST order column CDATA #IMPLIED>
>  <!ATTLIST order indexed (true|false|unique) #IMPLIED>
> +<!ATTLIST order mapped-by CDATA #IMPLIED>
>  
>  <!ELEMENT embedded (extension*, field*, extension*)>
>  <!ATTLIST embedded null-indicator-column CDATA #IMPLIED>
> @@ -147,9 +159,10 @@
>  <!ATTLIST query name CDATA #IMPLIED>
>  <!ATTLIST query language CDATA #IMPLIED>
>  <!ATTLIST query unmodifiable (true|false) 'false'>
> +<!ATTLIST query unique (true|false) 'false'>
> +<!ATTLIST query result-class CDATA #IMPLIED>
>  
>  <!ELEMENT extension ANY>
>  <!ATTLIST extension vendor-name CDATA #REQUIRED>
>  <!ATTLIST extension key CDATA #IMPLIED>
>  <!ATTLIST extension value CDATA #IMPLIED>
> -
> Index: src/dtd/javax/jdo/jdo.xsd
> ===================================================================
> --- src/dtd/javax/jdo/jdo.xsd	(revision 233330)
> +++ src/dtd/javax/jdo/jdo.xsd	(working copy)
> @@ -10,7 +10,12 @@
>                  </xs:choice>
>                  <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>              </xs:sequence>
> +            <xs:attributeGroup ref="attlist.jdo"/>
>          </xs:complexType>
> +    <xs:attributeGroup name="attlist.jdo">
> +        <xs:attribute name="catalog"/>
> +        <xs:attribute name="schema"/>
> +    </xs:attributeGroup>
>      </xs:element>
>      <xs:element name="package">
>          <xs:complexType>
> @@ -28,12 +33,15 @@
>      </xs:element>
>      <xs:attributeGroup name="attlist.package">
>          <xs:attribute name="name" default=""/>
> +        <xs:attribute name="catalog"/>
> +        <xs:attribute name="schema"/>
>      </xs:attributeGroup>
>      <xs:element name="interface">
>          <xs:complexType>
>              <xs:sequence>
>                  <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>                  <xs:element minOccurs="0" ref="datastore-identity"/>
> +                <xs:element minOccurs="0" ref="primary-key"/>
>                  <xs:element minOccurs="0" ref="inheritance"/>
>                  <xs:element minOccurs="0" ref="version"/>
>                  <xs:element minOccurs="0" maxOccurs="unbounded" ref="join"/>
> @@ -77,6 +85,8 @@
>                  </xs:restriction>
>              </xs:simpleType>
>          </xs:attribute>
> +        <xs:attribute name="catalog"/>
> +        <xs:attribute name="schema"/>
>      </xs:attributeGroup>
>      <xs:element name="property">
>          <xs:complexType>
> @@ -197,6 +207,7 @@
>                  <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
>                  <xs:element minOccurs="0" maxOccurs="unbounded" ref="implements"/>
>                  <xs:element minOccurs="0" ref="datastore-identity"/>
> +                <xs:element minOccurs="0" ref="primary-key"/>
>                  <xs:element minOccurs="0" ref="inheritance"/>
>                  <xs:element minOccurs="0" ref="version"/>
>                  <xs:element minOccurs="0" maxOccurs="unbounded" ref="join"/>
> @@ -258,11 +269,28 @@
>                  </xs:restriction>
>              </xs:simpleType>
>          </xs:attribute>
> +        <xs:attribute name="catalog"/>
> +        <xs:attribute name="schema"/>
>      </xs:attributeGroup>
> +    <xs:element name="primary-key">
> +        <xs:complexType>
> +            <xs:sequence>
> +                <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
> +                <xs:element minOccurs="0" maxOccurs="unbounded" ref="column"/>
> +                <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
> +            </xs:sequence>
> +            <xs:attributeGroup ref="attlist.primary-key"/>
> +        </xs:complexType>
> +    </xs:element>
> +    <xs:attributeGroup name="attlist.primary-key">
> +        <xs:attribute name="name"/>
> +        <xs:attribute name="column"/>
> +    </xs:attributeGroup>
>      <xs:element name="join">
>          <xs:complexType>
>              <xs:sequence>
>                  <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
> +                <xs:element minOccurs="0" ref="primary-key"/>
>                  <xs:element minOccurs="0" maxOccurs="unbounded" ref="column"/>
>                  <xs:element minOccurs="0" ref="foreign-key"/>
>                  <xs:element minOccurs="0" ref="index"/>
> @@ -421,6 +449,7 @@
>          <xs:attribute name="scale"/>
>          <xs:attribute name="allows-null"/>
>          <xs:attribute name="default-value"/>
> +        <xs:attribute name="insert-value"/>
>      </xs:attributeGroup>
>      <xs:element name="field">
>          <xs:complexType>
> @@ -438,7 +467,6 @@
>                  <xs:element minOccurs="0" ref="value"/>
>                  <xs:element minOccurs="0" ref="order"/>
>                  <xs:element minOccurs="0" maxOccurs="unbounded" ref="column"/>
> -                <xs:element minOccurs="0" ref="foreign-key"/>
>                  <xs:element minOccurs="0" ref="index"/>
>                  <xs:element minOccurs="0" ref="unique"/>
>                  <xs:element minOccurs="0" maxOccurs="unbounded" ref="extension"/>
> @@ -623,6 +651,14 @@
>                  </xs:restriction>
>              </xs:simpleType>
>          </xs:attribute>
> +        <xs:attribute name="serialized-element">
> +            <xs:simpleType>
> +                <xs:restriction base="xs:token">
> +                    <xs:enumeration value="true"/>
> +                    <xs:enumeration value="false"/>
> +                </xs:restriction>
> +            </xs:simpleType>
> +        </xs:attribute>
>      </xs:attributeGroup>
>      <xs:element name="map">
>          <xs:complexType>
> @@ -650,6 +686,14 @@
>                  </xs:restriction>
>              </xs:simpleType>
>          </xs:attribute>
> +        <xs:attribute name="serialized-key">
> +            <xs:simpleType>
> +                <xs:restriction base="xs:token">
> +                    <xs:enumeration value="true"/>
> +                    <xs:enumeration value="false"/>
> +                </xs:restriction>
> +            </xs:simpleType>
> +        </xs:attribute>
>          <xs:attribute name="value-type"/>
>          <xs:attribute name="embedded-value">
>              <xs:simpleType>
> @@ -667,6 +711,14 @@
>                  </xs:restriction>
>              </xs:simpleType>
>          </xs:attribute>
> +        <xs:attribute name="serialized-value">
> +            <xs:simpleType>
> +                <xs:restriction base="xs:token">
> +                    <xs:enumeration value="true"/>
> +                    <xs:enumeration value="false"/>
> +                </xs:restriction>
> +            </xs:simpleType>
> +        </xs:attribute>
>      </xs:attributeGroup>
>      <xs:element name="key">
>          <xs:complexType>
> @@ -685,14 +737,6 @@
>      <xs:attributeGroup name="attlist.key">
>          <xs:attribute name="column"/>
>          <xs:attribute name="table"/>
> -        <xs:attribute name="serialized">
> -            <xs:simpleType>
> -                <xs:restriction base="xs:token">
> -                    <xs:enumeration value="true"/>
> -                    <xs:enumeration value="false"/>
> -                </xs:restriction>
> -            </xs:simpleType>
> -        </xs:attribute>
>          <xs:attribute name="delete-action">
>              <xs:simpleType>
>                  <xs:restriction base="xs:token">
> @@ -721,6 +765,7 @@
>                  </xs:restriction>
>              </xs:simpleType>
>          </xs:attribute>
> +        <xs:attribute name="mapped-by"/>
>      </xs:attributeGroup>
>      <xs:element name="value">
>          <xs:complexType>
> @@ -737,14 +782,6 @@
>          </xs:complexType>
>      </xs:element>
>      <xs:attributeGroup name="attlist.value">
> -        <xs:attribute name="serialized">
> -            <xs:simpleType>
> -                <xs:restriction base="xs:token">
> -                    <xs:enumeration value="true"/>
> -                    <xs:enumeration value="false"/>
> -                </xs:restriction>
> -            </xs:simpleType>
> -        </xs:attribute>
>          <xs:attribute name="table"/>
>          <xs:attribute name="column"/>
>          <xs:attribute name="delete-action">
> @@ -775,6 +812,7 @@
>                  </xs:restriction>
>              </xs:simpleType>
>          </xs:attribute>
> +        <xs:attribute name="mapped-by"/>
>      </xs:attributeGroup>
>      <xs:element name="array">
>          <xs:complexType>
> @@ -801,6 +839,14 @@
>                  </xs:restriction>
>              </xs:simpleType>
>          </xs:attribute>
> +        <xs:attribute name="serialized-element">
> +            <xs:simpleType>
> +                <xs:restriction base="xs:token">
> +                    <xs:enumeration value="true"/>
> +                    <xs:enumeration value="false"/>
> +                </xs:restriction>
> +            </xs:simpleType>
> +        </xs:attribute>
>      </xs:attributeGroup>
>      <xs:element name="element">
>          <xs:complexType>
> @@ -819,14 +865,6 @@
>      <xs:attributeGroup name="attlist.element">
>          <xs:attribute name="column"/>
>          <xs:attribute name="table"/>
> -        <xs:attribute name="serialized">
> -            <xs:simpleType>
> -                <xs:restriction base="xs:token">
> -                    <xs:enumeration value="true"/>
> -                    <xs:enumeration value="false"/>
> -                </xs:restriction>
> -            </xs:simpleType>
> -        </xs:attribute>
>          <xs:attribute name="delete-action">
>              <xs:simpleType>
>                  <xs:restriction base="xs:token">
> @@ -856,6 +894,7 @@
>                  </xs:restriction>
>              </xs:simpleType>
>          </xs:attribute>
> +        <xs:attribute name="mapped-by"/>
>      </xs:attributeGroup>
>      <xs:element name="order">
>          <xs:complexType>
> @@ -982,6 +1021,15 @@
>                  </xs:restriction>
>              </xs:simpleType>
>          </xs:attribute>
> +        <xs:attribute name="unique" default="false">
> +            <xs:simpleType>
> +                <xs:restriction base="xs:token">
> +                    <xs:enumeration value="true"/>
> +                    <xs:enumeration value="false"/>
> +                </xs:restriction>
> +            </xs:simpleType>
> +        </xs:attribute>
> +        <xs:attribute name="result-class"/>
>      </xs:attributeGroup>
>      <xs:element name="unique">
>          <xs:complexType>


-- 
-------------------------------------------------------------------
Michael Watzek                  Tech@Spree Engineering GmbH
mailto:mwa.tech@spree.de        Buelowstr. 66
Tel.:  ++49/30/235 520 36       10783 Berlin - Germany
Fax.:  ++49/30/217 520 12       http://www.spree.de/
-------------------------------------------------------------------

Mime
View raw message