ArcGIS Desktop

  • ArcGIS Pro
  • ArcMap

  • My Profile
  • Aide
  • Sign Out
ArcGIS Desktop

ArcGIS Online

La plateforme cartographique de votre organisation

ArcGIS Desktop

Un SIG professionnel complet

ArcGIS Enterprise

SIG dans votre entreprise

ArcGIS Developers

Outils de création d'applications de localisation

ArcGIS Solutions

Modèles d'applications et de cartes gratuits pour votre secteur d'activité

ArcGIS Marketplace

Téléchargez des applications et des données pour votre organisation.

  • Documentation
  • Support
Esri
  • Se connecter
user
  • Mon profil
  • Déconnexion

ArcMap

  • Accueil
  • Commencer
  • Carte
  • Analyser
  • Gérer les données
  • Outils
  • Extensions

Requêtes de colonne XML

  • Extraire plusieurs valeurs depuis une colonne XML

Il existe plusieurs colonnes XML dans les tables système de géodatabase GDB_Items et GDB_ItemRelationships qui contiennent les informations sur la structure et les relations des éléments. Une colonne en particulier, la colonne Definition de la table GDB_Items, fournit des informations détaillées sur une géodatabase. Le type de document XML contenu dans la colonne dépend du type d’élément spécifique. Par exemple, la définition d’une classe d’entités contient des informations sur les champs d’une table, les domaines et les sous-types appliqués, la référence spatiale de la géométrie et indique si la classe d’entités fait partie d’un jeu de données de contrôleur.

Pour utiliser une valeur d’une colonne XML dans une table système dans IBM Db2, Microsoft SQL Server ou PostgreSQL, procédez à l’extraction du document XML à partir de la base de données totale et utilisez-la en local dans une visionneuse XML ou texte. Les développeurs utilisant des langages tels que Java, C++, ou C# préféreront peut-être lire le document dans un DOM. Les développeurs SQL peuvent utiliser les fonctions XML de base de données pour extraire des valeurs spécifiques depuis les définitions d’élément à l’aide de Xpath (langage de requête pour les documents XML).

Dans les géodatabases Oracle et IBM Informix, les colonnes XML utilisent XML ArcSDE, qui stocke les informations sous forme d'objets BLOB dans une série de tables distinctes. Ainsi, elles ne sont pas directement accessibles avec SQL.

Pour vous permettre d'afficher le contenu des colonnes XML dans les tables système des Oracle, deux vues système stockent le contenu des colonnes XML des tables système de la géodatabase dans un type de données CLOB. GDB_Items_vw affiche le contenu des colonnes Definition, Documentation et ItemInfo et de la table GDB_Items dans les colonnes CLOB. GDB_ItemRelationships_vw affiche le contenu de la colonne Attributes de la table GDB_ItemRelationships dans une colonne CLOB. Les colonnes CLOB peuvent être lues comme du texte.

Remarque :

Les signatures et le comportement des fonctions XML varient sensiblement entre systèmes de gestion de bases de données.

L’exemple suivant illustre la définition d’élément d’une définition de domaine par plage dans un document XML :

<? xml version = "1.0" encoding="utf-8"?>
<GPRangeDomain2
     xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
     xmlns:xs = "http://www.w3.org/2001/XMLSchema"
     xmlns:typens = "http://www.esri.com/schemas/ArcGIS/10.0"
     xsi:type = "typens:GPRangeDomain2">
  <DomainName>Angle</DomainName>
  <FieldType>esriFieldTypeInteger</FieldType>
  <MergePolicy>esriMPTDefaultValue</MergePolicy>
  <SplitPolicy>esriSPTDuplicate</SplitPolicy>
  <Description>Valid rotation angles</Description>
  <Owner>harley</Owner>
  <MaxValue xsi:type = "xs:int">359</MaxValue>
  <MinValue xsi:type = "xs:int">0</MinValue>
</GPRangeDomain2>

Les deux valeurs les plus importantes d’un domaine par plage sont les valeurs minimum et maximum. Les expressions XPath qui représentent ces éléments sont /GPRangeDomain2/MinValue et /GPRangeDomain2/MaxValue, respectivement. Cette requête SQL indique comment extraire ces valeurs pour un domaine par plage spécifique dans une géodatabase dans SQL Server :

--Queries an sde-schema geodatabase in SQL Server
SELECT
  Definition.value('(/GPRangeDomain2/MinValue)[1]','nvarchar(max)') AS "MinValue",
  Definition.value('(/GPRangeDomain2/MaxValue)[1]','nvarchar(max)') AS "MaxValue"
FROM
  sde.GDB_ITEMS INNER JOIN sde.GDB_ITEMTYPES
  ON sde.GDB_ITEMS.Type = sde.GDB_ITEMTYPES.UUID
WHERE
  sde.GDB_ITEMS.Name = 'Angle' AND
  sde.GDB_ITEMTYPES.Name = 'Range Domain'
MinValue   MaxValue
      0         359

L’exemple précédent est relativement simple. Pour des solutions plus complexes, consultez le livre blanc XML Schema of the Geodatabase, et notamment l’annexe destinée aux développeurs qui utilisent des tables système.

Vous pouvez interroger les autres colonnes XML des tables système de la même façon que la colonne Definition de la table GDB_Items, mais notez bien qu’aucune structure XML n’est définie par la géodatabase pour la colonne Documentation. La colonne Documentation stocke les métadonnées associées aux éléments de géodatabase. Toutefois, l’ensemble exact d’éléments de métadonnées qu’elle contient varie d’une organisation à l’autre, en fonction de la norme de métadonnées et du processus de gestion des informations qu’elles adoptent. Un DTD XML décrivant la structure de métadonnées ArcGIS (ArcGISmetadatav1.dtd) est fourni avec ArcGIS Desktop dans le sous-dossier \Metadata\Translator\Rules du répertoire d'installation d'ArcGIS.

Extraire plusieurs valeurs depuis une colonne XML

Il est souvent utile d’extraire plusieurs valeurs d’un document XML unique. Voici la valeur Definition dans un tel scénario, un domaine de valeurs codées :

<? xml version = "1.0" encoding="utf-8"?>
<GPCodedValueDomain2
    xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xs = "http://www.w3.org/2001/XMLSchema"
    xmlns:typens = "http://www.esri.com/schemas/ArcGIS/10.0"
  <DomainName>Material</DomainName>
  <FieldType>esriFieldTypeString</FieldType>
  <MergePolicy>esriMPTDefaultValue</MergePolicy>
  <SplitPolicy>esriSPTDuplicate</SplitPolicy>
  <Description>Valid pipe materials</Description>
  <Owner>aelflad</Owner>
  <CodedValues xsi:type= "typens:ArrayOfCodedValue">
   <CodedValue  xsi:type= "typens:CodedValue">
     <Name>Cast iron</Name>
     <Code xsi:type= "xs:string">CI</Code>
   </CodedValue>
   <CodedValue  xsi:type= "typens:CodedValue">
     <Name>Ductile iron</Name>
     <Code xsi:type= "xs:string">DI</Code>
   </CodedValue>
   <CodedValue  xsi:type= "typens:CodedValue">
     <Name>PVC</Name>
     <Code xsi:type= "xs:string">PVC</Code>
   </CodedValue>
   <CodedValue  xsi:type= "typens:CodedValue">
     <Name>Asbestos concrete</Name>
     <Code xsi:type= "xs:string">AC</Code>
   </CodedValue>
   <CodedValue  xsi:type= "typens:CodedValue">
     <Name>Copper</Name>
     <Code xsi:type= "xs:string">COP</Code>
   </CodedValue>
  </CodedValues>
</GPCodedValueDomain2>

Les valeurs qui sont habituellement les plus intéressantes pour les développeurs et les administrateurs sont les paires de valeurs et de codes, qui présentent une expression XPath de type /GPCodedValueDomain2/CodedValues/CodedValue. L’exemple suivant indique comment extraire plusieurs valeurs à partir d’une seule définition XML pour obtenir les paires de valeurs et de codes de tous les domaines d’une géodatabase dans SQL Server :

-- Get the code/value pairs for each coded value domain in the geodatabase.
SELECT
   codedValue.value('Code[1]', 'nvarchar(max)') AS "Code",
   codedValue.value('Name[1]', 'nvarchar(max)') AS "Value"
FROM
   dbo.GDB_ITEMS AS items INNER JOIN dbo.GDB_ITEMTYPES AS itemtypes
   ON items.Type = itemtypes.UUID
CROSS APPLY
   items.Definition.nodes
    ('/GPCodedValueDomain2/CodedValues/CodedValue') AS CodedValues(codedValue)
WHERE
   itemtypes.Name = 'Coded Value Domain' AND
   items.Name = 'Material'
Code    Value
CI      Cast iron
DI      Ductile iron
PVC     PVC
AC      Asbestos concrete
COP     Copper

ArcGIS Desktop

  • Accueil
  • Documentation
  • Support

ArcGIS

  • ArcGIS Online
  • ArcGIS Desktop
  • ArcGIS Enterprise
  • ArcGIS
  • ArcGIS Developer
  • ArcGIS Solutions
  • ArcGIS Marketplace

A propos d'Esri

  • A propos de la société
  • Carrières
  • Blog d’Esri
  • Conférence des utilisateurs
  • Sommet des développeurs
Esri
Donnez-nous votre avis.
Copyright © 2021 Esri. | Confidentialité | Légal