[xsd] Versioning op xml/xsd

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 15:52
Hallo,

Ik heb een vraag over versioning van xsd bestanden en hoe je xml bestanden kunt onderscheiden.

Wij krijgen hier op kantoor opdrachten van klanten binnen in xml formaat volgens een protocol dat door een onafhankelijke organisatie wordt ontwikkeld. Nou is dit protocol continu in beweging en zo kan het voorkomen dat nieuwe versies uitkomen waarin zaken zijn gewijzigd. Het gebeurt gelukkig niet al te vaak maar het kan dan ook zo zijn dat een attribuut opeens een element wordt, of andersom.

Laten we even aannemen dat ik van al die versies van dat protocol xsd bestanden heb. Als bedrijf willen we natuurlijk de laatste versie ondersteunen, maar tegelijkertijd willen we ook oudere versies nog een tijdje blijven ondersteunen, omdat we onze klanten niet willen dwingen 'meteen' over te gaan. Hier komt mijn probleem om de hoek kijken.

Ik krijg xml bestanden van die klanten, maar aan de buitenkant kan ik geen versienummer zien. Als ik ze ontvang dan gaat onze applicatie ze wel controleren op de inhoud aan de hand van de xsd. Als de schema validatie niet succesvol is, kan het bestand niet door ons worden verwerkt. Het liefst zou ik natuurlijk een soort van mogelijkheid zien om van te voren te weten wat voor versie een bestand is, maar dit vind ik lastig te realiseren. Bij mijn weten is hier ook niet echt een oplossing voor bedacht in xml.

Zou het dan handig zijn om een tabel bij te houden met welke versie klanten willen hebben en ook aan de hand daarvan te controleren? Kan ik ze allemaal controleren en dan maar kijken welke versie het is (als het niet compatible is, faalt de schema validatie). Wat is praktisch?

Ik hoop dat iemand hier goede ervaringen mee heeft :).

Acties:
  • 0 Henk 'm!

  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 18-09 22:40

Nick_S

++?????++ Out of Cheese Error

Het meest praktische is om alle xsd's een versie nummer te geven en de klant te laten aangeven welke xsd is gebruikt.

Neem als voorbeeld XHTML, deze kent 3 "versies":
XHTML 1.0 Strict -> http://www.w3.org/2002/08/xhtml/xhtml1-strict.xsd
XHTML 1.0 Transitional -> http://www.w3.org/2002/08/xhtml/xhtml1-transitional.xsd
XHTML 1.0 Frameset -> http://www.w3.org/2002/08/xhtml/xhtml1-frameset.xsd

Waarna in het xml document aangegeven kan worden welk schema is gebruikt:
XML:
1
2
3
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/2002/08/xhtml/xhtml1-strict.xsd">

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


Acties:
  • 0 Henk 'm!

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 15:52
Nick_S schreef op dinsdag 09 juni 2009 @ 12:00:
Waarna in het xml document aangegeven kan worden welk schema is gebruikt:
XML:
1
2
3
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/2002/08/xhtml/xhtml1-strict.xsd">
Ja, dat is allemaal zo, en dat doen we ook :). Maar als ik zo'n bestand krijg dan moet ik eigenlijk al vòòrdat ik hem inlees bepalen met welke versie ik hem wil inlezen. Want bij het inlezen controleer ik meteen of hij aan het schema voldoet.

Óf ik moet hem natuurlijk eerst "kaal" inlezen en dan de versie extraheren en dan vervolgens "goed" inlezen.

Acties:
  • 0 Henk 'm!

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

Samengevat moet je dus zorgen dat de namespaces van de XSD en je XML overeenkomen. ;) Ik zou niet het xsi:schemaLocation attribute hiervoor gebruiken, maar gewoon een xmlns, zoals bijvoorbeeld: xmlns:v="http://www.bedrijf.org/schemas/1.0" oid.

@bovenstaande: dan kan je toch je xml parser de namespaces van je binnenkomende XML uitlezen en checken welke versie het is? Als zij geen versienummering hanteren, zou ik als eerste proberen om dat te regelen. ;)

[ Voor 30% gewijzigd door RedRose op 09-06-2009 12:10 ]

Sundown Circus


Acties:
  • 0 Henk 'm!

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 15:52
RedRose schreef op dinsdag 09 juni 2009 @ 12:07:
@bovenstaande: dan kan je toch je xml parser de namespaces van je binnenkomende XML uitlezen en checken welke versie het is? Als zij geen versienummering hanteren, zou ik als eerste proberen om dat te regelen. ;)
Ja maar de parser die ik gebruik (in c#) wil al bij het parsen weten aan de hand van welke xsd hij hem moet controleren :). Dus het is eigenlijk een stadium te vroeg.

De versioning in de xsd's gaat in de volgende versie geregeld worden, maar daar wil ik nu dus alvast rekening mee houden.

Acties:
  • 0 Henk 'm!

  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 18-09 22:40

Nick_S

++?????++ Out of Cheese Error

Welke parser is dat dan, die niet met meerdere xsd's kan omgaan? Je geeft je parser toch gewoon alle xsd's en aan de hand van de namespace wordt dan de juiste definitie gekozen.

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


Acties:
  • 0 Henk 'm!

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 15:52
Nick_S schreef op dinsdag 09 juni 2009 @ 12:27:
Welke parser is dat dan, die niet met meerdere xsd's kan omgaan? Je geeft je parser toch gewoon alle xsd's en aan de hand van de namespace wordt dan de juiste definitie gekozen.
Hmmm, daar heb je een punt. Als de versie al in de namespace is opgenomen heb je voor elke versie een andere en pakt hij natuurlijk automatisch de juiste. Hmmmm. Niet aan gedacht.

Even denken of mijn vraag nou nog wel relevant is dan... :o.
Pagina: 1