DTD - Warum geht das nicht ....
fredy
- xml
0 Calocybe0 fredy0 Thomas J.S.0 Calocybe0 Thomas J.S.0 Calocybe0 Thomas J.S.0 Calocybe
Hi XML-Fans!
Ich möchte in einer DTD definieren, daß man innerhalb eines
Autor-Tag entweder
den Vor und (!) Nachnamen angeben muß:
<autor>
<first-name>fred</first-name>
<last-name>xyz</last-name>
</autor>
oder nur den Namen angeben muß:
<autor>
<name>fred xyz</name>
</autor>
oder einfach nur PCDATA angeben kann:
<autor>das ist irgendein text</autor>
Ich hab's mit folgender Coderierung versucht - klappt aber nicht:
<!ELEMENT author ( (#PCDATA) (first-name,last-name) (name) )>
Für jeden Hinweiß wäre ich sehr dankbar ...
Grüße
fredy
Tag fredy!
Erstmal Deine zweite Frage (fuer die Du uebrigens nicht haettest einen extra Thread aufmachen muessen):
Wenn ich in einer DTD
<!ELEMENT book (title, author, price)>
angebe, dann muß zuerst title dann author und dann price kommen, oder ?
Richtig.
Wie codiere ich diese Anweisung, wenn die Reihenfolge egal sein soll ?
Wenn nicht alle vorhanden sein muessen, oder manche auch mehrmals vorhanden sein duerfen, einfach
<!ELEMENT book (title author price)>
Wenn aber jedes der drei Element genau einmal enthalten sein soll, dann faellt mir leider nichts anderes ein, als alle sechs Moeglichkeiten als Choice aufzuzaehlen, was man etwas vereinfacht dann als
<!ELEMENT book (
(title, ((author, price) (price, author)))
(author, ((title, price) (price, title)))
(price, ((title, author) (author, title)))
)>
schreiben kann.
<autor>
<first-name>fred</first-name>
<last-name>xyz</last-name>
</autor>
oder nur den Namen angeben muß:
<autor>
<name>fred xyz</name>
</autor>
oder einfach nur PCDATA angeben kann:
<autor>das ist irgendein text</autor>Ich hab's mit folgender Coderierung versucht - klappt aber nicht:
<!ELEMENT author ( (#PCDATA) (first-name,last-name) (name) )>
Eine Choice zwischen Mixed content und Element content kannst Du nicht machen. Du kannst also nur eine Choice zwischen den ersten beiden Moeglichkeiten bauen, oder Du machst halt
<!ELEMENT author (#PCDATA first-name last-name name)*>
was Du aber sicherlich nicht willst, da dann ja viele der Restriktionen einfach wegfallen. Wozu Du die letzte Moeglichkeit <autor>das ist irgendein text</autor> brauchst, ist mir aber ohnehin nicht ganz klar, sie ist ja im Endeffekt dasselbe wie die zweite.
So long
Danke!
Wozu Du die letzte Moeglichkeit <autor>das ist irgendein >>text</autor> brauchst, ist mir aber ohnehin nicht ganz klar, sie >>ist ja im Endeffekt dasselbe wie die zweite.
Grüße
fredy
ps: Codt war auch ein Theorie-Mensch als er RDBMS definierte ...
Hallo Roland!
<!ELEMENT book (
(title, ((author, price) (price, author)))
(author, ((title, price) (price, title)))
(price, ((title, author) (author, title)))
)>
schreiben kann.
Das sollte auch so gehen:
<!ELEMENT book (title, (autor & price) autor, (title & price) price, (title & autor))>
oder Du machst halt
<!ELEMENT author (#PCDATA first-name last-name name)*>
Ja genau. Und mir meckert der dämliche dtd Parser von Excelon, daß das nicht valid ist.
»»Wozu Du die letzte Moeglichkeit <autor>das ist irgendein text</autor> brauchst, ist mir aber ohnehin nicht ganz klar, sie ist ja im Endeffekt dasselbe wie die zweite.
Ne, ist nicht das selbe.
Ich habe genau dieses Problem: in der einen xml Datei habe ich innerhalb von "<autor>" nur andere Elemente; was der DTD entspricht, in der anderen xml Datei habe ich aber im "<autor>" nur Text, da aber die beiden Dateien am server als eine behandelt werden brauche ich den 'mixed content'. Na ja ...
Grüße
Thomas
Hi Thomas!
<!ELEMENT book (title, (autor & price) autor, (title & price) price, (title & autor))>
Ampersand? Ist mir nicht bekannt. Wo steht etwas darueber? Ich kenne eigentlich nur das hier:
[47] children ::= (choice seq) ('?' '*' '+')?
[48] cp ::= (Name choice seq) ('?' '*' '+')?
[49] choice ::= '(' S? cp ( S? '' S? cp )* S? ')' [ VC: Proper Group/PE Nesting ]
[50] seq ::= '(' S? cp ( S? ',' S? cp )* S? ')' [ VC: Proper Group/PE Nesting ]
aus der XML Spec Kapitel 3.2.1.
Ja genau. Und mir meckert der dämliche dtd Parser von Excelon, daß das nicht valid ist.
Dann braucht der wohl nen Bugfix. ;-)
»»Wozu Du die letzte Moeglichkeit <autor>das ist irgendein text</autor> brauchst, ist mir aber ohnehin nicht ganz klar, sie ist ja im Endeffekt dasselbe wie die zweite.
Ne, ist nicht das selbe.
Syntaktisch natuerlich nicht, aber der Informationsgehalt ist doch derselbe, oder?
Ich habe genau dieses Problem: in der einen xml Datei habe ich innerhalb von "<autor>" nur andere Elemente; was der DTD entspricht, in der anderen xml Datei habe ich aber im "<autor>" nur Text, da aber die beiden Dateien am server als eine behandelt werden brauche ich den 'mixed content'. Na ja ...
Mmh.. Bist Du sicher, dass Du da nicht Dinge zusammenwuerfelst, die nicht zusammen gehoeren? Naja, ich weiss ja nicht, um was es konkret geht.
So long
Hallo Roland!
<!ELEMENT book (title, (autor & price) autor, (title & price) price, (title & autor))>
Ampersand? Ist mir nicht bekannt. Wo steht etwas darueber?
In der SGML-Spez.
B.4.2.2 Connectors and Occurence Indicators
... the ampersand ("&"), which is the "and" connector should be used. It indicates that all of the GIs [general identifiers] in the model group must occur, but in any order.
<!ELEMENT titlepage (title & autor & publisher) >
-----
Aber auch hier steht das: http://www.w3.org/TR/html4/intro/sgmltut.html#h-3.3.3
» aus der XML Spec Kapitel 3.2.1.
Gute Frage, warum das in der XML-Spez. nicht steht?
Mmh.. Bist Du sicher, dass Du da nicht Dinge zusammenwuerfelst, die nicht zusammen gehoeren?
;-) ja ich bin sicher ;-)
Grüße
Thomas
Hi again!
B.4.2.2 Connectors and Occurence Indicators
... the ampersand ("&"), which is the "and" connector should be used. It indicates that all of the GIs [general identifiers] in the model group must occur, but in any order.
Nun ja, XML ist nun mal nur ein Subset von SGML. Und das & haben sie offenbar nicht uebernommen. Praktisch waer's natuerlich schon. Vielleicht bauen sie es ja in Version 1.1 ein.
So long
Hallo Roland!
B.4.2.2 Connectors and Occurence Indicators
... the ampersand ("&"), which is the "and" connector should be used. It indicates that all of the GIs [general identifiers] in the model group must occur, but in any order.Nun ja, XML ist nun mal nur ein Subset von SGML. Und das & haben sie offenbar nicht uebernommen. Praktisch waer's natuerlich schon. Vielleicht bauen sie es ja in Version 1.1 ein.
Falls du das hier noch liest:
Habe gerade nachgelesen und zumindest folgendes heruasgefunden:
a & b ist nur in SGML erlaubt, im XML muss es durch (a, b) (b, a) nachgebildet werden. Das "warum" konnte ich bisher nicht in Erfahrung bringen.
wie dem auch, ich wollte es nur sagen.
Grüße
Thomas
Hi!
Falls du das hier noch liest:
Yepp, gelesen. ;-)
So long