[XML] simple database met xml

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

  • phaas
  • Registratie: Augustus 2001
  • Laatst online: 23-01-2025
Ik ben bezig met het maken van een simpele database server (o.a., er zitten nog wat app. specifieke functies in) die gebruik gaat maken van requests/queries en een database formaat in XML.
Dingen als XQuery wil ik iig _niet_ (zoiezo een overkill), het moet gewoon met plain xml kunnen.
Ik zit nog in de ontwerp-fase van het protocol/formaat dus suggesties zijn van harte welkom.

Het database formaat, bv.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<dbroot name="databeestje">
  <tableobj cname="een tabel">
    <field name="id" type="int" option="auto_increment"/>
    <field name="bla"/>
    <field name="een ander veld/">
  </tableobj>

  <table class="een tabel">
     <id/>
     <bla>Een waarde</bla>
     <een ander veld>Een andere waarde</bla>
   </table>
</dbroot>

Das een optie, maar het kan natuurlijk ook wat ongedwongener:
code:
1
2
3
4
5
6
7
<dbroot name="een databeestje">
  <table name="een tabel>
    <field name="id' option="auto_increment"></field>
    <field name="bla">een waarde</field>
    <field name="een ander veld>Een andere waarde</field>
  </table>
</dbroot>

Oftwel, met inline waardes. Verder kan dit zelfs ook nog:
code:
1
2
3
4
5
6
7
<een databeestje>
  <een table>
     <id option=auto_increment/>
     <bla>een waarde</bla>
     <een ander veld>een andere waarde</een ander veld>
  </een table>
</een databeestje>

Dit is uiteraard niet helemaal netjes XML :P

Dan de query's:
De select's moeten iig per query gedaan worden, m.a.w. dus niet van tevoren.
Een ideetje:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<c command="login">
    <login user="barry" pass="123" />
</c>

<c command="setpw">
    <data location="embed">myNewPass</data>
</c>

<c command="fetch">
  <select ="een tabel" />
  <order type="ASC" sort="alpha" />
  <where field="id" value="8"/>
  <option option="limit" value="1"/>
</c>

<c command="insert">
    <into node="myElement" />
    <data location="extern" length="412" type="text/xml" />
    <option option="update" value="false" />
</c>


Het data element heeft dus een argument "location" die of "embed" is (als text of CDATA) of "extern" en dus ná het eigenlijke stuk XML komt (en dus niet wordt gehinderd door escapes).

Waarvoor gaat het gebruikt worden dan 8)7 ?
Primair is het database gedeelte van de server voor een leerling-volg systeem van een educatief appje. Dit zijn dus mainly uitgebreide stats/scores en nog wat user-settings.

Verder kàn ik natuurlijk ook gewoon geen database/SQL achtig systeem gebruiken maar het gewoon houden bij XML DOM, maar dan server-side. De query mogelijkheden zijn dan echter wel wat beperkter.

Iemand zin om mee te denken?

[ Voor 18% gewijzigd door phaas op 13-12-2004 20:22 ]


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Nee... kap met XML database en gebruik gewoon een echte.

XML is niets.. het is een dom stuk tekst.. het kan helemaal geen fuck. Databases zijn gemaakt om data in op te slaan.. long term... consistentie te bewaken.. transacties.. security.

Dus kap met je XML database en gebruik gewoon een echte db.

Ja kan eventueel wel een database aansturen met XML, maar dat lijkt me echt ongelovelijk onhandig. Gebruik gewoon SQL om de db aan te spreken. en DDL om hem op te bouwen.. Waaaaaarom het wiel opnieuw uitvinden? Dit is dus een typisch voorbeeld van een volslagen foute XML toepassing.

Data uitwisseling kan je eventueel ook met XML doen... maar je wilt het niet gebruiken voor gegevens opslag.

zo.. moest me even van het hart :P Ik zie teveel XML toepassingen om de XML...

[ Voor 48% gewijzigd door Alarmnummer op 13-12-2004 20:31 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 21:24

NMe

Quia Ego Sic Dico.

Alarmnummer schreef op maandag 13 december 2004 @ 20:29:
Nee... kap met XML database en gebruik gewoon een echte.
Sorry, maar wie ben jij om daarover te oordelen? Misschien moet topicstarter wel noodgedwongen met XML werken (geen echte DB beschikbaar of iets dergelijks).

Ik vind zelf de tweede optie overigens wat natuurlijker ogen, dus als je echt XML moet/wil gebruiken, zou ik voor die gaan. Al ben ik het wel met Alarmnummer eens dat je, als dat mogelijk is, veel beter een echte database kunt gebruiken.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15-05 06:45
Ik zou sowieso afraden om variabele tag identifiers te gebruiken. Wat dat betreft vallen scenario 1 en 3 al af. Ik vind scenario 2 zelf er wel aardig uitzien, al is me niet duidelijk wat er nu precies tussen die field-tags aan tekst staat.

Over het gebruik van attributes kun je eeuwig discussieren, omdat het in principe gewoon redundante functionaliteit is.

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 21-02 23:50
Ik heb laatst voor een essay ook een stukje over XQuery doorgenomen. Daar gebruikten ze dus een relationele database om hun XML in te gieten. Het nut daarvan ontgaat me ook nog steeds tot nu toe.

Conclusie: luister naar de eend 3 posts hierboven me. ;)

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Verwijderd

Voor een applicatie zou het niet heel veel uit moeten maken of iets in een XML document is opgeslagen of in een of andere database. XML is onder meer ontworpen om enigszins human-readable te zijn. Waarom zou je dat willen, gaat iemand direct aan de data-bestanden zitten editen? Waarom moeten je queries ook in XML worden opgebouwd?

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

-NMe- schreef op maandag 13 december 2004 @ 20:34:
[...]

Sorry, maar wie ben jij om daarover te oordelen? Misschien moet topicstarter wel noodgedwongen met XML werken (geen echte DB beschikbaar of iets dergelijks).
Zie zijn 1e paar regels.. Hij is een database server aan het schrijven. Nou als hij het centraal kan draaien kan hij ook wel een echte db draaien (er zijn ook extreme lightweight database)..
[/b]cheetah[/b]
Voor een applicatie zou het niet heel veel uit moeten maken of iets in een XML document is opgeslagen of in een of andere database. XML is onder meer ontworpen om enigszins human-readable te zijn.
XML is geschikt voor gegevens uitwisseling.. dat ben ik met je eens. XML is volslagen ongeschikt voor genormaliseerde structuren long term en veilig op te slaan. Vooral als je echt veel data hebt (dat je gewoonlijk in databases ziet) dat veel aan verandering onderhevig is, is een echte db gewoon een must. Hoe wou jij bv een transactie realiseren zonder echte db???

[ Voor 41% gewijzigd door Alarmnummer op 13-12-2004 20:49 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 21:24

NMe

Quia Ego Sic Dico.

Alarmnummer schreef op maandag 13 december 2004 @ 20:41:
Zie zijn 1e paar regels.. Hij is een database server aan het schrijven. Nou als hij het centraal kan draaien kan hij ook wel een echte db draaien (er zijn ook extreme lightweight database)..
Met een XML-database en wat PHP-code (eigen klasse?) kun je ook een server maken. Dat kan in principe zelfs op een Lycos account, en daar heb je al niet al teveel rechten. (Dat Lycos ook een database aanbiedt is even besides the point. :))

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

-NMe- schreef op maandag 13 december 2004 @ 21:10:
[...]

Met een XML-database en wat PHP-code (eigen klasse?) kun je ook een server maken. Dat kan in principe zelfs op een Lycos account, en daar heb je al niet al teveel rechten. (Dat Lycos ook een database aanbiedt is even besides the point. :)
Hmmm tja....

Dan is het aan de TS... mag je alles draaien of niet? Als je gewoon volledige rechten hebt... geef eens jouw argumenten waarom jij met XML wilt werken...

  • phaas
  • Registratie: Augustus 2001
  • Laatst online: 23-01-2025
Alarmnummer schreef op maandag 13 december 2004 @ 21:20:
[...]

Hmmm tja....

Dan is het aan de TS... mag je alles draaien of niet? Als je gewoon volledige rechten hebt... geef eens jouw argumenten waarom jij met XML wilt werken...
Oké, bedankt voor zo ver voor jullie reacties.

- Het wordt _niet_ webbased, dus geen probs met rechten
- De DB moet samen met het programma op één computer kunnen óf server-client (X princiepe)
- XML DOM & SAX zitten standaard in Qt, de toolkit die ik voor de GUI gebruik.
- Een DB van derden in uitgesloten aangezien er naast een databeestje ook nog andere functionaliteit in de serversoftware moet.
- Een XML database is zeer snel geprogrammeerd en query's in XML zijn gemakkelijk uit te breiden zonder ingewikkelde (zelf te maken) parser functies.

Al met al is dit dus zo'n beetje mijn reden voor het gebruiken van XML.

Verder vraag ik me af waarom XML (mits de implementatie goed is) minder consistent en/of veilig zou zijn dan een conventionele DB, bevalve dan dat het XML opzich natuurlijk zeer veel lelijke overhead genereert.

Ik ga hier morgen nog ff op door, so stay tuned :Y)

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 21:24

NMe

Quia Ego Sic Dico.

phaas schreef op maandag 13 december 2004 @ 22:53:
- Een DB van derden in uitgesloten aangezien er naast een databeestje ook nog andere functionaliteit in de serversoftware moet.
Je kan toch een fatsoenlijk DBMS koppelen aan jij eigen software? :?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

phaas schreef op maandag 13 december 2004 @ 22:53:
- Een DB van derden in uitgesloten aangezien er naast een databeestje ook nog andere functionaliteit in de serversoftware moet.
Je moet zorgen dat als jij extra functionaliteit toevoegt.. jij niet direct de ander toegang tot de database gaat verlenen maar jij zelf een server op gaat zetten waar die ander contact mee op gaat nemen.. Je gaat dan werken in tiers..
- Een XML database is zeer snel geprogrammeerd en query's in XML zijn gemakkelijk uit te breiden zonder ingewikkelde (zelf te maken) parser functies.
Je kan misschien eenvoudig gegevens opzoeken maar wat dacht je aan alle functionaliteit die een database jou geeft? Transacties bv.. hoe wou je dit zelf gaan implementeren? Transacties zijn echt geen kattepis en zeker niet iets dat je mag vergeten. Ik hoop dat je weet wat een transactie is en hoe belangrijk ze zijn.
Al met al is dit dus zo'n beetje mijn reden voor het gebruiken van XML.
Imho heel erg slechte redenen.
Verder vraag ik me af waarom XML (mits de implementatie goed is) minder consistent en/of veilig zou zijn dan een conventionele DB, bevalve dan dat het XML opzich natuurlijk zeer veel lelijke overhead genereert.
In een database kun je allerlei constraints aanleggen en referentiele integriteit afdwingen. Ik zou bij goed niet weten hoe je dit voor elkaar zo moeten krijgen op alleen een lading losse tekst files. Want dat zijn XML bestanden waarschijnlijk in jouw geval (of wou je alles in memory houden?)

Volgens mij realiseer je je nog niet half wat een database wel kan, en wat XML niet kan. XML is leuk en cool.. maar je moet wel de juiste technieken gebruiken. Databases zijn de aangewezen techniek om je gegevens efficient en veilig op te slaan.

Zoek trouwens eens op ACID eigenschappen.. Ik durf te wedden dat je dat heel erg lastig voor elkaar gaatkrijgen met je eigen knutselwerk.

  • Johnny
  • Registratie: December 2001
  • Laatst online: 16:37

Johnny

ondergewaardeerde internetguru

Maar dan nog, er is toch een shitload aan gratis open source databases die op ieder systeem draaien en die je gewoon met je programma kunt bundelen/integreren?

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


  • Jochem Knoops
  • Registratie: November 2000
  • Laatst online: 25-11-2025
Misschien is Ozone-db een tip voor je
http://www.ozone-db.org/frames/home/what.html

succes ermee

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 18-05 09:50

pjvandesande

GC.Collect(head);

* pjvandesande vind de gedachten van phaas echt ontzettend eng.

Zoals 112 al aangaf, transacties is iets wat je niet snel voor elkaar krijgt met je Xml database. Ook de overhead word echt ronduit ransig gewoon. Xml kan gewoon helemaal niks voor jou doen. Een kleine database kan dit al wel, zoals bijvoorbeeld alleen al relaties.

Verder lijkt mij Xml kwa snelheid niet echt optimaal maar hier kan ik niet echt over oordelen.

Je geeft ook als argument dat je software nog meer functionaliteit moet krijgen, wat heeft dit in vredensnaam met de keuze van een Xml database te maken?

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

En is het trouwens voor een thuisknutsel werk? Of krijg je hier voor betaald/is dit je werk?

  • phaas
  • Registratie: Augustus 2001
  • Laatst online: 23-01-2025
Alarmnummer schreef op maandag 13 december 2004 @ 23:03:

Je kan misschien eenvoudig gegevens opzoeken maar wat dacht je aan alle functionaliteit die een database jou geeft? Transacties bv.. hoe wou je dit zelf gaan implementeren? Transacties zijn echt geen kattepis en zeker niet iets dat je mag vergeten. Ik hoop dat je weet wat een transactie is en hoe belangrijk ze zijn.
* phaas denk dat ie daar toch net even een lesje gemist heeft :o

Verder, het is een OSS project B) Maar WTF heeft dat er mee te maken?
Ik ben het met jullie eens dat XML een trend is - je ziet het steeds meer en voor de gekste toepassingen 8)7 . Toch zie ik het probleem niet helemaal voor mijn ideetje.
Nogmaals, er komen geen spannende dingen in. Gewoon scores, logs en settings van een paar kinderen die een taalprogje zitten te doen :+
Dat wil natuurlijk niet zeggen dat de boel maar een partij moet zuigen, zeker niet.
Zie het gewoon als server-side DOM als je database een te groot woord vind :Y)
Alarmnummer schreef op maandag 13 december 2004 @ 23:03:

In een database kun je allerlei constraints aanleggen en referentiele integriteit afdwingen. Ik zou bij goed niet weten hoe je dit voor elkaar zo moeten krijgen op alleen een lading losse tekst files. Want dat zijn XML bestanden waarschijnlijk in jouw geval (of wou je alles in memory houden?)
Elke user heeft één 'database' die bij het inloggen wordt ingeladen en dan, zolang de user online is, in het geheugen blijft. De user kan maar op één plek tegelijk online zijn dus een database wordt slechts door één user tegelijk bewerkt.
De database gaat waarschijnlijk ook regelmatig terug naar de schijf worden geschreven (dus niet alleen als de user uitlogd) om zo dataloss bij een server-crash te voorkomen.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Hmm tja... Nouja je hebt mijn tegen argumenten gehoord.. Voor kleine knutsel/frutsel/prutsel dingen.. mwuah.. who cares... maar het oogt in ieder geval onprofessioneel. En als je dit in het bedrijfsleven zou doen zou je gebrandmerkt moeten worden met "gevaarlijk!!" ;)

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 18-05 09:50

pjvandesande

GC.Collect(head);

Wat Alarmnummer zegt, we hebben de tegen argumenten gegeven.

Maar ik vind voorbeeld 2 uit je startpost toch het overzichtelijkst er uitzien.

[ Voor 6% gewijzigd door pjvandesande op 14-12-2004 10:14 . Reden: Ik wil Alarmnummer zijn nick niet blijven verbasteren :+ ]


  • phaas
  • Registratie: Augustus 2001
  • Laatst online: 23-01-2025
Ik vind het jammer dat jullie zo geringschattend over mijn 'knutsel/prutsel/frutsel' doen. Jullie mening was nl. niet mijn vraag, ik vroeg of er iemand mee wilde denken over het layout van het (XML) bestandsformaat.
Ik heb niks tegen een mening maar het hoeven geen quasi flames te worden natuurlijk.
En ja, ik ken de nadelen van het gebruik van een XML 'db', ook al vòòr dat daar zo'n 10 post aan gewijd werden (laat ik even die transacties buiten beschouwing :+ )

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

phaas schreef op dinsdag 14 december 2004 @ 19:16:
Ik vind het jammer dat jullie zo geringschattend over mijn 'knutsel/prutsel/frutsel' doen.
Hmmm tja.. als je het begrip transactie niet kent dan kan daaruit geconcludeerd worden dan je een beetje aan het knutselen bent. (Een professional kent het begrip en zijn toepassing maar al te goed).
Jullie mening was nl. niet mijn vraag, ik vroeg of er iemand mee wilde denken over het layout van het (XML) bestandsformaat.
Geef mensen niet wat ze willen maar wat ze nodig zijn : E Dijkstra
Ik heb niks tegen een mening maar het hoeven geen quasi flames te worden natuurlijk.
Het is geen flame.. maar wij wijzen je op het feit dat je waarschijnlijk een verkeerde oplossing kiest op basis van de verkeerde argumenten. Als je op GoT een topic post moet je dit soort kritiek maar voor lief nemen.
En ja, ik ken de nadelen van het gebruik van een XML 'db', ook al vòòr dat daar zo'n 10 post aan gewijd werden (laat ik even die transacties buiten beschouwing :+ )
Hmmm.... het lijkt me dat je eigelijk absoluut niet weet waar je mee bezig bent.. en dat is ook neit erg als je een beetje aan het aanklooien bent (en ja.. dat doe ik zo nu en dan ook). Maar dit is echt geen serieuze oplossing.

Ik zal er ook geen woorden meer aan vuilmaken. Je hebt onze argumenten tegen jouw XML oplossing gehoord en je moet zelf maar bepalen wat je er mee gaat doen. Sla je ons advies tegen de wind in en broddel je maar wat aan.. of wil je een betere applicatie in elkaar zetten zoals dat in de echt it-wereld gebeurt: aan jou de keus.

[ Voor 4% gewijzigd door Alarmnummer op 14-12-2004 19:28 ]


  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 20:34

Gerco

Professional Newbie

Misschien is sqlite wat voor je ? Het is een eenvoudige lichtgewicht database. Je hoeft geen servers te draaien of andere ongein, je embed deze gewoon in je applicatie met wat library calls. Het heeft bindings voor een aardig zwikkie talen dus dat mag het probleem niet zijn. De kracht van een database met het gemak van een textfile, wat wil je nog meer?

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Verwijderd

Los van het feit dat ik het volledig eens ben met Alarmnummer, hier een linkje naar een aantal xml gebaseerde databases http://www.rpbourret.com/xml/XMLDatabaseProds.htm#native (let op, ook deze schrijven uiteindelijk niets weg naar xml)

[ Voor 15% gewijzigd door Verwijderd op 14-12-2004 20:04 ]


  • Skaah
  • Registratie: Juni 2001
  • Niet online
Verwijderd schreef op dinsdag 14 december 2004 @ 19:58:
Los van het feit dat ik het volledig eens ben met Alarmnummer, hier een linkje naar een aantal xml gebaseerde databases http://www.rpbourret.com/xml/XMLDatabaseProds.htm#native (let op, ook deze schrijven uiteindelijk niets weg naar xml)
Daar zitten wel heel weinig relationele databases tussen.

Verwijderd

Skaah schreef op dinsdag 14 december 2004 @ 20:04:
Daar zitten wel heel weinig relationele databases tussen.
Dus daarmee wil je zeggen dat... :?

  • phaas
  • Registratie: Augustus 2001
  • Laatst online: 23-01-2025
Alarmnummer schreef op dinsdag 14 december 2004 @ 19:25:
Hmmm tja.. als je het begrip transactie niet kent dan kan daaruit geconcludeerd worden dan je een beetje aan het knutselen bent. (Een professional kent het begrip en zijn toepassing maar al te goed).
Inmiddels is het begrip mij duidelijk ;)

Ik zit er na veel gezoek idd toch over te denken gebruik te gaan maken van SQLite oid.
Waarschijnlijk voeg ik em dan gewoon toe aan mn sources om geen deps te creeëren.
Bedankt voor de hulp iig :P

Verwijderd

Grijze Vos schreef op maandag 13 december 2004 @ 20:34:
Ik heb laatst voor een essay ook een stukje over XQuery doorgenomen. Daar gebruikten ze dus een relationele database om hun XML in te gieten. Het nut daarvan ontgaat me ook nog steeds tot nu toe.

Conclusie: luister naar de eend 3 posts hierboven me. ;)
Ik kan uit je reactie even niet helemaal opmaken wat je nu wilt zeggen. XQuery is, zoals je uit de naam wel op kunt maken een query-taal voor XML documenten en heeft niets te maken met wat voor storage backend er gebruikt wordt. Er zijn legio XML database systemen die gebruik maken van XQuery zonder relationale database als onderlaag (o.a. Galax, X-Hive).

Dat het nut van het gebruiken van relationele database technologie in een XML database systeem je een beetje ontgaat begrijp ik wel. Argumenten om een relationele storage backend te gebruiken zijn er echter genoeg.

Eerst maar even waarom XML-databases nodig zijn. Door de populariteit van XML blijft het aantal XML-documenten groeien en groeien. Er vormen zich (bijvoorbeeld bij bedrijven) steeds grotere collecties XML-documenten die beheerd moeten worden. Je kunt nu twee dingen doen: je kunt een XML-database systeem from scratch ontwikkelen of een bestaand systeem als backend gebruiken en een XQuery frontend bovenop zetten.

Waarom zou je kiezen voor een relationeel database systeem als backend?

Relationele systemen zijn er al zolang dat de belangrijkste principes goed doorontwikkeld zijn (ACID, etc.). Er zijn tegenwoordig genoeg robuuste en efficiente RDBMSen. Waarom zou je het wiel dus opnieuw uitvinden en hier niet dankbaar gebruik van maken?

Relationele systemen hebben een eenvoudige tabelstructuur die in het verleden al meermalen heeft bewezen goed inzetbaar te zijn voor datastructuren waar relationele tabellen niet geschikt voor leken (non-first normal form (NF2, geneste) tabellen, complexe objecten, spatio-temporal data). Het is dus zeker de moeite waard om in ieder geval te proberen de relationele tabelstructuur in te zetten voor een XML database systeem.

Wellicht dat er in de toekomst (jaren) goede (en snelle) native XML systemen beschikbaar zijn, maar tot die tijd vormen relationele XML databases in mijn ogen een goed alternatief om de tussentijd te overbruggen.
Pagina: 1