• The Four Hundred
  • Subscribe
  • Media Kit
  • Contributors
  • About Us
  • Contact
Menu
  • The Four Hundred
  • Subscribe
  • Media Kit
  • Contributors
  • About Us
  • Contact
  • Guru: The XML Composition Conundrum of XMLNAMESPACES or XMLATTRIBUTES

    April 3, 2017 Michael Sansoterra

    Hey, Mike:

    After reading the IT Jungle Guru tips on DB2 XML Composition (see Related Stories below), I’ve been able to build XML from relational data. I have everything working but now I need to enclose all data in a “Document” tag after the XML declaration like the example here:

    <?xml version="1.0" encoding="utf-8"?>
    <Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://MyCompany.com" 
    xsi:schemaLocation="http://MyCompany.com validate.xsd">
    

    I tried using XMLNAMESPACES but can’t get it to produce the “xsi:schemaLocation” tag. How can I construct the document tag I need?

    –N.C.

     

    The problem here is that the xsi:schemaLocation in your example is not a namespace, but an attribute (as identified in articles by w3schools.com and microsoft.com). Therefore, you should use the XMLATTRIBUTES function rather than XMLNAMESPACES to incorporate it into your XML.

    Let me illustrate how to build all of this using the DB2 XML functions. To keep it easy to understand, the following SQL builds XML from basic relational data using the XMLELEMENT function:

    CREATE TABLE MyTable (Contents VARCHAR(12));
    INSERT INTO MyTable VALUES ('NADA');
    SELECT XMLELEMENT(NAME "MyData", Contents) AS MyXML
      FROM MyTable;
    

    The query returns this simple XML:

    <MyData>NADA</MyData>
    

    Now, we’ll embed the above query in a common table expression called BUILD_XML and then incorporate the query’s XML within the desired &lt;Document&gt; root element using the XMLELEMENT and XMLSERIALIZE functions:

    WITH BUILD_XML (MY_XML) AS  (
    SELECT XMLELEMENT(NAME "MyData", Contents) AS MyXML
      FROM MyTable
    )
    SELECT XMLSERIALIZE(
    XMLELEMENT(NAME "Document",MY_XML)
    AS CLOB(1M) INCLUDING XMLDECLARATION) 
      FROM BUILD_XML
    

    XMLELEMENT is used to build the Document root element (with the MY_XML column supplying the element’s child nodes) and the XMLSERIALIZE function adds the declaration:

    <?xml version="1.0" encoding="UTF-8"?>
    <Document>
    <MyData>NADA</MyData>
    </Document>
    

    Now all that is left to do is to add the two namespaces:

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://MyCompany.com" 
    

    And then the troublesome schemaLocation attribute to the Document element:

    xsi:schemaLocation="http://MyCompany.com validate.xsd"
    

    Both of these can be added to the XML by specifying the XMLNAMESPACES and XMLATTRIBUTES functions as parameters to the XMLELEMENT function (for the Document element):

    WITH BUILD_XML (MY_XML) AS (
    SELECT XMLELEMENT(NAME "MyData", Contents) AS MyXML
      FROM MyTable
    )
    SELECT XMLSERIALIZE(
    XMLELEMENT(NAME "Document",
    XMLNAMESPACES(
    'http://www.w3.org/2001/XMLSchema-instance' as "xsi",
    DEFAULT 'http://MyCompany.com'
    ),
    XMLATTRIBUTES(
    'http://MyCompany.com validate.xsd' AS "xsi:schemaLocation"
    ),
    MY_XML)
    AS CLOB(1M) INCLUDING XMLDECLARATION) 
      FROM BUILD_XML
    

    The result is:

    <?xml version="1.0" encoding="UTF-8"?>
    <Document 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://MyCompany.com" 
    xsi:schemaLocation="http://MyCompany.com validate.xsd">
    <MyData>NADA</MyData>
    </Document>
    

    And that’s all it takes to build the required XML. XML has so many facets, that when you encounter something unfamiliar, sometimes it’s easier to search for it online (such as schemaLocation) to make sure you’ve correctly identified what it is (attribute, namespace, element, CDATA, etc.). Thereafter you can pick the appropriate DB2 for i function to assist with the XML composition.

    RELATED STORIES

    Composing An XML Document From Relational Data, Part 1

    Composing An XML Document From Relational Data: Part 2

    Share this:

    • Reddit
    • Facebook
    • LinkedIn
    • Twitter
    • Email

    Tags: Tags: DB2, Four Hundred Guru, Guru, XML, XMLATTRIBUTES, XMLNAMESPACES

    Sponsored by
    WorksRight Software

    Do you need area code information?
    Do you need ZIP Code information?
    Do you need ZIP+4 information?
    Do you need city name information?
    Do you need county information?
    Do you need a nearest dealer locator system?

    We can HELP! We have affordable AS/400 software and data to do all of the above. Whether you need a simple city name retrieval system or a sophisticated CASS postal coding system, we have it for you!

    The ZIP/CITY system is based on 5-digit ZIP Codes. You can retrieve city names, state names, county names, area codes, time zones, latitude, longitude, and more just by knowing the ZIP Code. We supply information on all the latest area code changes. A nearest dealer locator function is also included. ZIP/CITY includes software, data, monthly updates, and unlimited support. The cost is $495 per year.

    PER/ZIP4 is a sophisticated CASS certified postal coding system for assigning ZIP Codes, ZIP+4, carrier route, and delivery point codes. PER/ZIP4 also provides county names and FIPS codes. PER/ZIP4 can be used interactively, in batch, and with callable programs. PER/ZIP4 includes software, data, monthly updates, and unlimited support. The cost is $3,900 for the first year, and $1,950 for renewal.

    Just call us and we’ll arrange for 30 days FREE use of either ZIP/CITY or PER/ZIP4.

    WorksRight Software, Inc.
    Phone: 601-856-8337
    Fax: 601-856-9432
    Email: software@worksright.com
    Website: www.worksright.com

    Share this:

    • Reddit
    • Facebook
    • LinkedIn
    • Twitter
    • Email

    Mad Dog 21/21: iBird In The Hand Or iToo In The Bush Time To Get Your 2FA On, IBM i Admins

    Leave a Reply Cancel reply

TFH Volume: 27 Issue: 22

This Issue Sponsored By

  • ProData Computer Services
  • Quadrant Software
  • COMMON
  • WorksRight Software
  • Northeast User Groups Conference

Table of Contents

  • MSPs Get Monthly IBM i Pricing; Why Not Everyone?
  • Time To Get Your 2FA On, IBM i Admins
  • Guru: The XML Composition Conundrum of XMLNAMESPACES or XMLATTRIBUTES
  • Mad Dog 21/21: iBird In The Hand Or iToo In The Bush
  • SystemObjects SmartPad4i Mobilizes RDi

Content archive

  • The Four Hundred
  • Four Hundred Stuff
  • Four Hundred Guru

Recent Posts

  • Liam Allan Shares What’s Coming Next With Code For IBM i
  • From Stable To Scalable: Visual LANSA 16 Powers IBM i Growth – Launching July 8
  • VS Code Will Be The Heart Of The Modern IBM i Platform
  • The AS/400: A 37-Year-Old Dog That Loves To Learn New Tricks
  • IBM i PTF Guide, Volume 27, Number 25
  • Meet The Next Gen Of IBMers Helping To Build IBM i
  • Looks Like IBM Is Building A Linux-Like PASE For IBM i After All
  • Will Independent IBM i Clouds Survive PowerVS?
  • Now, IBM Is Jacking Up Hardware Maintenance Prices
  • IBM i PTF Guide, Volume 27, Number 24

Subscribe

To get news from IT Jungle sent to your inbox every week, subscribe to our newsletter.

Pages

  • About Us
  • Contact
  • Contributors
  • Four Hundred Monitor
  • IBM i PTF Guide
  • Media Kit
  • Subscribe

Search

Copyright © 2025 IT Jungle