webForumDet fria alternativet

Första problemet..

XMLur XML

34 svar · 1 081 visningar · startad av Hallgren · sida 2 av 2

SPiNMedlem sedan mars 20007 896 inlägg
#21

Funkar det om din DTD ser ut så här:

<!DOCTYPE varor [
<!ELEMENT varor (mobiltelefoner)>
<!ELEMENT mobiltelefoner (tillverkar&#0124;modell&#0124;artikel&#0124;info)>
<!ELEMENT tillverkar (#PCDATA)>
<!ELEMENT modell (#PCDATA)>
<!ELEMENT artikel (#PCDATA)>
<!ELEMENT info ANY>
<!ELEMENT pris (#PCDATA)>
<!ATTLIST tillverkar
	namn CDATA #REQUIRED>
<!ATTLIST artikel
	nr CDATA #REQUIRED>
]>

Också lägger du in:

</mobiltelefoner>
<mobiltelefoner>

Efter att första infon har slutat, så att du får en avskiljare mellan dina båda telefoner.

Dokumentet efter formateringen:

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/css" href="varor.css"?>
<!DOCTYPE varor [
<!ELEMENT varor (mobiltelefoner)>
<!ELEMENT mobiltelefoner (tillverkar&#0124;modell&#0124;artikel&#0124;info)>
<!ELEMENT tillverkar (#PCDATA)>
<!ELEMENT modell (#PCDATA)>
<!ELEMENT artikel (#PCDATA)>
<!ELEMENT info ANY>
<!ELEMENT pris (#PCDATA)>
<!ATTLIST tillverkar
	namn CDATA #REQUIRED>
<!ATTLIST artikel
	nr CDATA #REQUIRED>
]>
<varor>
<mobiltelefoner>
<tillverkar namn="ericsson">Ericsson</tillverkar>
<modell>Ericsson T39</modell>
<artikel nr="1000">1000</artikel>
<info>
T39m är utrustad med GPRS (General Packet Radio Services) för omedelbar 
Internetåtkomst och trådlös Bluetooth-teknik för sladdlös komfort. 
Till det kan du lägga en imponerande lista av användbara funktioner. 
Du får en effektiv och säker Internetåtkomst med T39:ans WAP-bläddrare 
1.2.1, eller med en laptop, eller handdator med hjälp av det inbyggda 
modemet i T39m. PIM-applikationerna (Personal Information Management) 
inkluderar en avancerad kalender och telefonbok.
<pris>Pris: 5000</pris>
</info>
</mobiltelefoner>
<mobiltelefoner>
<tillverkar namn="siemens">Siemens</tillverkar>
<modell>Siemens SL45</modell>
<artikel nr="1001">1001</artikel>
<info>
SL 45 är en av de första telefonerna med MP-3 spelare. Vad som 
skiljer ut den här produkten är att den har utbytbart MultiMediaCard
TM (MMC) som musiken lagras på. Genom att lansera en high-end produkt 
med elegans och högteknologiska funktioner blir Siemens GSM-portfölj 
komplett. SL 45 är inte bara en telefon. Med sin MP-3 spelare, utbyt 
bara MultiMediaCard TM (MMC), röstinspelning, mobil internet anslutning, 
adressbok/planeringskalender är den mycket, mycket mer. Med sin eleganta 
design är den en av de mest attraktiva produkterna på marknaden.
<pris>Pris: 7000</pris>
</info>
</mobiltelefoner>
</varor>

Hur ser det ut då?

------------------
SPiN, bjorne.w@telia.com

-- Wise men talk because they have something to say; fools, because they have to say something. --

jarvkloMedlem sedan juli 20013 378 inlägg
#22

Nja, just det exemplet funkar inte pga att DTD:n inte är helt komplett... (saknar några repetitioner)

För att ta fram DTD:n när man redan har dokumentet kan man tänka ungefär såhär:

Några element innehåller "ren" text. Dessa är:
tillverkar,modell,artikel och pris
och deklareras såhär:
<!ELEMENT tillverkar (#PCDATA)>
<!ELEMENT modell (#PCDATA)>
<!ELEMENT artikel (#PCDATA)>
<!ELEMENT pris (#PCDATA)>

Elementet info, är ett såkallat "mixed element" och innehåller både text och ett pris-element. Detta skriver du t.ex. såhär:
<!ELEMENT info (#PCDATA | pris)* >

Stjärnan betyder "noll eller flera av" det som finns i parentesen, och i parentesen står "parsed character" data - dvs "ren text" eller elementet "bild" ( | betyder "eller")
Blandar man såhär, måste f.ö. #PCDATA komma först !!!)

Elementet mobiltelefoner innehåller en sekvens av element som upprepas två gånger i detta fall (tillverkar - modell - artikel - info). Detta kan du skriva såhär:
<!ELEMENT mobiltelefoner (tillverkar,modell,artikel,info)* >

","-tecknet betyder "som följs av"

Elementen tillverkar och artikel har attribut. Dessa kan du deklarera såhär:
<!ATTLIST tillverkar namn CDATA #REQUIRED>
<!ATTLIST artikel nr CDATA #REQUIRED>

Slutligen har du rotelementet varor kvar att deklarera.
<!ELEMENT varor (mobiltelefoner)* >

Vilket ger den kompletta (interna) DTD:n som följer:
<!DOCTYPE varor [
<!ELEMENT varor (mobiltelefoner)* >
<!ELEMENT mobiltelefoner (tillverkar,modell,artikel,info)* >
<!ELEMENT info (#PCDATA|pris)* >
<!ELEMENT tillverkar (#PCDATA)>
<!ATTLIST tillverkar namn CDATA #REQUIRED>
<!ELEMENT modell (#PCDATA)>
<!ELEMENT artikel (#PCDATA)>
<!ATTLIST artikel nr CDATA #REQUIRED>
<!ELEMENT pris (#PCDATA)>
]>

Exemplet på http://jarvklo.net/xmlexempel/varor.xml är nu uppdaterat (och testat!) med denna DTD. Testa gärna!

För övrigt håller jag med SPiN om att det förmodligen är enklare att hantera informationen om du väljer att göra ett element "mobiltelefon" i stället för "mobiltelefoner" - då skulle mobiltelefon kunna se ut såhär:
<!ELEMENT mobiltelefon (tillverkar,modell,artikel,info) >
och varor såhär:
<!ELEMENT varor (mobiltelefon)* >
Men det är en annan historia ;)

------------------
Have fun
;)

HallgrenMedlem sedan dec. 19991 606 inlägg
#23

Helt otroligt. :)

Förmodar att de här "lilla" bara är toppen på isberget när det gäller DTD.

Har ändrat nu och inga felmedelanden har visat sig. Weeee! :) Tack för hjälpen SPiN och jarvklo! ( även @nders för sin insatts ;) :) )

XML exempel

Detta e ju rätt kul de här! Ni lär få "se" mina små inlägg fler gånger här i XML, XHTMl delen. :)

------------------
Är det en fysisk liknelser eller är du bara ett stort bakverk?

webcam?

SPiNMedlem sedan mars 20007 896 inlägg
#24

Sätt dig inte in i DTD så djupt, det kommer inte att finnas allt för länge till... Scheman, som är mer dynamiska(?) och lättanvända, är det som gäller härifrån och in i framtiden. :)

Ta en titt på Vides första XML-artikel på http://www.webeye.nu - där går han igenom scheman. :)

------------------
SPiN, bjorne.w@telia.com

-- Wise men talk because they have something to say; fools, because they have to say something. --

@ndersMedlem sedan juni 200032 969 inlägg
#25

Varsågod Hallgren. ;)

I övrigt håller jag (läskig ovana) helt med SPiN. Schemas är det man ska använda, DTD känns (och har känts länge) som att det är på väg bort.

Mvh,

jarvkloMedlem sedan juli 20013 378 inlägg
#26

Det var ett rent nöje Hallgren!

Med risk att ulösa en åsiktsfejd liknande den om vilken webbläsare som är bäst ;) skulle jag bara vilja tillägga att:

Jag håller inte riktigt med SPiN och @nders där.
DTD *ser* kanske svårare ut vid en första anblick, men är IMHO betydligt enklare att använda när man bara vill beskriva enklare datastrukturer som innehåller text.(som t.ex. i ett presentationsplattformsoberoende publiceringssystem för webbsidor eller Hallgrens mobiltelefonregister).
Det tar dessutom inte så lång tid att lära sig - även om det (fortfarande) saknas *bra* artiklar i ämnet som inte förutsätter att man är databasexpert med kunskaper i regulära uttryck och logik ;)

Schema innehåller det som DTD kan (fast man uttrycker det hela på ett annorlunda sätt som IMHO är grötigare och mer svåröverskådligt ;) ), och har dessutom stöd för ett gäng olika datatyper och innehåller betydligt fler "finesser". Sammantaget gör detta IMHO att det lätt blir så att det finns så många olika möjligheter att uttrycka samma sak att man kan gå vilse bland möjligheterna och hamna i beslutsångest (om man inte är programmerare i grunden och hemma med t.ex. skillnaderna mellan olika typer av heltal... och varför man väljer en taltyp före en annan ;) )

Vad är godast?
Päron eller äpplen ? ;)
Är automatlåda bättre eller sämre än manuell växelspak? ;)
Beror inte det på behov, tycke och smak hos den som uttalar sig ;) ?

Kort sagt:
Ta detta inlägg för vad det är: en personlig åsikt, och avgör själv om DTD eller Schema passar just *din* tillämpning bäst (dvs lär dig båda om du orkar och välj sedan den variant du gillar bäst att arbeta med - det finns för- och nackdelar med bägge ;) )

------------------
Have fun
;)

SPiNMedlem sedan mars 20007 896 inlägg
#27

Hm, jag glömde visst att säga: Var sin ko, Hallgren! Håller med jarvklo att det var ett rent nöje. :)

jarvklo> Men är det inte så att DTDer kommer att tas bort ur standarden? Om det finns kvar kan man ju självklart lära sig det, men om nu stödet för dem kommer att försvinna ser det bara ut som tidsfördriv. :)

@nders> :f ;)

------------------
SPiN, bjorne.w@telia.com

-- Wise men talk because they have something to say; fools, because they have to say something. --

HallgrenMedlem sedan dec. 19991 606 inlägg
#28

XSL e något jag kommer att komma in på lite längre och då kommer jag allt jaga fatt på dig, ;)

Nu tar jag dig allt SPiN! ;)

Efter att ännu en gång fått bevis på att NS har stiget ur infernot för att göra livet till en plåga för oss webbutvecklare och fått en liten knuff från @nders så kommer jag tillbaka hit för att få mitt lilla XML dokument att bli HTML igen. Serverside transformmering?

Jag är tveksam att man kan göra det med CSS, utan man kanske måste använda XSL...

Krävs det mycket för att göra om min css till XSL?

Så, ännu en gång ber jag om lite hjälp. :)

------------------
Är det en fysisk liknelser eller är du bara ett stort bakverk?

webcam?

SPiNMedlem sedan mars 20007 896 inlägg
#29

*springer runt och försöker skaka av mig Hallgren* ;)

Krävs det mycket för att göra om min css till XSL?

Njäae, det beror på hur man ser på det. :e
Det skrivs inte alls likadant, men det tar inte speciellt lång tid att skriva ihop en XML för ditt XML-dokument.

Här är ett litet exempel på hur du skulle kunna bygga upp ditt stylesheet:

[b]
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
[/b]
<html>
<head>
<title>Mobiltelefoner!</title>
</head>
<body>

<table border="0">
[b]<xsl:for-each select="varor/mobiltelefoner">[/b]
<tr>
<td>
<b>Modell:</b> [b]<xsl:value-of select="modell"/>[/b]
</td>
</tr>
<tr>
<td>
<b>Information:</b> [b]<xsl:value-of select="info"/>[/b]
</td>
</tr>
[b]</xsl:for-each>[/b]
</table>

</body>
</html>
[b]
</xsl:template>
</xsl:stylesheet>
[/b]

Nu när du har elementet pris inuti elementet info, vet jag inte om den här stilmallen kommer att funka till 100%, men prova. :)

Om du vill formatera det på servern, gör du så här i ASP:

<%
set objXML = Server.CreateObject ( "Microsoft.XMLDOM" )
set objXSL = Server.CreateObject ( "Microsoft.XMLDOM" )

objXML.async = False
objXSL.async = False

objXML.load Server.MapPath ( "/DinXML.xml" )
objXSL.load Server.MapPath ( "/DinXSL.xsl" )

Response.Write objXML.transformNode ( objXSL )
%>

Om du använder något annat språk, hojta så ska jag försöka hjälpa dig med det isf. :)

Märk att jarvklo sa att du kunde formatera din XML med CSSen på servern också! Så du är inte tvungen till att använda XSL för det. :)

Kan inte så många XML-sidor i huvudet, men på http://www.xml101.com tror jag att dom har nåt med XSL också. :)

------------------
SPiN, bjorne.w@telia.com

-- Wise men talk because they have something to say; fools, because they have to say something. --

HallgrenMedlem sedan dec. 19991 606 inlägg
#30

Kan ju hoppa in med en liten fråga.
Vill placera in & n b s p mellan ett element men får fel. Förmodar att PCDATA inte gillar det. Lösning?

------------------
Är det en fysisk liknelser eller är du bara ett stort bakverk?

webcam?

[Redigerat av Hallgren den 27 jan 2002]

jarvkloMedlem sedan juli 20013 378 inlägg
#31

Märk att jarvklo sa att du kunde formatera din XML med CSSen på servern också! Så du är inte tvungen till att använda XSL för det.

STOPP OCH BELÄGG!!!!
Nu har vi nog pratat om varandra lite så det blivit ett missförstånd...
CSS är en ren klient-teknik och lösningen jag har pratat om har hela tiden varit att sätta utseende på taggarna i ett XML-dokument genom att lägga in en processinstruktion i XML-dokumentet som länkar till ett CSS-dokument.

Detta är (precis som stilmallarna i HTML) helt och hållet client-side!!!

------------------
Have fun
;)

[Redigerat av jarvklo den 27 jan 2002]

jarvkloMedlem sedan juli 20013 378 inlägg
#32

Men är det inte så att DTDer kommer att tas bort ur standarden?

XML Schema är en *kompletterande*-specifikation som man använder genom att utnyttja de (numera) standardiserade taggarna ur ett visst namespace: "XML-Schemas"
(Vides artikel som SPiN refererade till tidigare i denna tråd använder t.ex. microsofts variant av Scheman)

<Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes">

Jag kollade lite på W3C, De håller på att ta fram XML1.1, och i den Working Draft de släppte i december finns inget antytt om att DTD-begreppet skall bort.
se vidare http://www.w3.org/TR/xml11/

Har någon sett något annat, så är jag *mycket* intresserad av en länk!!

Däremot kan det säkert vara så att fler och fler *väljer* att använda Schemas eftersom de har behov av de utökade möjligheterna som Scheman ger gentemot DTD:er. men som sagt IMHO finns det för- och nackdelar med bägge teknikerna!

------------------
Have fun
;)

SPiNMedlem sedan mars 20007 896 inlägg
#33

Hallgren> Du får lägga det som en ENTITY har jag för mig, i DTD:n för att det ska fungera. Återkommer i morgon med hur man gör.

jarvklo> Ah, ett litet missförstånd då. Sorry. :)
Ang. om DTD's ska tas bort är jag som sagt inte säker, men det är nåt jag har hört. Kanske bara är blaj.

------------------
SPiN, bjorne.w@telia.com

-- Wise men talk because they have something to say; fools, because they have to say something. --

jarvkloMedlem sedan juli 20013 378 inlägg
#34

Tog mig friheten att uppgradera förslaget på XSLT-mall till aktuell standard: (Den som var med i SPiN:s förslag var *väldigt* gammal ;)

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet 
	version="1.0"
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
	xmlns="http://www.w3.org/1999/xhtml" 
>
<xsl:output 
	method="html" 
	encoding="ISO-8859-1" 
	doctype-public="-//W3C//DTD XHTML 1.1//EN" 
	doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" 
	indent="yes"
/>

<xsl:template match="/">
<html>
<head>
<title>Mobiltelefoner!</title>
</head>
<body>
<table>
<xsl:for-each select="varor/mobiltelefon">
<tr>
<td>
<b>Modell:</b> <xsl:value-of select="modell"/>
</td>
</tr>
<tr>
<td>
<b>Information:</b> <xsl:value-of select="info/text()"/><br />
<b><xsl:value-of select="info/pris"/></b>
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

Noterbart:
taggen

<xsl:stylesheet 
	version="1.0"
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
	xmlns="http://www.w3.org/1999/xhtml" 
>

Anger att man använder aktuell version av XSLT (1.0) och kopplar transform-motorn till rätt namespace för transformationen

Taggen

<xsl:output 
	method="html" 
	encoding="ISO-8859-1" 
	doctype-public="-//W3C//DTD XHTML 1.1//EN" 
	doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" 
	indent="yes"
/>

talar om vilken <!DOCTYPE utmatningen skal ha (i detta fall XHTML1.1)

Om man vill transformera XML-filen till XHTML på servern med ASP, Bör SPiN:s kod funka.

Om man i stället vill låta webbläsaren utföra transformationen, lägger man till processinstruktionen

<?xml-stylesheet type="text/xsl" href="varor.xsl"?>

i XML-filen (alltså i stället för den processinstruktion som länkar in CSS-mallen som vi pratat om tidigare)

Och VIPS så funkar det!
Kolla på http://jarvklo.net/xmlexempel/varor2.xml

Till sist ett litet tips!
Om man jobbar med client-side transformationer blir det ganska råddigt att felsöka (man ser ju aldrig HTML-koden ;) ) - men det finns hjälp om man kör Windows!
Ladda hem XMLCooktop - en utmärkt (freeware) testbänk för XML-transformationer och XML-redigering. Deras mål är att skapa en produkt som är bättre än (dyra) XMLSpy...

------------------
Have fun
;)

jarvkloMedlem sedan juli 20013 378 inlägg
#35

Vill placera in & n b s p mellan ett element men får fel. Förmodar att PCDATA inte gillar det. Lösning?

Jupp. & är ett specialtecken som måste hanteras med omsorg i XML (escapeas med & - vilket är enkelt i XML men inte trivialt i en XSLT-mall)...

Brutalvarianten på lösning, använd:

<xsl:text disable-output-escaping='yes'>&nbsp;</xsl:text>

på varje ställe du vill se ett  

Finessvarianten: Lägg till en entitet i en <!DOCTYPE i XSL-dokumentet (se mer på http://www.xml.com/pub/a/2001/03/14/trxml10.html )

För övrigt anser jag att webforums glufsande av entiter man matar in (som t.ex.   ) suger ;)
------------------
Have fun
;)

[Redigerat av jarvklo den 28 jan 2002]

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