[
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">
<sequence>
<element ref="name"/>
<element ref="type"/>
</sequence>
</complexType>
<element name="name" abstract="true">
<complexType base="string" derivedBy="extension">
<attribute name="form" use="default" value="common">
<simpleType>
<enumeration value="latin"/>
<enumeration value="common"/>
</simpleType>
</attribute>
</complexType>
</element>
<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.
ht
--
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/
|