XMLGrundernaValideringMer om ELEMENT
[ Hem ] Allmänt ASP XML SQL ADO HTML CSS VB Java Design Karta
Grunderna XSL Dynamiska sidor XML i praktiken

Mer om ELEMENT

Först en kort definition

PCDATA, eller som det skrivs i DTD:n #PCDATA, betyder Parsed Character DATA, d.v.s tolkad textdata
CDATA betyder Character DATA, d.v.s otolkad textdata

Mer om DTD

ANY

Man kan släppa alla tyglar och säga att man godkänner vad skit som helst med ordet ANY i DTD:n. Filen måste dock fortfarande vara well-formed, och eventuella tags måste finnas deklarerade. Nedan visas ett exempel på en XML fil som använder sig av en intern DTD som godkänner ostrukturerad data:

xml9_1.xml

<?xml version="1.0" encoding="iso-8859-1" ?> 
<!DOCTYPE data [
   <!ELEMENT data ANY>
   <!ELEMENT extra (#PCDATA)>
]>
<data>
   Här får jag skriva lite vad jag vill.
   Med <extra>taggar</extra> och vad jag vill...
   Detta eftersom jag sagt att allt (ANY) duger.
</data>
Om du har IE 5.0 eller nyare kan du klicka här för att se filen i praktiken

OBS. Jag använder ibland interna DTD för att förenkla dokumentationen. Helst skall man dock ha en extern DTD eftersom detta gör det lätta att validera flera filer.

MIXED MODE XML

Man kan även skapa s.k. Mixed Mode XML. Detta betyder att man tillåter "fri text" men eventella taggar i texten måste begränsas. I nedanstående innehåller <data> fri text men om vi skall sätta in några xml tags så måste dessa vara antingen <firstname> eller <lastname>. Den sista <data> noden kommer att förorsaka valideringsproblem eftersom vi inte sagt att data noder kan innehålla extra noder. firstname och lastname är däremot ok.

xml9_2.xml

<?xml version="1.0" encoding="iso-8859-1" ?> 
<!DOCTYPE person [
   <!ELEMENT person (data*)>
   <!ELEMENT data (#PCDATA|lastname|firstname)*>
   <!ELEMENT lastname (#PCDATA)>
   <!ELEMENT firstname (#PCDATA)>
   <!ELEMENT extra (#PCDATA)>
]>
<person>
   <data>
     Hans förnamn är <firstname>Kalle</firstname> och efternamnet är
     <lastname>Anka</lastname>
   </data>
   <data>
     Jag vet bara hans efternamn, som är <lastname>Persson</lastname>
   </data>
   <data>
     Vet inte alls vad han heter
   </data>
   <data>
     Denna rad <extra>innehåller</extra> fel.
   </data>
</person>
Om du har IE 5.0 eller nyare kan du klicka här för att se filen i praktiken

Detta fungerar så att vi säger att data taggen kan innehålla antingen PCDATA (tolkad text), firstname eller lastname. Observera att man även får använda både firstname och lastname.

Denna metod kan vid första anblicken bryta mot hela XML:s grundidé, men om vi ser den synvinkeln att såväl en människa som en dator skall kunna läsa texten så kan det vara en god idé. Ur XML:s synvinkel är det endast de två namntagsen som är av betydelse, och dessa är lätta att plocka ut ur sammanhanget.

Vi kan gärna jämföra med webben och sökningar på webben. Tag en titt på nedanstående mixed mode XML fil, tag sedan en funderare över hur lyckade dina sökningar på webben brukar vara. Om vi strukturerar det som behövs och skippar resten, kommer vi ändå att få en bättre struktur än på webben.

xml9_3.xml

<?xml version="1.0" encoding="iso-8859-1" ?> 
<!DOCTYPE cars [
   <!ELEMENT cars (data*)>
   <!ELEMENT data (#PCDATA|make|model|year|contact)*>
   <!ATTLIST data type (sale|buy) #REQUIRED>
   <!ELEMENT make (#PCDATA)>
   <!ELEMENT model (#PCDATA)>
   <!ELEMENT year (#PCDATA)>
   <!ATTLIST year what (estimate|exact) #IMPLIED>
   <!ELEMENT contact (#PCDATA)>
]>
<cars>
   <data type="sale">
     Jag vill sälja min gamla <make>Lada</make>
     <model>Samara</model> som är inregistrerad
     ungefär år <year what="estimate">1999</year>
     Tag kontakt med <contact>Pelle Ek, tfn. 12345</contact>
   </data>
   <data type="sale">
     <contact>Eva Petterson</contact> säljer sin
     <make>Volvo</make> som
     totalt obehövlig och oanvändbar
   </data>
   <data type="buy">
     <contact>Kalle Ek</contact>
     vill köpa en bil av årsmodell
     <year what="exact">2000</year>
     Helst en <make>Nissan</make> <model>Primera</model>
   </data>
</cars>
Om du har IE 5.0 eller nyare kan du klicka här för att se filen i praktiken

EMPTY

Man kan även säga att ett element måste vara tomt. I nedanstående exempel måste father vara tomt och den senare data noden kommer att förorsaka valideringsfel

xml9_4.xml

<?xml version="1.0" encoding="iso-8859-1" ?> 
<!DOCTYPE persons [
   <!ELEMENT persons (data*)>
   <!ELEMENT data (name,father)*>
   <!ELEMENT name (#PCDATA)>
   <!ELEMENT father EMPTY>
]>
<persons>
   <data>
     <name>Kalle</name>
     <father />
   </data>
   <data>
     <name>Ville</name>
     <father>Detta är fel</father>
   </data>
</persons>
Om du har IE 5.0 eller nyare kan du klicka här för att se filen i praktiken

Dett verkar ju rätt meningslöst vid första anblicken men om du är van med html kodning kan du se nedanstående exempel, som (förhoppningsvis) verkar vettigare:

xml9_5.xml

<?xml version="1.0" encoding="iso-8859-1" ?> 
<!--  förenklad html-liknande DTD -->
<!DOCTYPE persons [
   <!ELEMENT persons (data*)>
   <!ELEMENT data (name,img)*>
   <!ELEMENT name (#PCDATA)>
   <!ELEMENT img EMPTY>
   <!ATTLIST img src CDATA #REQUIRED
       width CDATA #IMPLIED
       height CDATA #IMPLIED>
]>
<persons>
   <data>
     <name>Kalle</name>
     <img src="kallebild.gif" />
   </data>
   <data>
     <name>Ville</name>
     <img src="villebild.gif" width="200" height="200" />
   </data>
   <data>
     <name>Anna</name>
     <img src="annabild.gif">Vad gör detta här?</img>
   </data>
</persons>
Om du har IE 5.0 eller nyare kan du klicka här för att se filen i praktiken

Här säger vi att vi skall ha en img tag men den måste vara tom. Däremot kan vi ha några attribut. Jämför med de bilder du - kanske - satt in på websidor. Brukar img taggen innehålla data? Svar: Nej.

 

  Studera själv på nätetMer om ENTITY
Grunderna
XML filer
Mer om XML filer
Datat i XML
Validering
DTD
Studera själv på nätet
Mer om ELEMENT
Mer om ENTITY
Mer om ATTLIST
Rekursivt data
Övningar
Som nästa...


Top
< Studera själv på nätet Mer om ENTITY>
© Anders Enges, Vörå 2002  | 09.10.01 14:12 Visa asp koden