Toon posts:

[asp] dbms -> xml -> xslt -> html -> client

Pagina: 1
Acties:
  • 145 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik wil de logica scheiden van de presentatie.
Op de volgende wijze;

1.dbms
Met ADO benader ik de data base krijg een recordset.

2.xml
de recordset zet ik om naar xml met msxml

3.xslt
er staat een xslt template op de server

4.html
de xml wordt 'gemerged' met de xslt template en HTML pagina die hieruit komt wordt gestuurd naar de client :)

Dit leek mij de meest slimme methode om de logica te scheiden van de presentatielaag.
Hebben jullie hier nog een ander idee over of een verfijning van deze methode?


-> xml -> xslt -> html -> client

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 13:20
Lijkt me prima zo toch ?

Verwijderd

Uitstekende methode, hebben we voor het Integraal Boeken Bestel Systeem op de universiteit twente ook zo gedaan... check anders deze pagina maar eens!

  • Ramon
  • Registratie: Juli 2000
  • Laatst online: 12:39
Op vrijdag 28 september 2001 12:11 schreef pinguin het volgende:
Uitstekende methode, hebben we voor het Integraal Boeken Bestel Systeem op de universiteit twente ook zo gedaan... check anders deze pagina maar eens!
ibbs.os.uwtente.nl is under construction! Please come back later.

Check mijn V&A ads: https://tweakers.net/aanbod/user/9258/


Verwijderd

Topicstarter
Zit je niet met veel performance verlies door al die omzettingen van formaat?

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 13:20
Op vrijdag 28 september 2001 12:31 schreef -NW het volgende:
Zit je niet met veel performance verlies door al die omzettingen van formaat?
XSL gebeurt op de client, en nee hoor, zoveel dataverkeer veroorzaakt het niet.

Verwijderd

Topicstarter
Nee bij deze methode wordt de xslt op de server omgezet naar html. Anders is het niet compatible genoeg met de verschillende browsers.

Verwijderd

Als je SQL Server 2000 hebt kan je de ADO laag er nog uit halen en je data meteen als XML uit de database halen..

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 13:20
Op vrijdag 28 september 2001 12:34 schreef -NW het volgende:
Nee bij deze methode wordt de xslt op de server omgezet naar html. Anders is het niet compatible genoeg met de verschillende browsers.
Aha :)

Verwijderd

Topicstarter
aha! We gebruiken SQL-server 2000.
Heb je daar toevallig een codesnippet van, van het ophalen van een recordset in XML?

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Neem de 'XML' uitvoer van een recordset met behulp van MS SQL Server _niet_ als formaat voor je data laag! Het principe wat MS SQL Server toepast is zeer primitief en is feite een directe mapping van een relationele tabel naar XML. Dit is vaak geen geschikt formaat om te gebruiken in client applicaties of XSLT toepassingen. De conversie die SQL server toepast is bovendien zo triviaal dat het zeer gemakkelijk in eigen code (beter) te implementeren zou moeten zijn.

De transformatie van XSL gaan over het algemeen erg snel (hangt uiteraard af van de complexiteit en de gebruikte XSL processor). Het genereren van XML kost absoluut minder tijd dan het genereren van HTML. Ik denk daarom dat er vrijwel geen performance problemen zullen zijn.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
wat is een goeie xls processor overigens?

  • tomato
  • Registratie: November 1999
  • Niet online
Op vrijdag 28 september 2001 13:13 schreef -NW het volgende:
aha! We gebruiken SQL-server 2000.
Heb je daar toevallig een codesnippet van, van het ophalen van een recordset in XML?
code:
1
SELECT ...blabla... FOR XML;

Met nog wat variaties. Maar zoals je ziet, echt uitgebreid is dit niet en ik weet ook niet of je hier genoeg aan hebt om het direct te gebruiken. Zelf heb ik het nog nooit gebruikt.
Er wordt trouwens niet een volledig XML document gegeven.

[edit]
Ik had deze pagina een half uurtje open staan en in die tijd heeft mbravenboer al wat verder gekeken dan mijn neus lang is, dus die had al gezien dat het allemaal niet zo veel voorstelt ;)

  • OMX2000
  • Registratie: Januari 2001
  • Laatst online: 12:45

OMX2000

By any means necessary...

Als je gebruik maakt van MS SQL 2000 dan kan het volgende...

Je maakt eerst schema's aan die beschrijven hoe je xml uitvoer eruit komt te zien, en hoe de xml data gemapt wordt naar de sql database tabellen.

Dan kun je rechtstreeks een Xpath query doen, die een xml bestand als resultaat heeft in het door jou bepaalde formaat. Dit zou je eventueel rechtstreeks naar de client kunnen sturen...

Je kunt met ado rechtstreeks een Xpath query laten uitvoeren door SQL, en het resultaat door een xsl stylesheet halen...

voorbeeld code

<%@ Language=VBScript %>
<%Option Explicit
Const MSSQLXML_DIALECT = "{5D531CB2-E6Ed-11D2-B252-00C04F681B71}"
Const DBGUID_XPATH = "{ec2a4293-e898-11d2-b1b7-00c04f680c56}"
Const adExecuteStream = 1024

Response.Expires = 0
Response.CharSet = "ISO-LATIN-7"
Dim conDB
Dim cmdXML
Dim strQry
Dim stmXMLOut
Dim strXPath
Dim strOutput

' set conDB = Server.CreateObject ("ADODB.Connection")
set cmdXML = Server.CreateObject ("ADODB.Command")
set stmXMLOut = Server.CreateObject ("ADODB.Stream")

strXPath = "Category[@CategoryID='" & Request.QueryString("CategoryID") & "']"

cmdXML.ActiveConnection = "PROVIDER=SQLOLEDB;DATA SOURCE=(local);INITIAL CATALOG=Northwind;INTEGRATED SECURITY=SSPI;"
stmXMLOut.Open
stmXMLOut.Charset = "Unicode"
with cmdXML
.Properties("Output Stream") = stmXMLOut
.Properties("Base Path") = Server.MapPath("XMLFiles")
' te gebruiken schema
.Properties("Mapping Schema") = "CatalogSchemaAnn.xml"
' stylesheet
.Properties("Xsl") = "Catalog.xsl"
.Properties("Xml Root") = "Catalog"
.Dialect = DBGUID_XPATH
.CommandText = strXPath
end with


cmdXML.Execute , , adExecuteStream
' Response.Write stmXMLOut.ReadText

Dim strXML

strOutput = stmXMLOut.ReadText


' opruimen
stmXMLOut.Close
set stmXMLOut = nothing
set cmdXML = nothing
%>
<HTML>
<HEAD>
<TITLE>SQL XML Query demo</TITLE>
<LINK rel="stylesheet" type="text/css" href="default.css">
</HEAD>
<BODY>

<% Response.Write strOutput %>

</BODY>
</HTML>

en het heeft dit als resultaat
Afbeeldingslocatie: http://www.contrasite.com/saber.tabel.gif

er horen bij dit voorbeeld nog schema's en xsl's bij...

Dè developers podcast in je moerstaal : CodeKlets Podcast


  • OMX2000
  • Registratie: Januari 2001
  • Laatst online: 12:45

OMX2000

By any means necessary...

Op vrijdag 28 september 2001 14:08 schreef -NW het volgende:
wat is een goeie xls processor overigens?
gebruik gewoon de xsl processor die bij msxml3 zit... Die is snel, stabiel, en bijna volledig w3c compliant

Dè developers podcast in je moerstaal : CodeKlets Podcast


Verwijderd

Topicstarter
die gebruik ik :)
Het valt me op dat er geen error in mijn browser verschijnt als ik een fout maak in mijn xslt of xml document.
Kan je dit nog 'aanzetten' ofzo?

  • OMX2000
  • Registratie: Januari 2001
  • Laatst online: 12:45

OMX2000

By any means necessary...

heb je show friendly http errors aanstaan?

Dè developers podcast in je moerstaal : CodeKlets Podcast


Verwijderd

Topicstarter
hoe bedoel je, onder IIS?

  • OMX2000
  • Registratie: Januari 2001
  • Laatst online: 12:45

OMX2000

By any means necessary...

nee in je browser... en doe je serverside xml + xsl processing? of clientside?

Dè developers podcast in je moerstaal : CodeKlets Podcast


Verwijderd

Topicstarter
alles serverside. De client krijgt puur html in z'n browser.

  • OMX2000
  • Registratie: Januari 2001
  • Laatst online: 12:45

OMX2000

By any means necessary...

als jij een error maakt in asp, krijg je dan nu een uitgebreide error report? zo nee dan heb je de user-friendly error messages aan staan...

Dè developers podcast in je moerstaal : CodeKlets Podcast


Verwijderd

Topicstarter
ASP errors krijg ik wel in volle glorie te zien alleen als er op de server iets fout gaat met XSL of XML dan krijg ik gewoon geen output naar mijn browser.

leeg... |:(

  • OMX2000
  • Registratie: Januari 2001
  • Laatst online: 12:45

OMX2000

By any means necessary...

error krijg je alleen als het xml document niet correct is. Of als je xsl stylesheet niet correct is. je krijgt geen melding als er geen resultaat is...

Dè developers podcast in je moerstaal : CodeKlets Podcast


Verwijderd

Topicstarter
als ik een fout maak in het XLS bestand, krijg ik geen! foutmelding.
Hij retourneerd eenvoudigweg niets meer naar mijn browser.

  • OMX2000
  • Registratie: Januari 2001
  • Laatst online: 12:45

OMX2000

By any means necessary...

wat bedoel je met een fout in het xsl bestand? foute xml. een foute instructie?

Dè developers podcast in je moerstaal : CodeKlets Podcast


Verwijderd

Topicstarter
foute instructie bijvoorbeeld

  • tomato
  • Registratie: November 1999
  • Niet online
-NW, heb jij misschien ICQ? OMX2000 wel namelijk ;)

Verwijderd

Topicstarter
hmm.. ja... alleen niet op mijn werk (en dat is waar ik nu ben)

  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 15-09 23:45
Op vrijdag 28 september 2001 12:11 schreef pinguin het volgende:
Uitstekende methode, hebben we voor het Integraal Boeken Bestel Systeem op de universiteit twente ook zo gedaan... check anders deze pagina maar eens!
hehe, zo kom je elkaar nog eens tegen :P

De url is trouwens: http://ibbs.os.utwente.nl

Verwijderd

Topicstarter
Zeg freak007. Heb jij ook problemen met XLS dat deze geen foutmeldingen genereerd als er iets fout gaat, maar dat deze gewoonweg niets doet?

  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 15-09 23:45
Op vrijdag 28 september 2001 16:02 schreef -NW het volgende:
Zeg freak007. Heb jij ook problemen met XLS dat deze geen foutmeldingen genereerd als er iets fout gaat, maar dat deze gewoonweg niets doet?
Nee hoor. hij geeft keurig errors aan als ik iets fout heb gedaan.

Waar je natuurlijk wel op moet letten is dat je XSL templates gematched worden.
code:
1
2
3
<xsl:template match="/">
    <xsl:apply-templates />
</xsl:template>

doet soms wonderen :Y)

edit: Ik gebruik trouwens PHP en geen ASP :)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Als je die template moet toevoegen is je XSL processor niet W3C compatible...

De default templates zijn namelijk:
code:
1
2
3
4
5
6
7
<xsl:template match="/ | *">
    <xsl:apply-templates/>
</xsl:template>

<xsl:template match="text()">
    <xsl:value-of select="."/>
</xsl:template>

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
Wat is het idee van die "text()" dan precies?
Moet dat niet "text" zijn? :?

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
text() matched met een text knoop... Als er dus text in een element zit matched deze template. Text is dus in tegenstelling tot wat je misschien zou verwachten ook een knoop die gematched wordt tegen de beschikbare templates.

Als je: match="name/text()" neemt, matched alleen de text in element "name". Als je match="text()" neemt, matched alle tekst in alle knopen.

De twee default templates zorgen er dus voor dat een lege stylesheet alle tekst in XML document oplevert.

Als je de tekst van element wil invoegen kan dit dus op 2 manieren:

1. <xsl:value-of select="."/>
2. <xsl:apply-templates/>

In het tweede geval zal de default template gebruikt worden (tenzij er een andere template matched uiteraard). text() is dus gewoon onderdeel van XPath :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Op vrijdag 28 september 2001 15:58 schreef freak007 het volgende:

[..]

hehe, zo kom je elkaar nog eens tegen :P

De url is trouwens: http://ibbs.os.utwente.nl
Ik bedoel maar :) Hoi!
Pagina: 1