Ce document présente une bibliothèque de types, d'éléments et d'attributs XML permettant de représenter les données d'identification SIREN, NIC et SIRET.
La définition formelle de cette bibliothèque est réalisée sous la forme d'un schéma W3C XML Schema.
Certains types présentés ici ont été introduits dans la première version de l'espace de noms, et obéissent à des règles de nommage qui ont été depuis abandonnées. Ils ont été remplacés par des types équivalents respectant les nouvelles règles et sont indiqués ci-dessous comme d'usage déconseillés. Ils seront supprimés dans les prochaines versions de l'expace de noms.
SIREN, NIC et SIRET constituent un système d'identification des sociétés françaises et de leurs établissements conforme à la norme ISO 6523 et ces identifiants sont donc susceptibles d'être utilisés mondialement.
Les types, éléments et attributs décrits décrit dans ce module font partie de l'espace de noms INSEE : http://xml.insee.fr/schema
Cette documentation et les ressources qui en dépendent (schémas, exemples, transformations XSLT) sont soumises aux conditions d'utilisation des informations publiées sur le site de l'INSEE.
La définition d'un numéro SIREN sous forme d'un type simple est la suivante :
§1.
<xs:simpleType name="SIRENType"> <xs:restriction base="ie:ChaineNumeriqueType"> <xs:length value="9"/> </xs:restriction> </xs:simpleType>
Ce type peut être affecté dans un schéma pour définir des éléments ou attributs contenant des numéros SIREN, par exemple :
§2.
<xs:element name="mon-element-siren" type="ie:SIRENType"/>
Les éléments ou attributs ainsi définis peuvent ensuite être utilisés dans des documents XML, par exemple :
§3.
<ex:mon-element-siren>422260208</ex:mon-element-siren>
La définition de l'élément SIREN est la suivante:
§4.
<xs:element name="SIREN" type="ie:SIRENType"/>
Les éléments SIREN peuvent être utilisés directement dans des documents XML, par exemple :
§5.
<ex:entreprise> <ie:SIREN>422260208</ie:SIREN> <ex:nom>Dyomedea SARL</ex:nom> </ex:entreprise>
La définition de l'attribut siren est la suivante:
§6.
<xs:attribute name="siren" type="ie:SIRENType"/>
Les attributs siren peuvent être utilisés directement dans des documents XML, par exemple :
§7.
<ex:entreprise ie:siren="422260208"> <ex:nom>Dyomedea SARL</ex:nom> </ex:entreprise>
La définition d'un NIC sous forme d'un type simple est la suivante :
§8.
<xs:simpleType name="NICType"> <xs:restriction base="ie:ChaineNumeriqueType"> <xs:length value="5"/> </xs:restriction> </xs:simpleType>
Ce type peut être affecté dans un schéma pour définir des éléments ou attributs contenant des numéros NIC, par exemple :
§9.
<xs:element name="mon-element-nic" type="ie:NICType"/>
Les éléments ou attributs ainsi définis peuvent ensuite être utilisés dans des documents XML, par exemple :
§10.
<ex:mon-element-nic>00026</ex:mon-element-nic>
La définition de l'élément NIC est la suivante:
§11.
<xs:element name="NIC" type="ie:NICType"/>
Les éléments NIC peuvent être utilisés directement dans des documents XML, par exemple :
§12.
<ex:entreprise> <ie:SIREN>422260208</ie:SIREN> <ex:nom>Dyomedea SARL</ex:nom> <ex:etablissements> <ex:etablissement> <ie:NIC>00026</ie:NIC> <ex:nom>Établissement principal</ex:nom> </ex:etablissement> </ex:etablissements> </ex:entreprise>
La définition de l'attribut nic est la suivante:
§13.
<xs:attribute name="nic" type="ie:NICType"/>
Les attributs NIC peuvent être utilisés directement dans des documents XML, par exemple :
§14.
<ex:entreprise ie:siren="422260208"> <ex:nom>Dyomedea SARL</ex:nom> <ex:etablissements> <ex:etablissement ie:nic="00026"> <ex:nom>Établissement principal</ex:nom> </ex:etablissement> </ex:etablissements> </ex:entreprise>
Un numéro SIRET est constitué d'un numéro SIREN et d'un NIC et on pourra utiliser ce type complexe lorsqu'on souhaitera isoler ces deux composantes dans deux éléments séparés :
§15.
<xs:complexType name="SIRETStructureType"> <xs:sequence> <xs:element ref="ie:SIREN"/> <xs:element ref="ie:NIC"/> </xs:sequence> </xs:complexType>
Ce type peut être affecté dans un schéma pour définir des éléments ou attributs contenant des numéros SIRET, par exemple :
§16.
<xs:element name="mon-element-siret-structure" type="ie:SIRETStructureType"/>
Les éléments ou attributs ainsi définis peuvent ensuite être utilisés dans des documents XML, par exemple :
§17.
<ex:mon-element-siret-structure> <ie:SIREN>422260208</ie:SIREN> <ie:NIC>00026</ie:NIC> </ex:mon-element-siret-structure>
On notera que l'utilisation de ce type complexe impose l'utilisation de l'espace de noms INSEE dans les documents XML.
La définition de l'élément SIRETStructure est la suivante :
§18.
<xs:element name="SIRETStructure" type="ie:SIRETStructureType"/>
Les éléments SIRETStructure peuvent être utilisés directement dans des documents XML, par exemple :
§19.
<ex:entreprise> <ie:SIRETStructure> <ie:SIREN>422260208</ie:SIREN> <ie:NIC>00026</ie:NIC> </ie:SIRETStructure> <ex:nom>Dyomedea SARL (établissement principal)</ex:nom> </ex:entreprise>
Lorsqu'on ne souhaite pas séparer SIREN et NIC en deux sous éléments (par exemple lorsque le numéro SIRET est codé sous forme d'attribut ou qu'on ne souhaite pas insérer des éléments appartenant à l'espace de noms INSEE dans les documents XML), on pourra concaténer ces deux identifiants et utiliser le type simple suivant :
§20.
<xs:simpleType name="SIRETType"> <xs:restriction base="ie:ChaineNumeriqueType"> <xs:length value="14"/> </xs:restriction> </xs:simpleType>
Ce type peut être affecté dans un schéma pour définir des éléments ou attributs contenant des numéros SIRET, par exemple :
§21.
<xs:element name="societe"> <xs:complexType> <xs:sequence> <xs:element name="nom" type="xs:token"/> </xs:sequence> <xs:attribute name="mon-attribut-siret" type="ie:SIRETType"/> </xs:complexType> </xs:element>
Les éléments ou attributs ainsi définis peuvent ensuite être utilisés dans des documents XML, par exemple :
§22.
<ex:societe mon-attribut-siret="42226020800026"> <ex:nom>Dyomedea SARL (établissement principal)</ex:nom> </ex:societe>
La définition de l'élément SIRET est la suivante:
§23.
<xs:element name="SIRET" type="ie:SIRETType"/>
Les éléments SIRET peuvent être utilisés directement dans des documents XML, par exemple :
§24.
<ex:entreprise> <ie:SIRET>42226020800026</ie:SIRET> <ex:nom>Dyomedea SARL(établissement principal)</ex:nom> </ex:entreprise>
La définition de l'attribut siret est basée sur le type simple défini ci-dessus :
§25.
<xs:attribute name="siret" type="ie:SIRETType"/>
Les attributs siret peuvent être utilisés directement dans des documents XML, par exemple :
§26.
<ex:societe ie:siret="42226020800026"> <ex:nom>Dyomedea SARL (établissement principal)</ex:nom> </ex:societe>
§27.
<xs:simpleType name="SIREN_stype" ie:obsolete="true"> <xs:restriction base="ie:Chaîne_Numérique_stype"> <xs:length value="9"/> </xs:restriction> </xs:simpleType>
§28.
<xs:simpleType name="NIC_stype" ie:obsolete="true"> <xs:restriction base="ie:Chaîne_Numérique_stype"> <xs:length value="5"/> </xs:restriction> </xs:simpleType>
§29.
<xs:complexType name="SIRET_ctype" ie:obsolete="true"> <xs:sequence> <xs:element ref="ie:SIREN"/> <xs:element ref="ie:NIC"/> </xs:sequence> </xs:complexType>
§30.
<xs:simpleType name="SIRET_stype" ie:obsolete="true"> <xs:restriction base="ie:Chaîne_Numérique_stype"> <xs:length value="14"/> </xs:restriction> </xs:simpleType>
§31.
<xs:attribute name="SIREN" type="ie:SIREN_stype" ie:obsolete="true"/>
§32.
<xs:attribute name="NIC" type="ie:NIC_stype" ie:obsolete="true"/>
§33.
<xs:attribute name="SIRET" type="ie:SIRET_stype" ie:obsolete="true"/>
L'utilisation des éléments et attributs définis dans ce schéma permet de se baser directement sur leur nom (et espace de nom) pour les identifier et les valider.
L'utilisation des types simples définis dans ce schéma permet au contraire d'utiliser des noms d'attributs et d'éléments quelconques (et appartenant à des espaces de noms quelconques).
L'attribution de types à ces éléments et attributs permet de les valider en suivant les définitions de ce schéma.
Ces attributions sont également transmises aux applications supportant W3C XML Schema et son "Post Schema Validation Infoset" (PSVI) qui peuvent reconnaître qu'il s'agit des données d'identification définies par ce schéma.
L'utilisation de types complexes se situe à un niveau intermédiaire puisqu'elle permet d'utiliser des noms et espaces de noms quelconques pour les éléments racines de ces types de données mais qu'elle impose l'utilisation des éléments (et de l'espace de noms) définis par ce schéma pour les éléments inclus dans le type de données (voir exemple concernant le type SIRETStructureType).
Si l'utilisation individuelle de numéros SIREN et NIC pour former un numéro SIRET est techniquement correcte, elle présente l'inconvénient pour les applications de ne pas lier ces deux informations de manière explicite dans un schéma. Les applications ne peuvent donc pas trouver dans le seul schéma le lien permettant de constituer un numéro SIRET identifiant un établissement à partir de ces deux informations isolées et doit se reposer sur des conventions définies de manière informelle ci-dessous.
L'utilisation des éléments, attributs et types SIRET qui évite ce problème est recommandée pour identifier un établissement.
Lorsqu'ils ne peuvent pas utiliser des éléments, attributs ou types SIRET, les vocabulaires XML souhaitant utiliser de manière individuelle les numéro SIREN et NIC sont invités à respecter les règles suivantes :
Les numéros SIREN, NIC et SIRET intègrent le mécanisme de contrôle de parité connu sous le nom de formule (ou clé) de Luhn. Ce contrôle de parité peut être utilisé pour réduire les risques d'erreurs de frappe ou de transmission.
L'algorithme consiste à parcourir les chiffres constituant le numéro SIREN, NIC ou SIRET, à multiplier par 2 les chiffres de rang impair et à faire ensuite la somme de tous les chiffres obtenus.
Attention, il s'agit bien de faire la somme des chiffres obtenus : si après multiplication par 2 d'un des chiffres du numéro on obtient "12", il faudra ajouter les chiffres 1 puis 2 et non le nombre 12.
Le contrôle de parité est correct si le résultat obtenu est un multiple de 10.
Le contrôle de la formule de Luhn peut être implémenté en XSLT de la manière suivante :
§34.
<xsl:template name="controle-luhn"> <xsl:param name="numero" select="normalize-space(.)"/> <xsl:param name="somme" select="0"/> <xsl:param name="indice" select="1"/> <xsl:choose> <xsl:when test="string-length($numero)=0"> <!-- Nous arrivons ici après le dernier chiffre --> <xsl:choose> <xsl:when test="$somme mod 10 = 0"> <xsl:text>Correct</xsl:text> </xsl:when> <xsl:otherwise> <xsl:text>Erreur : </xsl:text> <xsl:value-of select="$somme"/> </xsl:otherwise> </xsl:choose> </xsl:when> <xsl:when test="$indice mod 2 = 0"> <!-- Cas des chiffres d'indice pair --> <xsl:call-template name="controle-luhn"> <xsl:with-param name="numero" select="substring($numero, 2)"/> <xsl:with-param name="somme" select="$somme + substring($numero, 1, 1)"/> <xsl:with-param name="indice" select="$indice + 1"/> </xsl:call-template> </xsl:when> <xsl:otherwise> <!-- Cas des chiffres d'indice impair --> <xsl:variable name="double" select="concat(substring($numero, 1, 1) * 2, '0') "/> <xsl:call-template name="controle-luhn"> <xsl:with-param name="numero" select="substring($numero, 2)"/> <xsl:with-param name="somme" select="$somme + substring($double, 1, 1) + substring($double, 2, 1)"/> <xsl:with-param name="indice" select="$indice + 1"/> </xsl:call-template> </xsl:otherwise> </xsl:choose> </xsl:template>
Les documents suivants sont disponibles pour téléchargement.
[Document]
§35.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ie="http://xml.insee.fr/schema" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://xml.insee.fr/schema" version="2.0"> <xs:include schemaLocation="insee-commun.xsd"/> §1.Type SIRENType §4.Élément SIREN §6.Attribut siren §8.Type NICType §11.Élément NIC §13.Attribut nic §15.Type SIRETStructureType §18.Élément SIRETStructure §20.Type SIRETType §23.Élément SIRET §25.Attribut siret <xs:annotation ie:obsolete="true"> <xs:documentation> Les types qui suivent sont dépréciés et seront remplacés dans les prochaines versions par des types équivalents qui suivent les conventions de nommage en vigueur.</xs:documentation> </xs:annotation> §27.Type SIREN_stype §28.Type NIC_stype §29.Type SIRET_ctype §30.Type SIRET_stype §31.Attribut SIREN §32.Attribut NIC §33.Attribut SIRET </xs:schema>
[Document]
§36.
<xsl:transform xmlns:ex="http://dyomedea.com/ns/example" xmlns:ie="http://xml.insee.fr/schema" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="text"/> <xsl:template match="*|@*"> <xsl:apply-templates select="*|@*"/> </xsl:template> <xsl:template match="ie:SIREN|ie:NIC|@ie:siren|@ie:nic"> <xsl:value-of select="name()"/> <xsl:text/> <xsl:value-of select="."/> <xsl:text> : </xsl:text> <xsl:call-template name="controle-luhn"/> <xsl:text/> </xsl:template> §34.Implémentation XSLT </xsl:transform>
Schéma validant les exemples utilisant les définitions de types simples et complexes :
[Document]
§37.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ex="http://dyomedea.com/ns/example" xmlns:ie="http://xml.insee.fr/schema" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://dyomedea.com/ns/example" version="2.0"> <xs:import namespace="http://xml.insee.fr/schema" schemaLocation="siret.xsd"/> §2.Type SIRENType §9.Type NICType §16.Type SIRETStructureType §21.Type SIRETType <xs:element name="exemples"> <xs:complexType> <xs:sequence> <xs:any maxOccurs="unbounded" minOccurs="0" namespace="##targetNamespace" processContents="strict"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
Document XML regroupant les exemples utilisant les définitions de types simples et complexes :
[Document]
§38.
<ex:exemples xmlns:ex="http://dyomedea.com/ns/example" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://dyomedea.com/ns/example exemples-siret-types.xsd"> §3.Type SIRENType §10.Type NICType §17.Type SIRETStructureType §22.Type SIRETType </ex:exemples>
Document XML regroupant les exemples utilisant les éléments et attributs :
[Document]
§39.
<ex:exemples xmlns:ex="http://dyomedea.com/ns/example" xmlns:ie="http://xml.insee.fr/schema"> §5.Élément SIREN §7.Attribut siren §12.Élément NIC §14.Attribut nic §19.Élément SIRETStructure §24.Élément SIRET §26.Attribut siret </ex:exemples>
Les documents et sites de référence suivants ont été utilisés pour la constitution de ce vocabulaire XML.
Le site du Répertoire SIRENE contient de nombreuses informations à propos de l'identification des entreprises et des établissements français. Se reporter notamment à la page "Définitions et nomenclatures" dont sont extraites de nombreuses définitions figurant dans cette documentation.
La norme ISO 6523-1 dont le titre est "Identification des systèmes d'identification d'organisations" spécifie un mécanisme "pour identifier d'une façon globale et non ambiguë les organisations et leurs parties, pour les besoins d'échange d'informations".
Ne se substituant pas aux répertoires d'organisations ou d'entreprises existants, elle définit une méthode pour identifier les organisations à partir d'identifiants internationaux de code (ICD) -dont le but est d'identifier le système d'identification utilisé- et de leur identifiant dans ce système d'identification.
Cette norme ne spécifie pas la liste des identifiants internationaux de code (ICD) mais uniquement la structure des identifiants globaux.
La norme ISO 6523-2 dont le titre est "Enregistrement des identifiants internationaux de code (ICD) décrits dans la norme ISO 6523-1".
Cette norme ne spécifie pas la liste des identifiants internationaux de code (ICD) mais uniquement les procédures mises en place pour leur gestion.
La British Standards Institution a la charge d'entretenir la liste des ICD attribués aux différents systèmes d'identification.
L' ICD attribué au répertoire SIRENE dans cette liste est : 0002.
Les ressources suivantes sont définies ou référencées dans ce document :