Hallo,
ich benutze OpenXML um eine SVG Datei zu parsen. Der Parser legt beim Validieren eine Liste an, über die man mittels der Funktion GetElementById(IdString) auf jedes Element im DOM zugreifen kann. Das tut er aber nur, wenn über eine DTD ein Attribut von Typ ID definiert wird, da er dann auch die Referenzen darauf überprüft. Tritt ein Fehler beim Validieren auf, wird die Liste gelöscht, ansonsten steht sie danach zur weiteren Verfügung. Ich habe die offizielle DTD von W3C angegeben: http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd
Leider bestehen meine, mit den Open Source Programm Inkscape erzeugten, SVG-Dateien die Validierung nicht. Ich vermute es liegt am Parser, denn es kann ja kaum an der DTD liegen und die SVG-Dateien werden auch von allen Programmen angenommen. Den eigentlichen Fehler zu finden sehe ich keine Chance und ich will ja eigentlich nicht validieren, sondern den Parser nur sagen, das jedes Element ein Attribut mit den Namen id vom Typ ID hat, damit er die Liste anlegt und ich dann die Funktion GetElementById benutzen kann. Meine Idee ist es deshalb, eine sehr einfache DTD mitzugeben die nur das id Attribut definiert. Ich habe hier schon etwas dazu gefunden:
http://aktuell.de.selfhtml.org/artikel/xml/gruppierung1/
Ich bin ein totaler Anfänger in Sachen DTD und verstehe das Ganze wohl nicht richtig. Alle meine Versuche sind bisher gescheitert. Der Validator hat immer etwas zu meckern. Z.B.:
<!DOCTYPE svg [
<!ELEMENT svg ANY>
<!ATTLIST svg id ID #REQUIRED>
]>
Hier kommt der Fehler, dass es undefinierte Attribute gibt. Wie definiere ich aber, das es außer id noch beliebig andere Attribute geben kann? Oder anderst gefragt: Wie definiere ich ausschließlich das id Attribut und lasse alles ander offen?
Ich hoffe ich konnte mein Anliegen verständlich darlegen und würde mich über jede Hilfe freuen.
Gruß Bernd