[XML-SIG] DOCTYPEs question with 4DOM
Derek Fountain
derekfountain at yahoo.co.uk
Wed Jul 7 09:58:12 CEST 2004
On Wednesday 07 July 2004 10:04, Thomas B. Passin wrote:
> Derek Fountain wrote:
> > According to my book (Inside XML, New Riders) a document type declaration
> > can have one of several forms:
> >
> > <!DOCTYPE rootname [DTD]>
> > <!DOCTYPE rootname SYSTEM url>
> > <!DOCTYPE rootname SYSTEM url [DTD]>
> > <!DOCTYPE rootname PUBLIC identifier>
> > <!DOCTYPE rootname PUBLIC identifier [DTD]>
>
> Not quite ... the XML Rec requires a system identifier even when there
> is a PUBLIC keyword and identifier.
Um, I was just quoting the book! Since my example doesn't have a DTD I was
just after the first option without the optional DTD.
> > I want to create a doctype like this:
> >
> > <!DOCTYPE test>
> >
> > and this:
> >
> > docType = implementation.createDocumentType( "1", "test", "2" )
> >
> > produces:
> >
> > <!DOCTYPE storage PUBLIC "test" "2">
> >
> > with the "1" nowhere to be seen.
> >
> > I have no idea what is going on. Can someone explain? Thanks! :o)
>
> I can see how it would not know what to do with the "1", since it cannot
> be a legal element name,
Fair point, but it's actually the same with any legal element name.
> but some of those outputs look pretty strange,
> don't they? But what version of the PyXML package are you using? I
> just created document types like yours and they at least had the proper
> sytem and public IDs (I did not serialize anything, though)
PyXML-0.8.3 on SUSE-9.1. If you didn't serialize anything, how are you seeing
the system and public IDs?
I'm totally confused. It seems the only way to get a DOCTYPE with the correct
root element and no SYSTEM or PUBLIC ids is to provide a non blank PUBLIC id:
docType = implementation.createDocumentType( None, "xxx", None )
document = implementation.createDocument( None, "test", docType )
which gives:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE test>
<test>
...
The "xxx" seems to be ignored, but passing None or a blank string in its place
means the serialisation doesn't produce a DOCTYPE line at all.
--
> eatapple
core dump
More information about the XML-SIG
mailing list