data

O valor atômico de um nó

Descrição

A função fn:data recebe uma sequência de itens e devolve os valores tipados deles. Para valores atômicos, isso significa devolver o próprio valor, sem mudança. Para nós, significa extrair o valor tipado do nó.

Muitas vezes não é preciso chamar esta função, porque o valor tipado de um nó é extraído automaticamente (um processo chamado atomização) em muitas expressões XPath 2.0, como comparações, operações aritméticas e chamadas de função. O uso mais comum de fn:data é nos construtores de elemento do XQuery.

Parâmetros

Descrição

arg:string()

o item do qual pegar o valor

Exemplos

Os exemplos abaixo usam este documento de entrada:

<xsl:variable name="cat" select="doc('http://www.functx.com/input/catalog.xml')"/>

<!-- content of catalog.xml -->
<catalog>
 <product dept="WMN">
  <number>557</number>
  <name language="en">Fleece Pullover</name>
  <colorChoices>navy black</colorChoices>
 </product>
 <product dept="ACC">
  <number>563</number>
  <name language="en">Floppy Sun Hat</name>
 </product>
 <product dept="ACC">
  <number>443</number>
  <name language="en">Deluxe Travel Bag</name>
 </product>
 <product dept="MEN">
  <number>784</number>
  <name language="en">Cotton Dress Shirt</name>
  <colorChoices>white gray</colorChoices>
  <desc>Our <i>favorite</i> shirt!</desc>
 </product>
</catalog>

XPath

Resultado

data($cat//product[1]/number)

557

data($cat//number)

(557, 563, 443, 784)

data($cat//product[1]/@dept)

WMN

data($cat//product[1]/colorChoices)

navy black

data($cat//product[1])

557 Fleece Pullover navy black

data($cat//product[4]/desc)

Our favorite shirt!

Os exemplos abaixo dão resultados diferentes se o documento de entrada tiver sido validado com este schema. Os geradores não validam contra um schema, então no Mapper Idea o data() devolve os valores sem tipo, como na tabela de cima.

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="catalog" type="CatalogType"/>
  <xs:complexType name="CatalogType">
    <xs:sequence>
      <xs:element name="product" type="ProductType" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="ProductType">
    <xs:sequence>
      <xs:element name="number" type="xs:integer"/>
      <xs:element name="name" type="NameType"/>
      <xs:element name="colorChoices" type="ColorListType" minOccurs="0"/>
      <xs:element name="desc" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="dept" type="xs:string"/>
  </xs:complexType>
  <xs:simpleType name="ColorListType">
    <xs:list itemType="xs:string"/>
  </xs:simpleType>
  <xs:complexType name="NameType">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="language" type="LangType"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:simpleType name="LangType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="en"/>
      <xs:enumeration value="fr"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>

XPath

Resultado

data($cat//product[1]/colorChoices)

('navy', 'black')

data($cat//product[1])

Error FOTY0012