XML/XQuery/namespace
Содержание
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>