Wat zijn de best practices voor versiebeheer van XML-schema’s?

Ik moet vaak XML-schema’s ontwerpen voor verschillende importroutines op basis van XML. Het is duidelijk dat XML-schema’s in de loop van de tijd zullen evolueren of dat ze bugs kunnen bevatten die moeten worden opgelost, dus het is belangrijk om de versie van het schema vast te leggen en een mechanisme te hebben om te binden aan een specifieke versie.

Momenteel heb ik twee scenario’s:

  1. De bug is gevonden in het schema en alle schema-instanties moeten voldoen aan de vaste versie.

  2. Het schema is geüpgraded en verdient de voorkeur, maar een oud schema moet ook worden ondersteund.

Eindelijk bedacht ik het opslaan van versie-informatie in de naamruimte van schema:

targetNamespace="http://schemas.company.com/Geodesy/2010/River.xsd"

Als ik een bug repareer, repareer ik deze in dezelfde naamruimte, maar als ik op het punt sta een schema te upgraden, moet ik een nieuwe naamruimte maken, maar met toegevoegde upgrademaand:

targetNamespace="http://schemas.company.com/Geodesy/2010/01/River.xsd"

En als ik meer dan één upgrade per maand heb, voeg dan ook gewoon een dag toe:

targetNamespace="http://schemas.company.com/Geodesy/2010/01/17/River.xsd"

Kent u een betere aanpak?


Antwoord 1, autoriteit 100%

Dit is zo’n moeilijk onderwerp dat het niet eens grappig is, en een onderwerp waar ik jarenlang consultancy-ondersteuning voor heb gegeven.

Er zijn veel best practicesdie er zijn, maar de meeste werken niet in alle situaties. Velen pleiten bijvoorbeeld voor het gebruik van “xsd:any” om extensies toe te staan, en dat is slechts een recept voor een ramp als ontwikkelaars de leiding hebben over het onderhoud van het schema en het in een dump veranderen.

Hier zijn enkele tips voor als je aan de slag gaat:

  • Voer geeneen klein versienummer, microversienummer, datum of iets dergelijks in uw naamruimte in. Elke keer dat u de naamruimte wijzigt, verbreekt u alle verwerkingstoepassingen.
  • Doeplaats een attribuut “version” in het XML-instantiedocument. Dat stelt een verwerkingstoepassing of een versie-adapterservice in staat om erachter te komen wat er wordt verwerkt.
  • Doeeen beleid specificeren van wat een achterwaarts compatibele wijziging inhoudt, bijvoorbeeld: het toevoegen van optionele elementen zal de afzenders niet breken, en ook de ontvangers niet als ze een beleid gebruiken om elementen te negeren die ze niet doen weten (JAXB en XMLBeans kunnen op deze manier worden geconfigureerd)

Veel succes!


Antwoord 2, autoriteit 8%

http://www.xml.com/pub/ a/2004/07/21/design.htmlbiedt goede richtlijnen en XML Schema 1.1 maakt ‘versiebeheer’ mogelijk door voorwaardelijke opname (http://www.w3.org/TR/xmlschema11-1/#cip).

Other episodes