webForumDet fria alternativet

DTD syntax

3 svar · 469 visningar · startad av hogdefoo

hogdefooMedlem sedan jan. 200222 inlägg
#1

Jag antar att DTD:er oxå kan diskuteras här...

Jag håller på att skriva en DTD till min XML-fil.

Jag har ett element (Person), som är tomt men har lite attribut

<!ELEMENT Person EMPTY>
<!ATTLIST Person
sex (M|F) #REQUIRED
uppdaterad CDATA #REQUIRED
mailadress CDATA #IMPLIED>

attributet sex skulle jag vilja att man kan ha M, F eller mellanslag(för okänd).
Hur skriver jag ett mellanslag i min lista på godkända värden ??

attributet uppdaterad vill jag ha på formatet YYYYMMDD
kan man speca att det måste vara 8 tkn och att dom måste vara siffror ??

om jag har ett attribut som IMPLIED (ej nödvändigt)
ska då XML-taggen innehålla attributet fast inget värde eller ska attributet helt utelämnas ur XML-taggen om det man inte har något värde på (i detta fall mailadress)

jarvkloMedlem sedan juli 20013 378 inlägg
#2

Re: DTD syntax

attributet sex skulle jag vilja att man kan ha M, F eller mellanslag(för okänd).
Hur skriver jag ett mellanslag i min lista på godkända värden ??

OBS Har ej testat just detta, men funkar det med

  sex (M|F|&x020;) #REQUIRED

(där 020 är hexadecimala värdet för mellanslag) ?
Kan du inte köra med

sex (M|F) #IMPLIED

istället? Du får ju "tomt" värde om #IMPLIED-attributet utelämnas (vilket inte är *exakt* vad du frågade efter, men som jag vet funkar ;) )...

attributet uppdaterad vill jag ha på formatet YYYYMMDD
kan man speca att det måste vara 8 tkn och att dom måste vara siffror ??

Nej - Inte i en DTD, men kanske i ett XML Schema?

om jag har ett attribut som IMPLIED (ej nödvändigt)
ska då XML-taggen innehålla attributet fast inget värde eller ska attributet helt utelämnas ur XML-taggen om det man inte har något värde på (i detta fall mailadress)

Du behöver inte ha med ett #IMPLIED-deklarerat attribut i taggen
Jfr deklarationen av <hr align="..."> i xhtml 1.0

<!ELEMENT hr EMPTY>
<!ATTLIST hr
...
  align       (left|center|right) #IMPLIED
... 
   >
hogdefooMedlem sedan jan. 200222 inlägg
#3

Okej, tack för svaren :)

Lite till funderingar/undringar ;)

Om jag i min DTD har följande attribut som ser ut tex såhär:

<!ELEMENT namn EMPTY>
<!ATTLIST namn
text CDATA #REQUIRED>

kan xml-dokumentet till denna DTD se ut såhär?

<namn text="">

eller måste text innehålla minst ett tecken ??

jarvkloMedlem sedan juli 20013 378 inlägg
#4

I XML-specen (se http://www.xml.se/xml/REC-xml-19980210-sv.html#NT-AttValue ) definieras ett attributvärde som följer:

AttValue  ::= '"' ([^<&"] | Reference )* '"'  |  "'" ([^<&'] |  Reference)* "'"

Uttytt till någorlunda begriplig svenska betyder det att attributvärden består antingen av:
tecknet dubbelfnutt följt av antingen - ett tecken som inte är ett "<" eller ett "&" - eller - en referens - upprepat noll eller flera gånger och avslutat med en dubbelfnutt till

eller också samma harang med enkelfnuttar istället för dubbelfnuttar.
(referens visar sig vara en entitetsreferens på formen &någonting; )

När du deklarerar ett attribut som CDATA, gäller även regeln för hur CDATA får se ut. Och även där är det noll eller flera tecken som gäller... (se http://www.xml.se/xml/REC-xml-19980210-sv.html#sec-cdata-sect )

Svaret på din fråga är alltså:
Du bör lugnt skriva sådär - noll eller flera tecken verkar vara OK i attributvärden (sen är det ju förståss upp till XML-tolken om den hanterar det på det sättet också ;) ).

138 ms totalt · 3 externa anrop · v20260731065814-full.beb2e261
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)