I need to build an XML file structure so a client can import data to
one of our systems. Totally new to XML, I learned about Namespaces and
DTD, and built a nice spec using them. Now I am trying to use XML
Schemas to tell more about what kind of data are allowed on each
element/attribute, but I can't understand how to mix Namespaces and
Schemas.
Can anyone give me tips, starting points, about how to specify the
Schema for the following example XML?
<library xmlns:book="book" xmlns:author="author">
<book:book>
<book:title>Example</book:title>
<book:pages>150</book:pages>
</book:book>
<author:author>
<author:title>Mr</author:title>
<author:name>Julio Nobrega</author:name>
</author:author>
</library>
I want to say that the <title> tag has different validation rules
depending on the namespace...
Thank you!
--
Julio Nobrega
http://www.inerciasensorial.com.br
Here are my rules for the use of namespaces:
Rule 1 of namespace: Don't
Rule 2 of namespaces: Not yet
Rule 3 of namespaces: only when you need to
Thus your xml would look like:
<library>
<book>
<title>here</title>
<author>there</author>
</book>
<author>
<title>here</title>
<name>there</name>
</author>
</library>
xml Schema is nice because it allows you to define structure that may
be called the same, but is used in different places. e.g.:
You wanted the library/book/title element to have an ISBN attribute,
but the library/book/title element to have a number attribute (i.e.
this is the author's Nth book). Any good schema reference will tell
you how to define children element of the same name but of different
(complex/simple) types.
In conclusion, that the title element is a child of the book element
implies that it is a "book title", there's no need to define different
namespaces.
take a look at http://builder.com.com/5100-6389-1046618.html for more
on namespaces.
><library xmlns:book="book" xmlns:author="author">
Namespace names are supposed to be absolute URLs.
-- Richard
In other words, the namespace URI has to be unique and that's it. URL's, by definition, are unique (all URL's are URI's but not vice versa) therefore, acceptable as namespace names. Generally, one simply uses a URL for the namespace name, however, this URL doesn't need to point to any actual document. Convention and general usefullness suggests placing the schema or DTD of said namespace at said URL is a good idea, and I concur.
nntp://news.cis.ohio-state.edu/comp.text.xml/<dimi0t$2v4l$1...@pc-news.cogsci.ed.ac.uk>
[comp.text.xml]
>Actually, namespaces are designated as URI's not URL's.
I know that. I was trying not to obscure the point with subtleties.
-- Richard
ht
[1] http://www.w3.org/TR/xmlschema-0/
--
Henry S. Thompson, HCRC Language Technology Group, University of Edinburgh
Half-time member of W3C Team
2 Buccleuch Place, Edinburgh EH8 9LW, SCOTLAND -- (44) 131 650-4440
Fax: (44) 131 650-4587, e-mail: h...@inf.ed.ac.uk
URL: http://www.ltg.ed.ac.uk/~ht/
[mail really from me _always_ has this .sig -- mail without it is forged spam]
Thank you Chris. I solved the problem by not using namespaces on my
own created file :)
Actually, I gave up on XML Schema and started using RELAX NG, but
that's another topic... not that I know how to use namespaces on RELAX
NG either, but following your advice I am not even looking how to do
it, for now :)