[XML XLINK DTD] xmlns:xlink word niet toegevoegd via DTD

Pagina: 1
Acties:

  • Klaus_1250
  • Registratie: December 2000
  • Laatst online: 11:47
Ik heb een xml-document met een inline DTD. Nothing Fancy. Nu is het de bedoeling dat ik via de DTD automatisch xml-namesspaces aan elementen toevoeg, via xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink"

code:
1
2
3
4
5
6
7
8
9
10
11
<!DOCTYPE links [
<!ELEMENT links (url+)>
<!ELEMENT url (#PCDATA)>
<!ATTLIST url
    xmlns:xlink     CDATA           #FIXED "http://www.w3.org/1999/xlink"
    xlink:type        (simple)        #FIXED "simple"
    xlink:href        CDATA           #IMPLIED
    xlink:show      (new)            #FIXED "new"
    xlink:actuate  (onRequest)  #FIXED "onRequest"
    xlink:title        CDATA           #IMPLIED>
]>


Maar helaas, de M$-xml-parser valt erover dat ik geen xmlns:xlink heb verklaard waardoor alle xlink:-attributes ongeldig zijn. Ook in mozilla zie ik geen xmlns:xlink="http://www.w3.org/1999/xlink" bij url-elementen verschijnen :?

Wat doe ik verkeerd?

PS: Hij doet het natuurlijk wel goed als ik de xmlns:xlink namespace declare op het (root) links-element en deze opneem in de DTD. Maar bovenstaand oplossing (die niet wil werken) lijkt me beter/netter.

[ Voor 16% gewijzigd door Klaus_1250 op 08-10-2004 17:21 . Reden: PS: toegevoegd ]


  • Klaus_1250
  • Registratie: December 2000
  • Laatst online: 11:47
schop

  • Thyzz
  • Registratie: September 2001
  • Laatst online: 30-03 09:57

Thyzz

-=leeg=-

Als ik mij goed herinner van mijn lessen XML, hadden we er daar ook last van.
De enige manier om het te omzeilen, was om niet meer te valideren aan de DTD.
De enige manier dat we nog ergens aan konden valideren was aan een xslt.

Succes er mee

5325wp


Verwijderd

Hmm, onderstaande XML valideert perfect met bijvoorbeeld Xerces.
Lijkt mij dus vooral een bugje in de MicroSoft XML Parser.


<links>
<url xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:type="simple"
xlink:href=""
xlink:show="new"
xlink:actuate="onRequest"
xlink:title=""/>
</links>

Oh, trouwens, er is wel een MicroSoft parser die deze bug niet heeft:

"Running validation engine MSXML4.0 DOM Parser...
MSXML4.0 DOM Validation has completed."

U ziet, geen errrors bij gebruik MSXML 4 DOM Parser.

  • Klaus_1250
  • Registratie: December 2000
  • Laatst online: 11:47
Verwijderd schreef op 12 oktober 2004 @ 09:20:
Hmm, onderstaande XML valideert perfect met bijvoorbeeld Xerces.
Lijkt mij dus vooral een bugje in de MicroSoft XML Parser.


<links>
<url xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:type="simple"
xlink:href=""
xlink:show="new"
xlink:actuate="onRequest"
xlink:title=""/>
</links>

Oh, trouwens, er is wel een MicroSoft parser die deze bug niet heeft:

"Running validation engine MSXML4.0 DOM Parser...
MSXML4.0 DOM Validation has completed."

U ziet, geen errrors bij gebruik MSXML 4 DOM Parser.
Dat is ook niet het probleem. Het gaat er SPECIFIEK om dat waneer ik een DTD gebruik, en daarin opneem dat ie de xlink-namespace moet toevoegen, hij dat niet doet...

code:
1
2
3
<!ATTLIST url
    xmlns:xlink     CDATA           #FIXED "http://www.w3.org/1999/xlink"
    ...


De bovenstaande regel word dus "genegeeerd". Verwacht word dat de xml-parser aan alle url-elementen de namespace xmlns:xlink="http://www.w3.org/1999/xlink" toevoegd. Maar dat doet ie niet, tenminste de M$-parser in XP SP2 niet. LibXML heeft er overigens geen moeite mee....

[ Voor 33% gewijzigd door Klaus_1250 op 12-10-2004 14:22 ]


Verwijderd

Aha, het "probleem" is dus, dat sommige parsers jouw default waarde niet in je document zetten.

Maar dat hoeft een parser ook helemaal niet te doen, lees de spec:

"#FIXED: The attibute may or may not appear in the document. If the attribute does appear, it *MUST* match the default value; if it does not appear in the document the parser *MAY* supply the default value."

Alleen als de Parser een VALIDATING parser is, dan *moet* de default ingevuld worden door de parser.

Vermoeden: jouw parser valideert niet (of validatie staat (default ?) op "uit").

  • Klaus_1250
  • Registratie: December 2000
  • Laatst online: 11:47
Verwijderd schreef op 13 oktober 2004 @ 11:47:
Aha, het "probleem" is dus, dat sommige parsers jouw default waarde niet in je document zetten.

Maar dat hoeft een parser ook helemaal niet te doen, lees de spec:

"#FIXED: The attibute may or may not appear in the document. If the attribute does appear, it *MUST* match the default value; if it does not appear in the document the parser *MAY* supply the default value."

Alleen als de Parser een VALIDATING parser is, dan *moet* de default ingevuld worden door de parser.

Vermoeden: jouw parser valideert niet (of validatie staat (default ?) op "uit").
Dat verklaart iets. Thanx voor de tip! Alleen, het lost het probleem hier niet helemaal op. De Parsers vullen namelijk wel alle andere attributes in die een #FIXED-value hebben in de DTD. ALLEEN voor xmlns:xlink doen ze dit niet :? Ik ga eens met dat valideren spelen, en ik denk dat ik op Google nu ook wel iets verder moeten komen. Bedankt iedergeval!

[ Voor 4% gewijzigd door Klaus_1250 op 15-10-2004 13:31 ]

Pagina: 1