Fonctions relatives aux QName - expanded-QNameFunctions Related to QNames - expanded-QName

CETTE RUBRIQUE S’APPLIQUE À : ouiSQL Server (à partir de la version 2012)nonAzure SQL DatabasenonAzure SQL Data WarehousenonParallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL Server (starting with 2012)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Retourne une valeur du type xs : QName avec l’espace de noms URI spécifié dans le $paramURI et le nom local spécifié dans le $paramLocal.Returns a value of the xs:QName type with the namespace URI specified in the $paramURI and the local name specified in the $paramLocal. Si $paramURI est une chaîne vide ou la séquence vide, il ne représente aucun espace de noms.If $paramURI is the empty string or the empty sequence, it represents no namespace.

SyntaxeSyntax

fn:expanded-QName($paramURI as xs:string?, $paramLocal as xs:string?) as xs:QName?  

ArgumentsArguments

$paramURI$paramURI
URI d'espace de noms du QName.Is the namespace URI for the QName.

$paramLocal$paramLocal
Partie du nom local du QName.Is the local name part of the QName.

NotesRemarks

Les éléments suivants s’applique à la expanded-QName() (fonction) :The following applies to the expanded-QName() function:

  • Si le $paramLocal valeur spécifiée n’est pas dans la forme lexicale correcte pour le type xs : NCName, la séquence vide est retournée et représente une erreur dynamique.If the $paramLocal value specified is not in the correct lexical form for xs:NCName type, the empty sequence is returned and represents a dynamic error.

  • SQL ServerSQL Server ne prend en charge la conversion du type xs:QName vers aucun autre type.Conversion from xs:QName type to any other type is not supported in SQL ServerSQL Server. Pour cette raison, le expanded-QName() fonction ne peut pas être utilisée dans la construction XML.Because of this, the expanded-QName() function cannot be used in XML construction. Par exemple, lorsque vous construisez un nœud, tel que <e> expanded-QName(…) </e>, la valeur doit être non typée.For example, when you are constructing a node, such as <e> expanded-QName(…) </e>, the value has to be untyped. Cela suppose que vous convertissiez la valeur de type xs:QName renvoyée par expanded-QName() en xdt:untypedAtomic.This would require that you convert the xs:QName type value returned by expanded-QName() to xdt:untypedAtomic. Toutefois, cette opération n'est pas prise en charge.However, this is not supported. Une solution est proposée dans un exemple, plus loin dans cette rubrique.A solution is provided in an example later in this topic.

  • Vous pouvez modifier ou comparer les valeurs de type QName existantes.You can modify or compare the existing QName type values. Par exemple, /root[1]/e[1] eq expanded-QName("http://nsURI" "myNS") compare la valeur de l’élément, <e>, avec le QName renvoyé par le expanded-QName() (fonction).For example, /root[1]/e[1] eq expanded-QName("http://nsURI" "myNS") compares the value of the element, <e>, with the QName returned by the expanded-QName() function.

ExemplesExamples

Cette rubrique fournit des exemples de XQuery relatifs à des instances XML stockés dans différentes xml type des colonnes dans le AdventureWorks2012AdventureWorks2012 base de données.This topic provides XQuery examples against XML instances that are stored in various xml type columns in the AdventureWorks2012AdventureWorks2012 database.

A.A. Remplacement d'une valeur de nœud de type QNameReplacing a QName type node value

Cet exemple montre comment vous pouvez modifier la valeur d'un nœud d'élément de type QName.This example illustrates how you can modify the value of an element node of QName type. Cet exemple illustre les opérations suivantes :The example performs the following:

  • Crée une collection de schémas XML qui définit un élément de type QName.Creates an XML schema collection that defines an element of QName type.

  • Crée une table avec une xml colonne de type à l’aide de la collection de schémas XML.Creates a table with an xml type column by using the XML schema collection.

  • Enregistre une instance XML dans la table.Saves an XML instance in the table.

  • Utilise le modify() méthode du type de données xml pour modifier la valeur de l’élément de type QName dans l’instance.Uses the modify() method of the xml data type to modify the value of the QName type element in the instance. Le expanded-QName() fonction est utilisée pour générer la nouvelle valeur de type QName.The expanded-QName() function is used to generate the new QName type value.

-- If XML schema collection (if exists)  
-- drop xml schema collection SC  
-- go  
-- Create XML schema collection  
CREATE XML SCHEMA COLLECTION SC AS N'  
<schema xmlns="http://www.w3.org/2001/XMLSchema"  
    xmlns:xs="http://www.w3.org/2001/XMLSchema"   
    targetNamespace="QNameXSD"   
      xmlns:xqo="QNameXSD" elementFormDefault="qualified">  
      <element name="Root" type="xqo:rootType" />  
      <complexType name="rootType">  
            <sequence minOccurs="1" maxOccurs="1">  
                        <element name="ElemQN" type="xs:QName" />  
            </sequence>  
      </complexType>  
</schema>'  
go  
-- Create table.  
CREATE TABLE T( XmlCol xml(SC) )  
-- Insert sample XML instnace  
INSERT INTO T VALUES ('  
<Root xmlns="QNameXSD" xmlns:ns="http://myURI">  
      <ElemQN>ns:someName</ElemQN>  
</Root>')  
go  
-- Verify the insertion  
SELECT * from T  
go  
-- Result  
<Root xmlns="QNameXSD" xmlns:ns="http://myURI">  
  <ElemQN>ns:someName</ElemQN>  
</Root>   

Dans la requête suivante, le <ElemQN> valeur de l’élément est remplacée à l’aide de la modify() méthode de type de données xml et la valeur de remplacement de XML DML, comme indiqué.In the following query, the <ElemQN> element value is replaced by using the modify() method of the xml data type and the replace value of XML DML, as shown.

-- the value.  
UPDATE T   
SET XmlCol.modify('  
  declare default element namespace "QNameXSD";   
  replace value of /Root[1]/ElemQN   
  with expanded-QName("http://myURI", "myLocalName") ')  
go  
-- Verify the result  
SELECT * from T  
go  

Voici l'ensemble de résultats.This is the result. l'élément <ElemQN> de type QName possède désormais une nouvelle valeur :Note that the element <ElemQN> of QName type now has a new value:

<Root xmlns="QNameXSD" xmlns:ns="urn">  
  <ElemQN xmlns:p1="http://myURI">p1:myLocalName</ElemQN>  
</Root>  

Les instructions suivantes suppriment les objets utilisés dans l'exemple.The following statements remove the objects used in the example.

-- Cleanup  
DROP TABLE T  
go  
drop xml schema collection SC  
go  

B.B. Gestion des limites liées à l'utilisation de la fonction expanded-QName()Dealing with the limitations when using the expanded-QName() function

Le expanded-QName fonction ne peut pas être utilisée dans la construction XML.The expanded-QName function cannot be used in XML construction. L'exemple suivant illustre ce comportement.The following example illustrates this. Pour contourner cette limite, l'exemple insère d'abord un nœud, puis le modifie.To work around this limitation, the example first inserts a node and then modifies the node.

-- if exists drop the table T  
--drop table T  
-- go  
-- Create XML schema collection  
-- DROP XML SCHEMA COLLECTION SC  
-- go  
CREATE XML SCHEMA COLLECTION SC AS '  
<schema xmlns="http://www.w3.org/2001/XMLSchema">  
      <element name="root" type="QName" nillable="true"/>  
</schema>'  
go  
 -- Create table T with a typed xml column (using the XML schema collection)  
CREATE TABLE T (xmlCol XML(SC))  
go  
-- Insert an XML instance.  
insert into T values ('<root xmlns:a="http://someURI">a:b</root>')  
 go  
-- Verify  
SELECT *   
FROM T  

La tentative suivante d'ajout d'un autre élément <root> se solde par un échec car la fonction n'est pas prise en charge dans la construction XML.The following attempt adds another <root> element but fails, because the expanded-QName() function is not supported in XML construction.

update T SET xmlCol.modify('  
insert <root>{expanded-QName("http://ns","someLocalName")}</root> as last into / ')  
go  

Une solution à ce problème consiste à insérer une instance avec une valeur pour l'élément <root> puis à la modifier.A solution to this is to first insert an instance with a value for the <root> element and then modify it. Dans cet exemple, une valeur initiale nil est utilisée lorsque l'élément <root> est inséré.In this example, a nil initial value is used when the <root> element is inserted. La collection de schémas XML utilisée dans cet exemple autorise une valeur nil pour l'élément <root>.The XML schema collection in this example allows a nil value for the <root> element.

update T SET xmlCol.modify('  
insert <root xsi:nil="true"/> as last into / ')  
go  
-- now replace the nil value with another QName.  
update T SET xmlCol.modify('  
replace value of /root[last()] with expanded-QName("http://ns","someLocalName") ')  
go  
 -- verify   
SELECT * FROM T  
go  
-- result  
<root>b</root>  

<root xmlns:a="http://someURI">a:b</root>

<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p1="http://ns">p1:someLocalName</root>

Vous pouvez comparer la valeur QName, comme le montre la requête ci-après.You can compare the QName value, as shown in the following query. La requête retourne uniquement le <root> les éléments dont les valeurs correspondent le nom qualifié de type valeur retournée par la expanded-QName() (fonction).The query returns only the <root> elements whose values match the QName type value returned by the expanded-QName() function.

SELECT xmlCol.query('  
    for $i in /root  
    return  
       if ($i eq expanded-QName("http://ns","someLocalName") ) then  
          $i  
       else  
          ()')  
FROM T  

Limites de mise en œuvreImplementation Limitations

Il existe une limite : le expanded-QName() accepte la séquence vide comme second argument de fonction et retourne un résultat vide au lieu de déclencher une erreur d’exécution lorsque le deuxième argument est incorrect.There is one limitation: The expanded-QName() function accepts the empty sequence as the second argument and will return empty instead of raising a run-time error when the second argument is incorrect.

Voir aussiSee Also

Fonctions relatives aux QName ( XQuery )Functions Related to QNames (XQuery)