OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.


Help: OASIS Mailing Lists Help | MarkMail Help



   Re: DTD/Schemas with repeated structure

[ Lists Home | Date Index | Thread Index ]
  • From: ht@cogsci.ed.ac.uk (Henry S. Thompson)
  • To: justin@speedlegal.com
  • Date: Mon, 28 Aug 2000 09:01:52 +0100

Justin Lipton <justin@speedlegal.com> writes:

> Hi,
> I was wondering if anyone has come across this problem.
> We are currently using a DTD that has the following structure.
> Ignore the actual names used here as they are purely for illustrative
> purposes but assume that there is no choice but to use such a structure:
> <!ELEMENT Mammal (MammalName, MammalType)>
> 	<!ELEMENT MammalName (#PCDATA)>
> 		<!ATTLIST MammalName (latin|common) "common">
> 	<!ELEMENT MammalType (#PCDATA)>
> <!ELEMENT Fish (FishName, FishType)>
> 		<!ATTLIST FishName (latin|common) "common">
> 	<!ELEMENT FishType (#PCDATA)>
> <!ELEMENT Bird (BirdName, BirdType)>
> 		<!ATTLIST BirdName (latin|common) "common">
> 	<!ELEMENT BirdType (#PCDATA)>
> Image dozens of elements like this!
> Is there a way (either with a Schema or a DTD) to generalise this type of
> structure such that:
> <!ELEMENT * (*Name, *Type)>
> 		<!ATTLIST *Name (latin|common) "common">
> 	<!ELEMENT *Type (#PCDATA)>

As several respondants have pointed out, there are other element
structures which might suit your needs better.  If you _really_ want the 
above structure, XML Schema [1] provides a mechanism (equivalence
classes) which at least makes clear the relationship:

<element name="animal" abstract="true" type="animalType"/>

<complexType name="animalType" abstract="true">
  <element ref="name"/>
  <element ref="type"/>

<element name="name" abstract="true">
 <complexType base="string" derivedBy="extension">
  <attribute name="form" use="default" value="common">
    <enumeration value="latin"/>
    <enumeration value="common"/>

<element name="type" type="string" abstract="true"/>

<element name="Mammal" equivClass="animal"/>
<element name="MammalName" equivClass="name"/>
<element name="MammalType" equivClass="type"/>

<element name="Bird" equivClass="animal"/>
<element name="BirdName" equivClass="name"/>
<element name="BirdType" equivClass="type"/>

This would have the advantage that when XPath is schema-aware, you
will be able to query all the animal names, regardless of phylum.

  Henry S. Thompson, HCRC Language Technology Group, University of Edinburgh
          W3C Fellow 1999--2001, part-time member of W3C Team
     2 Buccleuch Place, Edinburgh EH8 9LW, SCOTLAND -- (44) 131 650-4440
	    Fax: (44) 131 650-4587, e-mail: ht@cogsci.ed.ac.uk
		     URL: http://www.ltg.ed.ac.uk/~ht/


News | XML in Industry | Calendar | XML Registry
Marketplace | Resources | MyXML.org | Sponsors | Privacy Statement

Copyright 2001 XML.org. This site is hosted by OASIS