LISTSERV mailing list manager LISTSERV 15.5

Help for XML-L Archives


XML-L Archives

XML-L Archives


View:

Next Message | Previous Message
Next in Topic | Previous in Topic
Next by Same Author | Previous by Same Author
Chronologically | Most Recent First
Proportional Font | Monospaced Font

Options:

Join or Leave XML-L
Reply | Post New Message
Search Archives


Subject:

Re: XML and inheritence (reuse DTDs)

From:

Daryl Luk <[log in to unmask]>

Reply-To:

General discussion of Extensible Markup Language <[log in to unmask]>

Date:

Thu, 4 May 2000 15:07:08 +0100

Content-Type:

text/plain

Parts/Attachments:

Parts/Attachments

text/plain (115 lines)


Hi Ron,

Your response to the reuse of dtd is very helpful. But I
am still struggling with multi-level of DTDs reuse. A simple
example is like that:

I have 4 DTDs and 1 xml file:
a.dtd - uses c.dtd (via parameter entity)
b.dtd - uses c.dtd also (via parameter entity)
c.dtd - standalone
d.dtd - uses a.dtd and b.dtd (as a result, reference
        c.dtd indirectly twice)

--------- a.dtd -------------
<?xml version="1.0" encoding="UTF-8"?>
<!ENTITY % c SYSTEM "c.dtd">
%c;
<!ELEMENT a (c*)>
--------- b.dtd -------------
<?xml version="1.0" encoding="UTF-8"?>
<!ENTITY % c SYSTEM "c.dtd">
%c;
<!ELEMENT b (c*)>
--------- c.dtd -------------
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT c EMPTY>
--------- d.dtd -------------
<?xml version="1.0" encoding="UTF-8"?>
<!ENTITY % a SYSTEM "a.dtd">
%a;
<!ENTITY % b SYSTEM "b.dtd">
%b;
<!ELEMENT d (a*,b*)>
--------- d.xml -------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE d SYSTEM "d.dtd">
<d><a></a></d>

XML4J 2.0.15 and XML Spy 3.0 both correctly complain
duplicated element "c". Do you know how to reuse a.dtd
and b.dtd in this case? I don't think I want to remove
c element from a.dtd or b.dtd because people may use a.dtd
(or b.dtd) in some cases while others may use d.dtd in other
cases.

Does XML schema suppose to fix this kind of design? or I
have to look somewhere eles?

(Please see if you can cc your response to [log in to unmask] as
well, thanks)


Daryl Luk

On Thu, 23 Sep 1999 11:10:28 +0200, Ronald Bourret
<[log in to unmask]> wrote:

>Steven Williams wrote:
>
>> I was wondering if XML has the ability to incorporate one DTD into
>another? This
>> is a purely theoretical question so I do not have a concrete example to
>clarify
>> my question, but say, for instance, I have a DTD for a generic order and
>now
>> want to create a DTD for a book order that uses everything in the generic
>order
>> plus extra elements/attributes. Can I do this easily? Am I trying to do
>> something that shouldn't be done?
>
>Reusing one DTD in another is fairly easy -- you simply cut and paste or
>use an external entity. For example, suppose my order DTD is in a file
>called order.dtd and that the root element is Order. In my book order DTD I
>might do something like:
>
> <!ELEMENT BookOrder (Title, Order)>
> <!ELEMENT Title (#PCDATA)>
> <!ENTITY % orderdtd SYSTEM "order.dtd">
> %orderdtd;
>
>The ENTITY statement declares the order DTD as an external parameter entity
>and the %orderdtd; statement inserts it into the current DTD. Note that I
>needed to combine my DTD to the order DTD -- that is, I referred to the
>Order element in the order DTD in my BookOrder element. All that the
>external entity mechanism does is insert something -- you still have to
>pick up the pieces yourself.
>
>A second possibility -- if you only want to add attributes to the order DTD
>-- is to declare those attributes in the internal subset and refer to the
>order DTD as the external subset. This is possible because multiple ATTLIST
>statements are legal for a single element type. For example, if I wanted to
>reuse the order DTD but add a Title attribute to the Order element, I could
>do this as follows:
>
> <!DOCTYPE Order SYSTEM "order.dtd" [
> <!ATTLIST Order
> Title CDATA #REQUIRED>
> ]>
>
>But if what you really want is inheritance in the object-oriented sense --
>that is, to reuse the Order element but rename it as, say, BookOrder and
>change it's content model a bit -- you'll have to wait a bit. This can't be
>done in DTDs, but there are a number of proposals for how to do it in XML
>schema languages. For example, take a look at the Archetype element in the
>W3C's Schema Language or similar elements in SOX. The problem with all of
>this is that most XML software doesn't support schemas yet, so you probably
>won't be able to use it. (An exception might be XML Authority from
>Extensibility -- see http://www.extensibility.com).
>
>For more info:
>
>W3C Schemas: http://www.w3.org/TR/xmlschema-1/
>SOX: http://www.w3.org/TR/NOTE-SOX/
>
>-- Ron Bourret


Back to: Top of Message | Previous Page | Main XML-L Page

Permalink



LISTSERV.HEANET.IE

CataList Email List Search Powered by the LISTSERV Email List Manager