- From: Benjamin C. Chang <Ben.Chang@oracle.com>
- Date: Thu, 07 Mar 2002 11:30:26 -0800
- To: Peter Seiderer <Peter.Seiderer@ciselant.de>
- CC: www-dom@w3.org
- Message-ID: <3C87BFD2.6C058FE1@oracle.com>
Peter Seiderer wrote:
> On Wed, Mar 06, 2002 at 04:11:24PM -0800, Benjamin C. Chang wrote:
> > Peter Seiderer wrote:
> >
> > > Hello,
> > > I am not shure about how a given XML Schema woul be represented as a
> > > Abstract Schemas Object Model, see the following example:
> > >
> > > XML Schema example:
> > >
> > > <?xml version="1.0" encoding="iso-8859-1"?>
> > >
> > > <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
> > >
> > > <xsd:element name="ElementA" type="TypeA"/>
> > >
> > > <xsd:complexType name="TypeA">
> > > <xsd:sequence>
> > > <xsd:element name="ElementB1" type="TypeB" minOccurs="1" maxOccurs="1"/>
> > > <xsd:element name="ElementB2" type="TypeB" minOccurs="0" maxOccurs="1"/>
> > > </xsd:sequence>
> > > <xsd:attribute name="AttributeA1" type="xsd:string"/>
> > > <xsd:attribute name="AttributeA2" type="xsd:string"/>
> > > </xsd:complexType>
> > >
> > > <xsd:complexType name="TypeB">
> > > <xsd:sequence>
> > > <xsd:element name="Text" type="xsd:string"/>
> > > </xsd:sequence>
> > > </xsd:complexType>
> > >
> > > </xsd:schema>
> > >
> > > Abstract Schemas Object Model:
> > >
> > > ASElementDecl example = {
> > > strictMixedContent = false;
> > > elemntType = STRING_DATATYPE;
> > > isPCDataOnly = false;
> > > contentType = ELEMENTS_CONTENTTYPE;
> > > ASContentModel = exE
> > > ASAttributeDecls = null;
> > > }
> >
> > >
> > >
> > > ASContentModel exE = {
> > > listOperator = AS_SEQUENCE;
> > > minOccurs = 1;
> > > maxOccurs = 1;
> > > subModeld = {(ASElementDecl ElementA)};
> > > }
> > >
> > > ASElementDecl ElementA = {
> > > strictMixedContent = false;
> > > elementType = STRING_DATATYPE;
> > > isPCDataOnly = false;
> > > contentType = ELEMENTS_CONTENTTYPE;
> > > ASContentModel = TypeA;
> > > ASAttributeDecls = null;
> > > }
> > >
> > > ASContentModel TypeA = {
> > > listOperator = AS_SEQUENCE;
> > > minOccurs = 1;
> > > maxOccurs = 1;
> > > subModels = {(ASElementDecl ElementB1),
> > > (ASElementDecl ElementB2)};
> > > }
> > >
> > > ASElementDecl ElementB1 = {
> > > strictMixedContent = false;
> > > elementType = STRING_DATATYPE;
> > > isPCDataOnly = false;
> > > contentType = ELEMENTS_CONTENTTYPE;
> > > ASContentModel = TypeB;
> > > ASAttributeDecls = null;
> > > }
> > >
> > > ASContentModel TypeB = {
> > > listOperator = AS_SEQUENCE;
> > > minOccurs = 1;
> > > maxOccurs = 1;
> > > subModels = {(ASElementDecl Text)};
> > > }
> > >
> > > - Q1: But how is Elemnt B2 represented, because ASContentModel TypeB has the
> > > false minOccurs, maxOccurs values?
> >
> > TypeA should be:
> >
> > ASContentModel TypeA = {
> > contentModelType = SEQUENCE_CM;
> > minOccurs = 1;
> > maxOccurs = 1;
> > subModels = {(ASContentModel exB1), (ASContentModel exB2),
> > (ASAttributeDecl attr1), (ASAttributeDecl attr2)};
> > };
> >
> > ASContentModel exB1 =
> > {
> > contentModelType = SEQUENCE_CM;
> > minOccurs = 1;
> > maxOccurs = 1;
> > subModels = {(ASElementDecl B1)};
> > }
> >
> > ASElementDecl B1 =
> > {
> > ...
> > ASContentModel = TypeB;
> > ...
> > }
> >
> > ASContentModel exB2
> > {
> > contentModelType = SEQUENCE_CM;
> > minOccurs = 0;
> > maxOccurs = 1;
> > subModels = {(ASElementDecl B2)};
> > }
> >
> > ASElementDecl B2 =
> > {
> > ...
> > ASContentModel = TypeB;
> > ...
> > }
> >
>
> I understand: this is done via an indirection using always ASContentModel
> instead of direct link to ASElementDecl.
>
> >
> >
> > >
> > >
> > > ASElementDecl ElementB2 = {
> > > strictMixedContent = false;
> > > elementType = STRING_DATATYPE;
> > > isPCDataOnly = false;
> > > contentType = ELEMENTS_CONTENTTYPE;
> > > ASContentModel = TypeB;
> > > ASAttributeDecls = null;
> > > }
> > >
> > > - Q2: Where to store the ASAttributeDecl AttributeA1 and AttributeA2 defined
> > > in the complexType TypeA, but in AS only ASElementDecl has the attribute
> > > ASAttributeDecls?
> >
> > subModels contains a list of ASObjects, so in addition to ASElementDecl,
> > it can also contain ASAttributeDecls (see above).
>
> But for which purpose is then the attribute ASAttributecls in ASElementDecl?
>
> interface ASElementDecl : ASObject {
> ...
> attribute ASNamedObjectMap ASAttributeDecls;
> ...
> }
A simpler example that could illustrate why ASAttributeDecls is on
ASElementDecl would be the following:
<!ELEMENT spoken #PCDATA>
<!ATTLIST spoken lang CDATA #REQUIRED>
where lang would be the ASAttributeDecl.
>
>
> Should the attribute ASAttributeDecls moved form ASElementDecl to
> interface ASContentModel?
>
> I am not shure if this is different in the next version of AS, because
> I see you are using already different names (contentModelType instead of
> listOperator, SEQUENCE_CM instead of AS_SEQUENCE) as opposed the last
> public available version:
> http://www.w3.org/TR/2002/WD-DOM-Level-3-ASLS-20020114
Another version is available internally, but ASAttributeDecls is still on
ASElementDecl. This other version will be made public soon by Philippe.
>
>
> Thank you for you last answer, it helped a lot....
> Peter Seiderer
Sure, no prob, any further clarifications, feel free to email.
Thx,
Ben
>
>
> --
> ------------------------------------------------------------------------
> Peter Seiderer E-Mail: Peter.Seiderer@ciselant.de
Received on Thursday, 7 March 2002 14:30:29 UTC