---
title: "XML in de cloud"
date: "2011-01-07"
categories: 
  - "hardware"
tags: 
  - "cloud-services"
  - "databasespy"
  - "missionkit"
description: Ontdek hoe u Altova-tools kunt verbinden met Amazon RDS, een MySQL-database kunt opzetten en XML-functies kunt gebruiken voor databaseapplicaties in de cloud.
---
Status: #blog

Tags:  #cloud-services #databasespy #missionkit

Categories: [xml](/blog/nl/category/xml.md) [cloud](/blog/nl/category/cloud.md)
# XML in de cloud

## Werken met Altova-tools en de Amazon Relational Database Service (Amazon RDS)

Steeds meer bedrijven ontdekken de voordelen van het implementeren van database-applicaties in de cloud:

- Hoge beschikbaarheid en betrouwbaarheid
- Automatische schaalvergroting
- Vrijheid van hardwarekosten en onderhoudsvereisten

In dit blogbericht laten we zien hoe u verbinding kunt maken met de Amazon Relational Database Service (Amazon RDS) en een kleine database kunt aanmaken met behulp van Altova [DatabaseSpy](https://www.altova.com/nl/databasespy.html). Omdat de databaseverbindingstool consistent is in de [Altova MissionKit](https://www.altova.com/nl/missionkit/software-development-tools.html), kunt u op dezelfde manier verbinding maken met behulp van [XMLSpy](https://www.altova.com/nl/xmlspy.html), [MapForce](https://www.altova.com/nl/mapforce.html) of [StyleVision](https://www.altova.com/nl/stylevision.html). 

Als u de stappen hieronder zelf wilt volgen, moet u zich aanmelden voor een Amazon Web Services (AWS) account via: [http://aws.amazon.com/rds/](http://aws.amazon.com/rds/) U kunt ook een volledig functionerende, gratis proefversie van Altova MissionKit of een individuele Altova-applicatie downloaden via: [https://www.altova.com/download-trial/](https://www.altova.com/nl/download-trial/)

##### Maak een lokaal prototype

Amazon RDS is gebaseerd op MySQL, dus we gaan een kleine, lokale database aanmaken in de MySQL Community Edition, waarna we deze migreren naar Amazon RDS en onze database in de cloud testen. Hoewel MySQL XML niet ondersteunt als een datatypen voor databasekolommen, ondersteunen MySQL 5.1 en 6.0 wel bepaalde bewerkingen voor XML-gegevens die zijn opgeslagen als tekst. Voor deze oefening zullen we enkele van de MySQL XML-voorbeelden aanpassen en uitbreiden die te vinden zijn in de MySQL-referentiemateriaalbronnen, te vinden op de volgende links:
[http://dev.mysql.com/doc/refman/5.1/en/xml-functions.html](http://dev.mysql.com/doc/refman/5.1/en/xml-functions.html) [http://dev.mysql.com/tech-resources/articles/xml-in-mysql5.1-6.0.html](http://dev.mysql.com/tech-resources/articles/xml-in-mysql5.1-6.0.html) [http://dev.mysql.com/tech-resources/articles/mysql-5.1-xml.html](http://dev.mysql.com/tech-resources/articles/mysql-5.1-xml.html)
Allereerst hebben we DatabaseSpy gestart en verbonden met onze lokale MySQL Community Edition. We hebben een nieuwe databron aangemaakt, genaamd LocalPrototype, en een nieuw database-schema gecreëerd, dat we XMLtest hebben genoemd. Hier worden de online browser en het venster met eigenschappen van DatabaseSpy weergegeven: 

[![DatabaseSpy-projectvenster en -eigenschappenvenster](https://lh3.ggpht.com/_REdrfeVqYdU/TSYvog3-1xI/AAAAAAAAAQc/FmMFHyM0-yc/blogSnap1_thumb%5B1%5D.png?imgmax=800 "DatabaseSpy Project and Properties windows")](http://lh6.ggpht.com/_REdrfeVqYdU/TSYvoDdXvWI/AAAAAAAAAQU/qEea5H03j3U/s1600-h/blogSnap1%5B3%5D.png) 

Vervolgens hebben we twee tabellen gemaakt, genaamd "boeken" en "steden", en data ingevoerd volgens de voorbeelden in de MySQL-documentatie. Hieronder ziet u een overzicht van onze tabellen in DatabaseSpy: 

[![DatabaseSpy: Ontwerpweergave](https://lh5.ggpht.com/_REdrfeVqYdU/TSYvpYyta6I/AAAAAAAAAQk/3oJcRfcVafs/blogSnap2_thumb%5B1%5D.png?imgmax=800 "DatabaseSpy Design View")](http://lh5.ggpht.com/_REdrfeVqYdU/TSYvpNqGrlI/AAAAAAAAAQg/m15NZt1yLgU/s1600-h/blogSnap2%5B3%5D.png) 

We kunnen specifieke queries uitvoeren en de inhoud van onze tabellen weergeven in gestapelde resultatenvensters:

[![DatabaseSpy: gestapelde resultatenvensters](https://lh6.ggpht.com/_REdrfeVqYdU/TSYvxCJz7BI/AAAAAAAAAQs/KrKbkgW_cKc/blogSnap3_thumb%5B1%5D.png?imgmax=800 "DatabaseSpy stacked results windows")](http://lh5.ggpht.com/_REdrfeVqYdU/TSYvqaOVCqI/AAAAAAAAAQo/sDFsYLrNi7k/s1600-h/blogSnap3%5B3%5D.png)

Let op dat de kolom "doc" in de tabel "books" XML-gegevens bevat, hoewel deze is gedefinieerd als varchar(150). MySQL ondersteunt twee functies voor het werken met XML in tekstvelden: ExtractValue() en UpdateXML(), die op individuele elementen kunnen werken via XPath-expressies. Hieronder staat een eenvoudige ExtractValue()-query om alleen de initialen van de auteur uit elke rij in de tabel "books" op te halen: 

[![De functie `ExtractValue()`](https://lh3.ggpht.com/_REdrfeVqYdU/TSYvyNUEhfI/AAAAAAAAAQ0/JOPn0w1ZAOA/blogSnap4_thumb%5B1%5D.png?imgmax=800 "ExtractValue( ) function")](http://lh4.ggpht.com/_REdrfeVqYdU/TSYvxiQrogI/AAAAAAAAAQw/rlT5OA5cB-M/s1600-h/blogSnap4%5B3%5D.png) 

De functie UpdateXML() kan worden gebruikt om de inhoud van individuele XML-elementen te wijzigen met behulp van een SQL-expressie. In de onderstaande screenshot wijzigt de query op regel 1 de inhoud van elke rij in onze tabel met boeken, en de query op regel 2 retourneert de nieuwe waarden: 

[![Functie om XML-gegevens bij te werken](https://lh4.ggpht.com/_REdrfeVqYdU/TSYvyzem2KI/AAAAAAAAAQ8/BCW9ZEzc77k/blogSnap5_thumb%5B1%5D.png?imgmax=800 "UpdateXML( ) function")](http://lh5.ggpht.com/_REdrfeVqYdU/TSYvyTiRDNI/AAAAAAAAAQ4/qna29a6Bw6o/s1600-h/blogSnap5%5B3%5D.png)

We kunnen de functie Concat() ook gebruiken om XML-elementen toe te voegen aan niet-XML-gegevens, zoals de tabel met steden, zoals hieronder wordt weergegeven: 

[![De functie "Concat()"](https://lh3.ggpht.com/_REdrfeVqYdU/TSYvz4jJO8I/AAAAAAAAARE/GECrInoROUM/blogSnap6_thumb%5B1%5D.png?imgmax=800 "Concat( ) function")](http://lh4.ggpht.com/_REdrfeVqYdU/TSYvzdA02MI/AAAAAAAAARA/IHlT_sKpzAk/s1600-h/blogSnap6%5B3%5D.png)

Tot nu toe hebben onze XML-query's gewerkt op alle rijen van elke tabel. Om query's voor een enkele rij te vereenvoudigen, is het handig om een kolom toe te voegen aan de tabel om een uniek rij-indexnummer op te slaan. We kunnen een kopie maken van onze "boeken"-tabel en een kolom toevoegen met de naam "id" om het rij-indexnummer op te slaan. De "id"-kolom kan ook dienen als een handige externe sleutel om een specifiek XML-document in onze tabel te refereren vanuit een rij in een andere tabel. 

Bijvoorbeeld, u kunt een tabel definiëren die de namen van sollicitanten bevat, met een externe sleutel die verwijst naar het in XML-formaat opgeslagen curriculum vitae van elke kandidaat, opgeslagen in een aparte tabel. U kunt de [SQL-editor](https://www.altova.com/nl/databasespy/sql-editor.html) in DatabaseSpy gebruiken om een CREATE-statement te genereren voor de bestaande tabel met boeken en deze direct te bewerken, of u kunt de [ontwerpeditor](https://www.altova.com/nl/databasespy/database-design.html) van DatabaseSpy gebruiken om de tabel grafisch op te bouwen. (Voor meer informatie, zie het [DatabaseSpy](https://www.altova.com/nl/databasespy.html)-gedeelte van de [Altova](https://www.altova.com/nl/)-website.) 

Aangezien we van plan zijn om dezelfde queries later uit te voeren in Amazon RDS, hebben we een SQL CREATE-statement en SQL INSERT-statements samengevoegd tot één script voor de tabel "books2". De onderstaande screenshot toont een deel van dit script voor "books2": 

[![Maak een script om een tabel te maken](https://lh5.ggpht.com/_REdrfeVqYdU/TSYwOm9o6qI/AAAAAAAAARM/DRJQIGyrS7M/blogSnap6a_thumb%5B3%5D.png?imgmax=800 "Create table script")](http://lh5.ggpht.com/_REdrfeVqYdU/TSYv0JrSNhI/AAAAAAAAARI/T4-ylo2HPaY/s1600-h/blogSnap6a%5B7%5D.png) 

We kunnen een query uitvoeren op de tabel "books2" die de unieke ID-kolom voor elke rij weergeeft: 

[![SQL-SELECT-query](https://lh6.ggpht.com/_REdrfeVqYdU/TSYwQHmnPoI/AAAAAAAAARU/Mi1mEaTUMU4/blogSnap7_thumb%5B4%5D.png?imgmax=800 "SQL SELECT query")](http://lh3.ggpht.com/_REdrfeVqYdU/TSYwPEtwIdI/AAAAAAAAARQ/gPgwsQX94Ak/s1600-h/blogSnap7%5B8%5D.png) 

Nu kunnen we onze UpdateXML() en ExtractValue() functies verbeteren, zodat ze kunnen werken met individuele rijen: 

[![blogSnap8](https://lh5.ggpht.com/_REdrfeVqYdU/TSYyzesZA8I/AAAAAAAAARc/Le1Qs6k4GMY/blogSnap8_thumb%5B2%5D.png?imgmax=800 "blogSnap8")](http://lh4.ggpht.com/_REdrfeVqYdU/TSYwQfREjtI/AAAAAAAAARY/sUtXyDoOq7A/s1600-h/blogSnap8%5B6%5D.png) [![blogSnap9](https://lh5.ggpht.com/_REdrfeVqYdU/TSYy0nw8n2I/AAAAAAAAARk/hRPWhnmcudI/blogSnap9_thumb%5B1%5D.png?imgmax=800 "blogSnap9")](http://lh6.ggpht.com/_REdrfeVqYdU/TSYy0LgjvmI/AAAAAAAAARg/yh-JtXmQR2U/s1600-h/blogSnap9%5B3%5D.png) 

Dit geeft ons een goede basisset van voorbeelden die we naar de cloud kunnen brengen en in een Amazon RDS-omgeving kunnen testen.

## Verbind DatabaseSpy met de Amazon RDS cloud

Nadat u de instructies in de [AWS Management Console](http://aws.amazon.com/console/) hebt gevolgd om een database-instantie op Amazon RDS aan te maken, maakt de verbindingswizard het eenvoudig om met DatabaseSpy aan de slag te gaan. Kies eenvoudigweg de MySQL-optie, zoals hieronder wordt weergegeven: 

[![DatabaseSpy-verbinding assistent](https://lh5.ggpht.com/_REdrfeVqYdU/TSYy1HzeX7I/AAAAAAAAARs/OV62tBUdU1g/blogSnap10_thumb%5B1%5D.png?imgmax=800 "DatabaseSpy Connection Wizard")](http://lh4.ggpht.com/_REdrfeVqYdU/TSYy04hWtSI/AAAAAAAAARo/ePZmjb3wIbM/s1600-h/blogSnap10%5B3%5D.png) 

De eerste keer dat u verbinding maakt, moet u een nieuwe DSN (Data Source Name) aanmaken. Na die eerste keer kunt u een bestaande DSN selecteren uit een lijst door de optie "Gebruik een bestaande databronnaam" te kiezen. U kunt zelfs de oorspronkelijke DSN opnieuw gebruiken wanneer u vanuit XMLSpy, MapForce of StyleVision verbinding maakt.

[![Verbinding maken met MySQL](https://lh5.ggpht.com/_REdrfeVqYdU/TSYy2KLWVjI/AAAAAAAAAR0/P_SfoWqNqmk/blogSnap11_thumb%5B1%5D.png?imgmax=800 "Connecting to MySQL")](http://lh5.ggpht.com/_REdrfeVqYdU/TSYy1s8cwkI/AAAAAAAAARw/Vo8A8G5y5k4/s1600-h/blogSnap11%5B3%5D.png) 

In het verbindingsvenster, vul de volgende informatie in:

- **Naam van de databron:** Dit is de naam die vermeld zal worden in het DatabaseSpy-projectvenster en in de lijst met bestaande databronnen wanneer u opnieuw verbinding maakt.
- **Beschrijving:** Informatie ter informatie, voor uw eigen referentie.
- **Server:** Dit is de naam van de endpoint, zoals vermeld in het dashboard van uw Amazon RDS-account.
- **Poort:** 3306 – zorg ervoor dat uw IT-afdeling deze poort niet blokkeert met een firewall!
- **Gebruikersnaam / Wachtwoord**: Dit is een gebruikersaccount die u heeft aangemaakt in Amazon RDS.
- **Database:** De standaardnaam van de database die u hebt ingesteld toen u uw RDS-instantie hebt gestart.

[![MySQL Connector/ODBC](https://lh4.ggpht.com/_REdrfeVqYdU/TSYy3A4BZNI/AAAAAAAAAR8/MQ-j5h1PdMQ/blogSnap12_thumb%5B1%5D.png?imgmax=800 "MySQL Connector/ODBC")](http://lh6.ggpht.com/_REdrfeVqYdU/TSYy2g81jPI/AAAAAAAAAR4/yz8-Isp-rCY/s1600-h/blogSnap12%5B3%5D.png) 

We hebben verbinding gemaakt met onze Amazon RDS cloud-database binnen hetzelfde DatabaseSpy-project dat we hadden ontwikkeld voor het lokale prototype. Hieronder een screenshot van het projectvenster, waarin zowel de namen van de databronnen als de SQL-bestanden die we aan ons project hebben toegevoegd, te zien zijn: 

[![Projectvenster van DatabaseSpy met cloudverbinding](https://lh6.ggpht.com/_REdrfeVqYdU/TSYy4Z2yQAI/AAAAAAAAASE/jjkGuAVBZYY/blogSnap15_thumb%5B1%5D.png?imgmax=800 "DatabaseSpy Project window with cloud connection")](http://lh5.ggpht.com/_REdrfeVqYdU/TSYy3qGsQpI/AAAAAAAAASA/hC99hBGpc3Y/s1600-h/blogSnap15%5B3%5D.png) 

Voordat we onze tabellen aanmaken en de queries uitvoeren, is het interessant om de versies van elk systeem te controleren. De onderstaande screenshots tonen een query die versie-informatie opvraagt voor elk systeem. Let op dat de grijze balk direct boven elke query aangeeft welke dataconnectie aan de SQKL-statement is gekoppeld. 

[![Versie gerapporteerd door de lokale server](https://lh3.ggpht.com/_REdrfeVqYdU/TSYy5G-k3SI/AAAAAAAAASM/WwjShCXN8NM/blogSnap16_thumb%5B1%5D.png?imgmax=800 "Version reported by the local server")](http://lh5.ggpht.com/_REdrfeVqYdU/TSYy4w4Lt3I/AAAAAAAAASI/7HQFtTCam7g/s1600-h/blogSnap16%5B3%5D.png) 

[![Versie gerapporteerd door de cloudserver](https://lh5.ggpht.com/_REdrfeVqYdU/TSYy6bIVXoI/AAAAAAAAASU/-JyDD32Kp2g/blogSnap17_thumb%5B1%5D.png?imgmax=800 "Version reported by the cloud server")](http://lh3.ggpht.com/_REdrfeVqYdU/TSYy6A4UeJI/AAAAAAAAASQ/G1YLJDmUqrQ/s1600-h/blogSnap17%5B3%5D.png) 

Volgens de rapporten van Amazon RDS draait de server versie 5.1 van de MySQL Community Server, dezelfde versie als ons lokale prototype – een veelbelovend teken!

## Migreer het lokale project naar de cloud

We kunnen elk van onze oorspronkelijke scripts voor het aanmaken van tabellen openen en deze uitvoeren in de cloud-database door het uitvoeringsdoel opnieuw toe te wijzen in het eigenschappenvenster 

[![Selectie van de databron in het venster met eigenschappen van DatabaseSpy](https://lh5.ggpht.com/_REdrfeVqYdU/TSYy7_iTcXI/AAAAAAAAASc/q0X1LX25ZVI/blogSnap19_thumb%5B1%5D.png?imgmax=800 "Data Source selection in the DatabaseSpy Properties window")](http://lh6.ggpht.com/_REdrfeVqYdU/TSYy7SFih4I/AAAAAAAAASY/u2ciH6xLgA4/s1600-h/blogSnap19%5B3%5D.png) 

De grijze balk met de tekst "Execution Target" (doel van de uitvoering) aan de bovenkant van het venster van de SQL-editor geeft aan dat de cloud-database Amazon RDS het doel is van de query:

[![DatabaseSpy SQL-editor venster](https://lh6.ggpht.com/_REdrfeVqYdU/TSYy8UqW2LI/AAAAAAAAASk/f8LxhxA5KVE/blogSnap18_thumb%5B1%5D.png?imgmax=800 "DatabaseSpy SQL Editor window")](http://lh6.ggpht.com/_REdrfeVqYdU/TSYy8HAL2UI/AAAAAAAAASg/rrrnJEP-cZ8/s1600-h/blogSnap18%5B3%5D.png) 

Nadat we op dezelfde manier de tabellen "books" en "books2" hebben aangemaakt, kunnen we elk van de SQL-query's in de cloud-database uitvoeren. Voorbeeld van het gebruik van de functie ExtractValue() voor alle rijen: 

[![De functie `ExtractValue()`](https://lh6.ggpht.com/_REdrfeVqYdU/TSYy9LMPvLI/AAAAAAAAASs/ELCuIt6yr6A/blogSnap20_thumb%5B2%5D.png?imgmax=800 "ExtractValue( ) function")](http://lh6.ggpht.com/_REdrfeVqYdU/TSYy8xnwAYI/AAAAAAAAASo/ZiXvT3Dpt3M/s1600-h/blogSnap20%5B6%5D.png) 

Een `Concat()` query om XML-uitvoer te genereren op basis van niet-XML-gegevens in een tabel: 

[![Het gebruik van de functie Concat() om XML-elementen toe te voegen aan gegevens uit een tabel die geen XML-gegevens bevat](https://lh4.ggpht.com/_REdrfeVqYdU/TSYy-KZdIUI/AAAAAAAAAS0/tBjejnmSxt8/blogSnap21_thumb%5B1%5D.png?imgmax=800 "Using the Concat( ) function to add XML elements to data from a non-XML table")](http://lh5.ggpht.com/_REdrfeVqYdU/TSYy9ozYo3I/AAAAAAAAASw/hiDcxS51Fg8/s1600-h/blogSnap21%5B3%5D.png)

Voorbeeld van de functie UpdateXML() voor een enkele rij in een tabel.

[![Het gebruik van de functie UpdateXML() in de Amazon RDS cloud](https://lh6.ggpht.com/_REdrfeVqYdU/TSYy-5p4W0I/AAAAAAAAAS8/S-IU7BoJrc4/blogSnap22_thumb%5B1%5D.png?imgmax=800 "Using the UpdateXML( ) function in the Amazon RDS cloud")](http://lh5.ggpht.com/_REdrfeVqYdU/TSYy-egtAMI/AAAAAAAAAS4/bEza7pRhyTs/s1600-h/blogSnap22%5B3%5D.png) 

`ExtractValue()` voor een enkele rij: 

[![blogSnap23](https://lh5.ggpht.com/_REdrfeVqYdU/TSYy_qnwgsI/AAAAAAAAATE/gRjQHwNgX3w/blogSnap23_thumb%5B1%5D.png?imgmax=800 "blogSnap23")](http://lh5.ggpht.com/_REdrfeVqYdU/TSYy_ePFw3I/AAAAAAAAATA/gc3yssi4DvI/s1600-h/blogSnap23%5B3%5D.png)

## Conclusie

In elke test die we uitvoerden, gedroeg Amazon RDS zich precies zoals de lokale MySQL community-editie. Dit gedrag maakt het voor ontwikkelaars veel efficiënter om nieuwe cloud-databaseapplicaties te ontwikkelen en te testen, of om bestaande applicaties te verbeteren, zonder dat ze de kosten van cloudresources hoeven te betalen voor ontwikkelingscycli. 

We hebben ook de werking van de MySQL XML-functies geverifieerd voor XML-gegevens die zijn opgeslagen in tekstkolommen in de clouddatabases. Onze XML-gegevens waren zeer beperkt; de tekstkolom in onze tabel met boeken was beperkt tot 150 tekens. Echter, MySQL stelt u in staat om veel grotere XML-documenten in één enkele kolom op te slaan. Elke tabel heeft een maximale rijgrootte van 65.535 bytes. Zelfs als uw tabel een indexkolom gebruikt, betekent dit dat een varchar-kolom voor één XML-item meer dan 64.000 bytes kan bevatten. Als u nog grotere XML-documenten moet opslaan, biedt MySQL de datatypes MediumText en LongText, vergelijkbaar met BLOBs. MediumText kan meer dan 16 miljoen enkele bytes aan tekens bevatten, en LongText kan tot 4 GB opslaan. Hoewel dit niet in deze blogpost wordt geïllustreerd, hebben we de functies ExtractValue() en UpdateXML() succesvol getest met de datatypes MediumText en LongText.

Wanneer u grote XML-gegevensbestanden moet opslaan, kan het schrijven van XPath-expressies om individuele elementen te identificeren een uitdaging vormen. De XPath-analyzer die bij XMLSpy wordt geleverd, is een onmisbaar hulpmiddel dat het [testen en debuggen van XPath 1.0- en 2.0-expressies vergemakkelijkt](https://www.altova.com/nl/xmlspy/xpath-analyzer.html). Terwijl u een XPath-expressie in de analyzer typt, evalueert XMLSpy deze en geeft het de resulterende verzameling knooppunten direct weer. Dit kan u uren aan debugtijd besparen, die u anders zou besteden aan het proberen te begrijpen en op te sporen van XPath-problemen. 

In toekomstige blogposts zullen we andere manieren onderzoeken waarop XMLSpy, MapForce, DiffDog en DatabaseSpy ontwikkelaars kunnen helpen bij het versnellen van de ontwikkeling van cloudapplicaties met Amazon RDS. We kijken ernaar uit u binnenkort weer te zien! Als u zelf wilt ervaren hoe goed de Altova-tools werken met Amazon RDS, [download dan een gratis proefversie](https://www.altova.com/nl/download/missionkit/software_development_tools_enterprise.html) van de [Altova MissionKit](https://www.altova.com/nl/missionkit/software-development-tools.html).
