![]() |
XML: Namespaces in der DTD
Vielleicht hat ja schon jemand ähnliche Probleme gehabt:
Hy, bei der Deklaration des Namespaces gemeinsam mit der Verifizierung mittels DTD tritt bei mir ein Problem auf. Zuerst einmal mein xml File gemeinsam mit der zugehörigen DTD: XML: <?xml version='1.0' encoding="ISO-8859-1"?> <!DOCTYPE Pizza SYSTEM "M2A2_3.dtd"> <Pizza xmlns:mps = "http://www.marios_pizza_service.at"> <Name>Quadra Cheese</Name> <Groesse gr = "klein"> <Bezeichner>Kleine Pizza</Bezeichner> <Belag Einwaage = "130">Schinken</Belag> <Belag Einwaage = "230">Kaese</Belag> <Belag Einwaage = "60">Tomaten</Belag> </Groesse> <Groesse gr = "mittel"> <Bezeichner>normale Pizza</Bezeichner> <Belag Einwaage = "180">Schinken</Belag> <Belag Einwaage = "330">Kaese</Belag> <Belag Einwaage = "90">Tomaten</Belag> </Groesse> </Pizza> DTD: <!ELEMENT Pizza (Name, Groesse+)> <!ATTLIST Pizza xmlns:mps CDATA #FIXED "http://www.marios_pizza_service.at"> <!ELEMENT Name (#PCDATA)> <!ELEMENT Groesse (Bezeichner, Belag*)> <!ATTLIST Groesse gr (klein|mittel|gross) #REQUIRED> <!ELEMENT Bezeichner (#PCDATA)> <!ELEMENT Belag (#PCDATA)> <!ATTLIST Belag Einwaage CDATA #REQUIRED> Zuerst einmal bin ich mir nicht sicher ob das Attribut für den namespace im DTD wirklich so richtig definiert ist. Allerdings validieren beide obigen Files. Die Probleme beginnen erst, wenn ich bei einem nachfolgenden Tag das Namespacekürzel davor setzten will. Natürlich muß das Tag dann sowohl im xml wie auch im dtd File mit dem prefix ausgezeichnet werden sonst kommt ja die Meldung "xxx tag erwartet". Zeichne ich aber auch nur einen Tag mit mps: aus, so kommt die Fehlermeldung "Referenz auf nicht deklarierten Namesspace-Präfix mps.". Mittlerweile habe ich die unterschiedlichsten Varianten durchpropiert bekomme aber die Validierung mit Tag für Namespace-Prefix nicht hin. Weiters habe ich in einigen XML Büchern nachgesehen und folgende Lösungen gefunden: <Pizza xmlns="http://www.marios_pizza_service.at"> hier wird der Defaultnamensraum für alle enthaltenen Elemente definiert, oder auch <mpr:Pizza xmlns:mpr="http://www.marios_pizza_service.at">. Beide führen jedoch im XML Writer zu Fehlermeldungen. Das einzige was funktioniert ist: <Pizza xmlns:mpr="http://www.marios_pizza_service.at"> gemeinsam mit <!ATTLIST Pizza xmlns:mpr CDATA #FIXED "http://www.marios_pizza_service.at" > in der DTD (diese Variante wurde auch in den Büchern in der DTD gezeigt). Ich habe die obigen Versuche auch mit dem XML Spy auspopiert, und da validieren allerdings alle 3 Varianten. Alternativ habe ich vom XML Spy auch eine DTD generieren lassen, und hier hat er folgendes generiert: <!ATTLIST mps:Pizza xmlns:mps CDATA #REQUIRED > diese Zeile führt aber im XML Writer sofort zu einer Fehlermeldung. In den Büchern ist übrigens erwähnt, dass die Verwendung von Namespaces und DTD zu Problemen führen kann, da die Definition der DTDs nicht wirklich die Namespaces berücksichtigt. Irgendwie stehe ich jetzt an, welche der obigen Varianten wirklich korrekt ist, da XML Spy hat dser einen eigenen XML Parser?) und XML Writer (verwendet Internet Explorer 5.5 als XML Parser) unterschiedliche Ergebnisse liefern. Gibt es eigentlich noch andere unabhängige XML Parser? Kann es sein, dass der Internet Explorer 5.5 hier ein Problem mit dem Namespace hat? |
Alle Zeitangaben in WEZ +2. Es ist jetzt 23:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag