Chapter 10: Namespaces and XQuery
Example 10-1. Namespace declarations
<cat:catalog xmlns:cat="http://datypic.com/cat"
xmlns:prod="http://datypic.com/prod">
<cat:number>1446</cat:number>
<prod:product>
<prod:number>563</prod:number>
<prod:name prod:language="en">Floppy Sun Hat</prod:name>
</prod:product>
</cat:catalog>
Example 10-2. Alternate prefixes
<foo:catalog xmlns:foo="http://datypic.com/cat"
xmlns:bar="http://datypic.com/prod">
<foo:number>1446</foo:number>
<bar:product>
<bar:number>563</bar:number>
<bar:name bar:language="en">Floppy Sun Hat</bar:name>
</bar:product>
</foo:catalog>
Example 10-3. Namespaces and attributes
<product xmlns="http://datypic.com/prod"
xmlns:app="http://datypic.com/app"
app:id="P123" dept="ACC">
...
</product>
Example 10-4. Namespace declarations and scope (cat_ns.xml)
<catalog xmlns="http://datypic.com/cat">
<number>1446</number>
<prod:product xmlns:prod="http://datypic.com/prod">
<prod:number>563</prod:number>
<prod:name language="en">Floppy Sun Hat</prod:name>
</prod:product>
</catalog>
Example 10-5. Overriding the default namespace
<catalog xmlns="http://datypic.com/cat">
<number>1446</number>
<product xmlns="http://datypic.com/prod">
<number>563</number>
<name language="en">Floppy Sun Hat</name>
</product>
</catalog>
Example 10-6. Prolog namespace declarations
declare namespace rep = "http://datypic.com/report";
declare namespace prod = "http://datypic.com/prod";
<rep:report> {
doc("cat_ns.xml")//prod:product
} </rep:report>
Example 10-7. Prolog default namespace declaration
declare default element namespace "http://datypic.com/cat";
declare namespace rep = "http://datypic.com/report";
declare namespace prod = "http://datypic.com/prod";
<rep:report> {
doc("cat_ns.xml")/catalog/prod:product
} </rep:report>
Example 10-8. Namespace declarations in query different from input document
declare namespace rep = "http://datypic.com/report";
declare namespace cat = "http://datypic.com/cat";
declare namespace prod2 = "http://datypic.com/prod";
<rep:report> {
doc("cat_ns.xml")/cat:catalog/prod2:product
} </rep:report>
Example 10-9. Using namespace declaration attributes
<rep:report xmlns="http://datypic.com/cat"
xmlns:prod="http://datypic.com/prod"
xmlns:rep="http://datypic.com/report"> {
doc("cat_ns.xml")/catalog/prod:product
} </rep:report>
Example 10-10. Namespace declaration impact on input elements
<report xmlns="http://datypic.com/report">
<firstChild/>
{doc("prod_ns.xml")/*}
</report>
Example 10-11. Simple product example in namespace (prod_ns.xml)
<prod:product xmlns:prod="http://datypic.com/prod">
<prod:number>563</prod:number>
<prod:name language="en">Floppy Sun Hat</prod:name>
</prod:product>
Example 10-12. Using XML namespace declarations
<report xmlns="http://datypic.com/report"
xmlns:cat="http://datypic.com/cat"
xmlns:prod="http://datypic.com/prod"> {
for $product in doc("prod_ns.xml")/prod:product
return <lineItem>
{$product/prod:number}
{$product/prod:name}
</lineItem>
} </report>
Example 10-13. Prolog namespace declarations
declare default element namespace "http://datypic.com/report";
declare namespace cat = "http://datypic.com/cat";
declare namespace prod = "http://datypic.com/prod";
<report> {
for $product in doc("prod_ns.xml")/prod:product
return <lineItem>
{$product/prod:number}
{$product/prod:name}
</lineItem>
} </report>
Example 10-14. A balanced approach
declare namespace cat = "http://datypic.com/cat";
<report xmlns="http://datypic.com/report"
xmlns:prod="http://datypic.com/prod"> {
for $product in doc("prod_ns.xml")/prod:product
return <lineItem>
{$product/prod:number}
{$product/prod:name}
</lineItem>
} </report>
Example 10-15. Multi-namespace input document (cat_ns2.xml)
<cat:catalog xmlns:cat="http://datypic.com/cat"
xmlns:prod="http://datypic.com/prod"
xmlns:ord="http://datypic.com/ord">
<prod:product>
<prod:number>563</prod:number>
<prod:name language="en">Floppy Sun Hat</prod:name>
</prod:product>
</cat:catalog>
Example 10-16. Query with no-preserve, inherit
declare copy-namespaces no-preserve, inherit;
<report xmlns="http://datypic.com/report"
xmlns:cat="http://datypic.com/cat"
xmlns:prodnew="http://datypic.com/prod"> {
doc("cat_ns2.xml")//prodnew:product
} </report>
Example 10-17. Query with preserve, no-inherit
declare copy-namespaces preserve, no-inherit;
<report xmlns="http://datypic.com/report"
xmlns:cat="http://datypic.com/cat"
xmlns:prodnew="http://datypic.com/prod"> {
doc("cat_ns2.xml")//prodnew:product
} </report>
|