XML/XQuery/namespace
Содержание
Namespace declaration impact on input elements
<source lang="xml">
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>
</source>
Namespace declarations in query different from input document
<source lang="xml">
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>
</source>
Prefixed name tests
<source lang="xml">
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>
</source>
Querying with namespaces
<source lang="xml">
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>
</source>
Using a namespace declaration in a constructor
<source lang="xml">
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>
</source>
Using namespace declaration attributes
<source lang="xml">
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>
</source>
Using XML namespace declarations
<source lang="xml">
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>
</source>