XML/XQuery/namespace

Материал из Web эксперт
Перейти к: навигация, поиск

Namespace declaration impact on input elements

File: Data.xml
<prod:car xmlns:prod="http://wbex.ru/prod">
  <prod:id>0002</prod:id>
  <prod:name language="en">name 2</prod:name>
</prod:car>
File: Query.xquery
<report xmlns="http://wbex.ru/report">
  <firstChild/>
  {doc("Data.xml")/*}
</report>

Output:
<?xml version="1.0" encoding="UTF-8"?>
<report xmlns="http://wbex.ru/report">
   <firstChild/>
   <prod:car xmlns:prod="http://wbex.ru/prod">
      <prod:id>0002</prod:id>
      <prod:name language="en">name 2</prod:name>
   </prod:car>
</report>



Namespace declarations in query different from input document

File: Data.xml
<order xmlns="http://wbex.ru/cat">
  <id>1446</id>
  <prod:car xmlns:prod="http://wbex.ru/prod">
    <prod:id>0002</prod:id>
    <prod:name language="en">name 2</prod:name>
  </prod:car>
</order>
File: Query.xquery
declare namespace rep = "http://wbex.ru/report";
declare namespace cat = "http://wbex.ru/cat";
declare namespace prod2 = "http://wbex.ru/prod";
<rep:report> {
  doc("Data.xml")/cat:order/prod2:car
} </rep:report>
Output:
<?xml version="1.0" encoding="UTF-8"?>
<rep:report xmlns:rep="http://wbex.ru/report">
   <prod:car xmlns:prod="http://wbex.ru/prod" xmlns="http://wbex.ru/cat">
      <prod:id>0002</prod:id>
      <prod:name language="en">name 2</prod:name>
  </prod:car>
</rep:report>



Prefixed name tests

File: Data.xml

<prod:car xmlns:prod="http://wbex.ru/prod">
  <prod:id>0002</prod:id>
  <prod:name language="en">name 2</prod:name>
</prod:car>
File: Query.xquery
declare namespace prod = "http://wbex.ru/prod";
<prod:prodList>{
  doc("Data.xml")/prod:car/prod:id
}</prod:prodList>

Output:
<?xml version="1.0" encoding="UTF-8"?>
<prod:prodList xmlns:prod="http://wbex.ru/prod">
   <prod:id>0002</prod:id>
</prod:prodList>



Querying with namespaces

File: Data.xml
<prod:car xmlns:prod="http://wbex.ru/prod">
  <prod:id>0002</prod:id>
  <prod:name language="en">name 2</prod:name>
</prod:car>

File: Query.xquery
declare namespace prod = "http://wbex.ru/prod";
for $car in doc("Data.xml")/prod:car
return $car/prod:name
Output:
<?xml version="1.0" encoding="UTF-8"?>
<prod:name xmlns:prod="http://wbex.ru/prod" language="en">name 2</prod:name>



Using a namespace declaration in a constructor

File: Data.xml

<order>
  <car model="A">
    <id>0001</id>
    <name language="en">name 1</name>
  </car>
  <car model="B">
    <id>0002</id>
    <name language="en">name 2</name>
  </car>
  <car model="B">
    <id>0003</id>
    <name language="en">name 3</name>
  </car>
  <car model="C">
    <id>0004</id>
    <name language="en">name 4</name>
  </car>
</order>

File: Query.xquery
<xhtml:html xmlns:xhtml="http://www.w3.org/1999/xhtml">
  <xhtml:h1 class="carHdr">car order</xhtml:h1>
  <xhtml:ul>{
    for $prod in doc("Data.xml")/order/car
    return <xhtml:li class="{$prod/@model}">id: {
                               data($prod/id)}</xhtml:li>
  }</xhtml:ul>
</xhtml:html>
Output:
<?xml version="1.0" encoding="UTF-8"?>
<xhtml:html xmlns:xhtml="http://www.w3.org/1999/xhtml">
   <xhtml:h1 class="carHdr">car order</xhtml:h1>
   <xhtml:ul>
      <xhtml:li class="A">id: 0001</xhtml:li>
      <xhtml:li class="B">id: 0002</xhtml:li>
      <xhtml:li class="B">id: 0003</xhtml:li>
      <xhtml:li class="C">id: 0004</xhtml:li>
   </xhtml:ul>
</xhtml:html>



Using namespace declaration attributes

File: Data.xml
<order xmlns="http://wbex.ru/cat">
  <id>1446</id>
  <prod:car xmlns:prod="http://wbex.ru/prod">
    <prod:id>0002</prod:id>
    <prod:name language="en">name 2</prod:name>
  </prod:car>
</order>
File: Query.xquery
<rep:report xmlns="http://wbex.ru/cat"
            xmlns:prod="http://wbex.ru/prod"
            xmlns:rep="http://wbex.ru/report"> {
  doc("Data.xml")/order/prod:car
} </rep:report>

Output:
<?xml version="1.0" encoding="UTF-8"?>
<rep:report xmlns:rep="http://wbex.ru/report" xmlns:prod="http://wbex.ru/prod"
            xmlns="http://wbex.ru/cat">
   <prod:car>
      <prod:id>0002</prod:id>
      <prod:name language="en">name 2</prod:name>
  </prod:car>
</rep:report>



Using XML namespace declarations

File: Data.xml
<prod:car xmlns:prod="http://wbex.ru/prod">
  <prod:id>0002</prod:id>
  <prod:name language="en">name 2</prod:name>
</prod:car>
File: Query.xquery
<report xmlns="http://wbex.ru/report"
             xmlns:cat="http://wbex.ru/cat"
             xmlns:prod="http://wbex.ru/prod"> {
  for $car in doc("Data.xml")/prod:car
  return <linecar>
           {$car/prod:id}
           {$car/prod:name}
         </linecar>
} </report>

Output:
<?xml version="1.0" encoding="UTF-8"?>
<report xmlns:prod="http://wbex.ru/prod" xmlns:cat="http://wbex.ru/cat"
        xmlns="http://wbex.ru/report">
   <linecar>
      <prod:id>0002</prod:id>
      <prod:name language="en">name 2</prod:name>
   </linecar>
</report>