[DTD] Ontwerp op juiste manier ?

Pagina: 1
Acties:

  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 25-07 18:17
Na veel wikken en wegen heb ik toch besloten te stap te wagen en XML/XSLT te gaan gebruiken voor een project waarmee ik bezig ben. Het gaat om een voorraad/verkopen rapportagesysteem met gegevens van een aantal winkels daarin. Het is de bedoeling dat leveranciers (vendors) een rapport krijgen met daarin de artikelen die bij hun ingekocht zijn. Van deze artikelen wordt het volgende vermeld.
  • De periode waarover het rapport gaat
  • De totale voorraad (over alle winkels)
  • Het totaal aantal verkopen (over alle winkels)
  • De voorraad + verkopen per winkel
Als ik alle tutorials/voorbeelden die ik inmiddels gelezen heb goed heb begrepen zou er een volgende DTD uit kunnen rollen. Deze is iets vereenvoudigd weergegeven met alleen de relevante elementen erin vermeld.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0"?>
<!ELEMENT rapport (vendor, periode, artikelen+)>
<!ELEMENT vendor (naam, adres)>

<!ELEMENT periode>
<!ATTLIST periode van CDATA #REQUIRED>
<!ATTLIST periode tot CDATA #REQUIRED>

<!ELEMENT artikelen (omschrijving, voorraad, verkopen, winkels+)>
<!ATTLIST artikelen id CDATA #REQUIRED>

<!ELEMENT winkels (naam, voorraad, verkopen)>
<!ATTLIST winkels id CDATA #REQUIRED>

<!ELEMENT omschrijving (#PCDATA)>
<!ELEMENT voorraad (#CDATA)>
<!ELEMENT verkopen (#CDATA)>

Heb ik dit goed begrepen ? Zo nee, dan hoor ik graag jullie aanvullingen / suggesties hierop.

SIZE does matter.
"You're go at throttle up!"


  • Croccifixio
  • Registratie: Maart 2002
  • Laatst online: 01-04-2025
Een klein beetje offtopic.
Heb je al gekeken naar XML Schema? Heb ik al wat vaker gebruikt en is erg goed, het is een vervanger voor DTD.

Kijk anders even op w3schools.com voor wat info en een tutorial.

  • Juup
  • Registratie: Februari 2000
  • Niet online
Op woensdag 03 juli 2002 11:43 schreef -TheGrimReaper- het volgende:
Blah blah XML schema
Of je gebruikt Relax NG, die is veel gemakkelijker dan XML schema.
Hier een tutorial voor Relax NG.

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 25-07 18:17
HELP!!! :?

Nu heb ik binnen 10 minuten alweer 3 mogelijkheden om uit te kiezen. Ik ben nog een (bijna totale) n00b in dit gebied, dus wie me een beetje kan helpen met het maken van een keus voor 1 van de 3.

De data komt uit een database en het project is voor 95% in PHP geschreven (klein stukje Perl). Natuurlijk maak ik graag een goede keus zodat ik straks niet voor verrassingen kom te staan en tevens moet ik toch nog veel leren hierover (maar dan graag gelijk iets waarmee ik uit de voeten kan)

SIZE does matter.
"You're go at throttle up!"


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
DTDs zijn inderdaad erg beperkt, maar als ik jouw schema zo zie denk ik niet dat het nodig is om echt volledig over te stappen op een andere schema taal zoals RELAX NG.

Je kunt later altijd nog hetzelfde schema aanbieden als XML Schema of RELAX NG: er hoeft natuurlijk niet maar 1 schema te zijn voor een 'standaard'.

Je moet pas echt volledig overstappen als je ontoelaatbare beperkingen tegenkomt, maar met dit soort werken valt dat allemaal wel mee.

Na vluchtig gekeken te hebben ziet je werk er wel netjes uit :) .

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


  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 25-07 18:17
Op woensdag 03 juli 2002 12:18 schreef mbravenboer het volgende:

Na vluchtig gekeken te hebben ziet je werk er wel netjes uit :) .
Thanks..

Als ik de sites waar Schema / Relax worden beschreven even doorlees lijkt dat me ook een beetje overkill. Eigenlijk moet de XML file uiteindelijk een gestructureerde lijst van getallen zijn (niets meer, niets minder). Het gaat er alleen om dat verschillende leveranciers, verschillende opmaken vereisen en dat schijn je dus op te kunnen lossen door op dezelfde (dynamisch gegenereerde) XML file verschillende stylesheets los te laten.

Een tweede vraagje :

Ik heb nu een soort hierarchie :

* Rapport
** Artikel
*** Winkel

Stel, dat ik het nu wil presenteren als :

* Rapport
** Winkel
*** Artikel

Kan ik dan met dezelfde DTD af en gewoon in een stylesheet de groepering veranderen ?

SIZE does matter.
"You're go at throttle up!"


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Skinny: Kan ik dan met dezelfde DTD af en gewoon in een stylesheet de groepering veranderen ?
Ja: je zult in je DTD altijd een keuze moeten maken voor de groepering. Als je de groepering echter verandert, voldoet de XML natuurlijk niet meer aan de DTD, tenzij je natuurlijk beide vormen in de DTD toestaat.

Overigens is groepering in XSLT 1.0 helaas niet heel erg makkelijk: je moet wat knutselen, maar dit wordt een stuk beter in XSLT 2.0.

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


  • Croccifixio
  • Registratie: Maart 2002
  • Laatst online: 01-04-2025
Op woensdag 03 juli 2002 11:51 schreef Jaaap het volgende:

[..]

Of je gebruikt Relax NG, die is veel gemakkelijker dan XML schema.
Hier een tutorial voor Relax NG.
Ik had nog nooit van Relax NG gehoord.
Ik heb de tutorial even snel doorgekeken (de source van de Relax NG schema's). Ik zie iets wat heel erg veel lijkt op XML Schema. Kan je me vertellen wat precies het voordeel is van Relax NG tov XML Schema?

  • Croccifixio
  • Registratie: Maart 2002
  • Laatst online: 01-04-2025
Op woensdag 03 juli 2002 12:18 schreef mbravenboer het volgende:
DTDs zijn inderdaad erg beperkt, maar als ik jouw schema zo zie denk ik niet dat het nodig is om echt volledig over te stappen op een andere schema taal zoals RELAX NG.

Je kunt later altijd nog hetzelfde schema aanbieden als XML Schema of RELAX NG: er hoeft natuurlijk niet maar 1 schema te zijn voor een 'standaard'.

Je moet pas echt volledig overstappen als je ontoelaatbare beperkingen tegenkomt, maar met dit soort werken valt dat allemaal wel mee.

Na vluchtig gekeken te hebben ziet je werk er wel netjes uit :) .
DTD's zijn misschien op dit moment wel een goede oplossing. Maar je moet er natuurlijk wel rekening mee houden dat de structuur in de toekomst kan veranderen en gecompliceerder kan worden. In dat geval zou een XML Schema (of Relax NG) een betere keuze zijn.

  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 25-07 18:17
Aloha! (je moet wat met een gebrek aan zon) :)

Nou wilde ik toch even wat proberen met Relax NG en heb nu het volgende (kleine test) :

test.xml :
code:
1
2
3
4
5
6
7
<?xml version="1.0"?>
<rapport xmlns="test.nrg">                       
<vendor>
<id>test</id>
<naam>Tech Data</naam>
</vendor>
</rapport>

test.nrg:
code:
1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0"?>
<element name="rapport" xmlns="http://relaxng.org/ns/structure/1.0">
      <element name="vendor">
            <attribute name="id">
                <int/>
            </attribute>
            <attribute name="naam">
                <text/>
            </attribute>
      </element>

</element>

Nu open ik test.xml in mijn browser en geeft netjes alles weer, terwijl ik verwacht dat hij e.o.a. fout aangeeft omdat het "id" attribuut van "vendor" geen getal is.

Klopt dit ? en zo ja, hoe kan ik dan checken of mijn .xml file voldoet aan mijn schema ? Ik heb al gezocht naar XML validator's, maar degene die ik geprobeerd heb accepteren alleen XML files inclusief DTD (en die gebruik ik nu net niet meer)

SIZE does matter.
"You're go at throttle up!"


  • tomato
  • Registratie: November 1999
  • Niet online
Probeer bijvoorbeeld eens Jing, dat is een validator in Java.

IBM heeft volgens mij ook een validator die Relax NG kent...

[edit]
Hier vind je nog wat tools :)

  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 25-07 18:17
Nou, ik heb Jing gedownload maar zelfs bij de meest simpele uitvoering van mijn bestanden geeft ie een foutmelding.. Heeft iemand een idee ?

test.rng:
code:
1
2
3
4
5
6
<?xml version="1.0"?>
<element name="rapport" xmlns="http://relaxng.org/ns/structure/1.0">
      <element name="vendor">
              <attribute name="id"/>
      </element>
</element>

test.xml
code:
1
2
3
4
<?xml version="1.0"?>
<rapport xmlns="test.nrg">
    <vendor id="1"/>
</rapport>

Foutmelding die Jing geeft is :
Error at URL "file:/L:/xml/test.xml", line number 2:
unknown element "rapport" from namespace "test.nrg"

SIZE does matter.
"You're go at throttle up!"


  • tomato
  • Registratie: November 1999
  • Niet online
Je hebt volgens mij een verkeerd beeld van het begrip namespaces.

Je definieert je grammar in je Relax NG bestand. Dit gebeurt in het Relax NG formaat, welke onder de Relax NG namespace valt (http://relaxng.org/ns/structure/1.0).
Onder welke namespace je grammar valt kun je zelf opgeven (het 'ns' attribute).

Dit is wellicht allemaal wat verwarrend, ik zal daarom even als voorbeeld laten zien hoe het voor XHTML 1.0 gebeurt:

xhtml-strict.rng
code:
1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="UTF-8"?>

<grammar ns="http://www.w3.org/1999/xhtml"
       xmlns="http://relaxng.org/ns/structure/1.0">

<!-- hier volgt de XHTML Relax NG grammar -->

</grammar>

voorbeeld.xhtml
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="UTF-8"?>

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

    <title>titel</title>

</head>

<body>

    hoi hoi

</body>

</html>

De namespace van XHTML 1.0 is in dit geval uiteraard http://www.w3.org/1999/xhtml.

  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 25-07 18:17
Op woensdag 03 juli 2002 15:09 schreef tomato een bijna 100% helder verhaal
Thanks! Alweer een stap verder nu.

Als .nrg heb ik nu :
code:
1
2
3
4
5
6
7
8
9
10
<?xml version="1.0"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
<element name="rapport">
      <element name="vendor">
              <attribute name="id"/>
      </element>
</element>
</start>
</grammar>

Hierop kan Jing niets anders antwoorden dan "", oftewel "in orde"

Graag wil ik voor mezelf nog wat dingen duidelijk hebben.

- Vanuit de .XML file wordt dus niet verwezen naar de .RNG file ?

- Als ik van die <attribute> regel maak :
code:
1
<attribute name="id"><int/></attribute>

volgt er weer een error nl :
Error at URL "file:/L:/xml/test.rng", line number 6: found "int" element but expected a pattern

SIZE does matter.
"You're go at throttle up!"


  • tomato
  • Registratie: November 1999
  • Niet online
Skinny: Hierop kan Jing niets anders antwoorden dan "", oftewel "in orde"
Mooi :)
- Vanuit de .XML file wordt dus niet verwezen naar de .RNG file ?
Je zou zelf een verwijzing in je XML file op kunnen nemen (waar je eigen tools al dan niet wat mee doen), bestaande tools zullen er niets mee doen. Hierover is in ieder geval niets opgenomen in de Relax NG specificatie.
- Als ik van die <attribute> regel maak :
code:
1
<attribute name="id"><int/></attribute>

volgt er weer een error nl :
Kijk even in de Relax NG tutorial bij Datatyping ;)

  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 25-07 18:17
Op woensdag 03 juli 2002 15:59 schreef tomato het volgende:

Kijk even in de Relax NG tutorial bij Datatyping ;)
ROFL :D

Dit is echt te erg.. Die tutorial heb ik hier dus voor me liggen (uitgeprint) en inmiddels had ik ook die library opgegeven, maar toch deed hij het niet..

Bleek dus dat ik met mijn stomme hoofd "w3c.org" had getypt :)

SIZE does matter.
"You're go at throttle up!"

Pagina: 1