<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Christophe Nowicki &#187; CSV</title>
	<atom:link href="http://www.csquad.org/tag/csv/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.csquad.org</link>
	<description>Just for fun</description>
	<lastBuildDate>Fri, 14 Jan 2011 08:32:33 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Validation d&#8217;un fichier CSV à l&#8217;aide d&#8217;un Schéma XML</title>
		<link>http://www.csquad.org/2008/06/03/validation-dun-fichier-csv-a-laide-dun-schema-xml/</link>
		<comments>http://www.csquad.org/2008/06/03/validation-dun-fichier-csv-a-laide-dun-schema-xml/#comments</comments>
		<pubDate>Tue, 03 Jun 2008 06:10:49 +0000</pubDate>
		<dc:creator>cscm</dc:creator>
				<category><![CDATA[Work]]></category>
		<category><![CDATA[CSV]]></category>
		<category><![CDATA[MAVISE]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.csquad.org/?p=56</guid>
		<description><![CDATA[Malgré tout le mal qu’il est possible de penser ou de dire sur le format de fichier CSV, celui-ci présente beaucoup d’avantages :

il est facilement manipulable pour les utilisateurs à l’aide d’un tableur comme Calc, Gnumeric ou bien Excel ;
il permet d’écrire rapidement et facilement des routines d’import / export ;
il permet d’échanger les données [...]]]></description>
			<content:encoded><![CDATA[<p>Malgré tout le mal qu’il est possible de penser ou de dire sur le format de fichier CSV, celui-ci présente beaucoup d’avantages :</p>
<ul>
<li>il est facilement manipulable pour les utilisateurs à l’aide d’un tableur comme Calc, Gnumeric ou bien Excel ;</li>
<li>il permet d’écrire rapidement et facilement des routines d’import / export ;</li>
<li>il permet d’échanger les données entre des bases et des systèmes hétérogène.</li>
</ul>
<p>Mais ce format de fichier ne dispose pas d’un système de validation. Dans la plupart des cas ce sont les routines d’import / export qui prennent en charge la validation des données et de leur mise en forme.</p>
<p>Ce travail est pénible, répetitif et ennuyeux mais nécessaire si vous ne voulez pas qu’un fichier mal formaté ne corrompe les données de votre base.</p>
<p>L’objectif de cette article est de proposer une solution simple permettant la validation d’un fichier CSV en utilisant les fonctionnalités offertes par les schémas XML.</p>
<p>Les exemples fournis sont écrit à l’aide du language de programmation PHP5.</p>
<h3>Transformation CSV vers XML</h3>
<p>Votre fichier doit contenir sur la 1ère ligne, le nom de chaque cologne :</p>
<p>
<strong>&#8220;CHANNEL&#8221;;&#8221;COMPANY&#8221;;&#8221;BVD_ID_Groupe_1&#8243;;&#8221;BVD_ID_Groupe_2&#8243;;&#8221;GENRE&#8221;;&#8221;URL&#8221;;&#8221;OTHER_URL&#8221;;&#8221;COMPETENT_AUTHORITY&#8221;</strong><br />
&#8220;Canal+ Film 1&#8243;;&#8221;C MORE ENTERTAINMENT AB&#8221;;&#8221;NL33268595&#8243;;&#8221;DE8330261794&#8243;;&#8221;CIN&#8221;;&#8221;http://www.canalplus.se&#8221;;&#8221;http://www.sbsbroadcasting.com/, http://www.prosiebensat1.de/&#8221;;&#8221;RTVV&#8221;<br />
&#8220;Canal+ Film 2&#8243;;&#8221;C MORE ENTERTAINMENT AB&#8221;;&#8221;NL33268595&#8243;;&#8221;DE8330261794&#8243;;&#8221;CIN&#8221;;&#8221;http://www.canalplus.se&#8221;;&#8221;http://www.sbsbroadcasting.com/, http://www.prosiebensat1.de/&#8221;;&#8221;RTVV&#8221;<br />
&#8220;Canal+ Film 2 Sport Weekend&#8221;;&#8221;C MORE ENTERTAINMENT AB&#8221;;&#8221;NL33268595&#8243;;&#8221;DE8330261794&#8243;;&#8221;CIN&#8221;;&#8221;http://www.canalplus.se&#8221;;&#8221;http://www.sbsbroadcasting.com/, http://www.prosiebensat1.de/&#8221;;&#8221;RTVV&#8221;<br />
&#8220;Canal+ Film 3&#8243;;&#8221;C MORE ENTERTAINMENT AB&#8221;;&#8221;NL33268595&#8243;;&#8221;DE8330261794&#8243;;&#8221;CIN&#8221;;&#8221;http://www.canalplus.se&#8221;;&#8221;http://www.sbsbroadcasting.com/, http://www.prosiebensat1.de/&#8221;;&#8221;RTVV&#8221;<br />
&#8220;Canal+ Film HD&#8221;;&#8221;C MORE ENTERTAINMENT AB&#8221;;&#8221;NL33268595&#8243;;&#8221;DE8330261794&#8243;;&#8221;CIN&#8221;;&#8221;http://www.canalplus.se&#8221;;&#8221;http://www.sbsbroadcasting.com/, http://www.prosiebensat1.de/&#8221;;&#8221;RTVV&#8221;
</p>
<p>Pour transformer le fichier CSV en XML, il suffit de lire le fichier CSV avec la fonction fgetcsv et mettre les données dans des balisent XML : <a href="http://svn.csquad.org/misc/csv_xsd/csv_to_xml.php">csv_to_xml.php</a></p>
<p>Une fichier CSV converti en XML ressemble à cela  : <a href="http://svn.csquad.org/misc/csv_xsd/channel.xml">channel.xml</a></p>
<h3>Validation du fichier XML</h3>
<p>Il ne reste plus qu’à écrire le schéma permettant de valider le fichier XML : <a href="http://svn.csquad.org/misc/csv_xsd/channel.xsd">channel.xsd</a></p>
<p>Vous pouvez tester vos schéma en ligne de commande en utilisant la commande <em>xmllint</em> issue du paquet Debian <em>libxml2-utils</em>   :</p>
<blockquote><p><code><br />
$ xmllint --noout --schema channel.xsd channel.xml<br />
channel.xml validates<br />
</code></p></blockquote>
<h3>Validation en PHP</h3>
<p>Une fois que votre schéma est correct et permet de valider le contenu du fichier XML, il faut l’intégrer directement dans votre application : <a href="http://svn.csquad.org/misc/csv_xsd/validate.php">validate.php</a></p>
<h3>Conculsion</h3>
<p>Cette méthode apporte les avantages suivants :</p>
<ul>
<li>Les règles de validation sont décrites directement via le schéma, et celui-ci dispose de nombreuses fonctionnalités tels les types de bases, les expression rationnelle, les séquences, etc…</li>
<li>Les messages d’erreur sont compréhensibles pour l’utilisateur même, s’il faut parfois les traduire (en convertissant les numéros de lignes et certaines notions) ;</li>
<li>La simplicité ;0)</li>
</ul>
<p>Cette technique a été mise en oeuvre dans le cadre du projet <a href="http://mavise.obs.coe.int/">MAVISE</a> pour valider plus d’une vingtaine de formats de fichiers différents.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.csquad.org/2008/06/03/validation-dun-fichier-csv-a-laide-dun-schema-xml/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

