[XML-DEV Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

RE: RE: Abstraction in Science, Mathematics, Software,and Mark

  • From: "Costello, Roger L." <costello@mitre.org>
  • To: "xml-dev@lists.xml.org" <xml-dev@lists.xml.org>
  • Date: Sat, 12 Mar 2011 05:34:38 -0500

RE:  RE: Abstraction in Science
Hi Stephen,

> Are you suggesting or even hinting that it should be possible
> to define a type whose contents are types rather than elements?

Funny you should ask! Yes!

A couple weeks ago I pitched that very idea on the xmlschema-dev list:

           Data Abstraction
Creating a User-Defined Data Type that is a 
  Collection of User-Defined simpleTypes

Decoupling the definition of a simpleType from an element or attribute declaration is very useful. For example, here I define a family name simpleType:

    <xs:simpleType name="Family-name">
        <xs:restriction base="xs:string">
            <xs:minLength value="1" />
            <xs:maxLength value="100" />
            <xs:pattern value="[a-zA-Z' \.-]+" />

Now that it is defined, I can declare any number of elements or attributes to be of that type; for example: 

    <xs:element name="Family-name" type="Family-name" />

    <xs:element name="Surname" type="Family-name" />

    <xs:element name="Last-name" type="Family-name" />

That's nice! 

The definition of the user-defined simpleType and the declaration of the elements are completely decoupled. The Family-name simpleType is a reusable data type.

Suppose I define 2 more simpleTypes. A simpleType for Middle initial: 

    <xs:simpleType name="Middle-initial">
        <xs:restriction base="xs:string">
            <xs:length value="1" />
            <xs:pattern value="[A-Z]+" />

And a simpleType for Given name:

    <xs:simpleType name="Given-name">
        <xs:restriction base="xs:string">
            <xs:minLength value="1" />
            <xs:maxLength value="100" />
            <xs:pattern value="[a-zA-Z' \.-]+" />

Now there are 3 simpleTypes. Collectively, they make up a user-defined "Name" data type.  

Of course, this Name data type is not a simpleType. It is made up of three simpleTypes. 

XML Schema does not have a way to express this so I propose a new capability, <xs:crossProduct>. Here is how to define the Name data type:

    <xs:crossProduct name="Name">
        <xs:componentType ref="Given-name" />
        <xs:componentType ref="Middle-initial" />
        <xs:componentType ref="Family-name" />

That defines a data type that is a cross product of 3 simpleTypes.

Now that it is defined, I can declare any number of elements to be of that data type; for example:

    <xs:element name="Name" type="Name">
        <xs:element name="First" type="Name.Given-name" />
        <xs:element name="MI" type="Name.Middle-initial" />
        <xs:element name="Last" type="Name.Family-name" />

Here's a different assignment of element names to the data type and its components: 

    <xs:element name="Customer" type="Name">
        <xs:element name="Given" type="Name.Given-name" />
        <xs:element name="MI" type="Name.Middle-initial" />
        <xs:element name="Surname" type="Name.Family-name" />

Here's how the latter would appear in an XML instance document:


The important thing to notice is that the data type definition is completely decoupled (abstracted) from the assignment of element names to the component fields of the data type.

To recap: just like xs:simpleType enables the creation of reusable (simple) data types, xs:crossProduct enables the creation of reusable (cross product) data types.



[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index]


Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
First Name
Last Name
Subscribe in XML format
RSS 2.0
Atom 0.3

Stylus Studio has published XML-DEV in RSS and ATOM formats, enabling users to easily subcribe to the list from their preferred news reader application.

Stylus Studio Sponsored Links are added links designed to provide related and additional information to the visitors of this website. they were not included by the author in the initial post. To view the content without the Sponsor Links please click here.

Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.