How Do I Setup a Default Namespace

Problem

If an XSD defines namespaces, then typically elements and attributes within the XML documents must be qualified with a namespace. This can cause every element and attribute in the document to be qualified, which is verbose, and sometimes inconvenience.

Resolution

By setting a default namespace, you don't need to explicitly qualify elements and attributes that are part members of the default namespace.

Warning : Declaring a default namespace in some XML Documents, may cause the XML created to be invalid.

Sample XSD

<?xml version="1.0" encoding="UTF-8"?> <xs:schema targetNamespace="http://sample" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://sample" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:element name="Customer" type="CustomerType"> <xs:annotation> <xs:documentation>Comment describing your root element</xs:documentation> </xs:annotation> </xs:element> <xs:complexType name="CustomerType"> <xs:sequence> <xs:element name="FirstName" type="xs:string"/> <xs:element name="MiddleInitial" type="xs:string"/> <xs:element ref="LastName"/> </xs:sequence> <xs:attribute name="clubCardMember" type="xs:boolean"/> </xs:complexType> <xs:element name="LastName" type="xs:string"/> </xs:schema>

Sample Output From the Generated Libraries

<?xml version="1.0"?> <AA:Customer xmlns:AA="http://sample" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" clubCardMember="false"> <AA:FirstName>Joe</AA:FirstName> <AA:MiddleInitial>J</AA:MiddleInitial> <AA:LastName>Bloggs</AA:LastName> </AA:Customer>

As you can see the document is verbosely qualified using the alias ‘AA’. Although this alias can be changed (See Changing Namespace Aliases), it can be removed entirely by adding a default namespace declaration to the start of the file.

<?xml version="1.0"?> <Customer xmlns="http://sample" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" clubCardMember="false"> <FirstName>Joe</FirstName> <MiddleInitial>J</MiddleInitial> <LastName>Bloggs</LastName> </Customer>

The namespaces are controlled via the XmlSerializationContext object.

Sample Code

  C++
In the generated classes Enumerations.cpp there is class called CAppLifetime, the default mappings are configured in this class.

class CAppLifetime { static void RegisterLibrary() { LtXmlLib16::Register("Liquid Technologies Limited", "ElmNamespace.xsd", "XXXXXXXXXXXXXXXXXXXX"); // ##HAND_CODED_BLOCK_START ID="Namespace Declarations"## DO NOT MODIFY ANYTHING OUTSIDE OF THESE TAGS // Add Additional namespace declarations here... LtXmlLib16::CXmlSerializationContext::GetDefaultContext().SetSchemaType(LtXmlLib16::SchemaType_XSD); LtXmlLib16::CXmlSerializationContext::GetDefaultContext().SetDefaultNamespaceURI(_T("http://sample")); // ##HAND_CODED_BLOCK_END ID="Namespace Declarations"## DO NOT MODIFY ANYTHING OUTSIDE OF THESE TAGS } };

  C#
In the generated classes Enumerations.cs there is class called Registration, the default mappings are configured in this class.

namespace ElmNamespace { internal class Registration { private static int RegisterLicense() { LiquidTechnologies.Runtime.Net40.XmlObjectBase.Register("Liquid Technologies Limited", "ElmNamespace.xsd", "XXXXXXXXXXXXXXXX"); // ##HAND_CODED_BLOCK_START ID="Namespace Declarations"## DO NOT MODIFY ANYTHING OUTSIDE OF THESE TAGS // Add Additional namespace declarations here... LiquidTechnologies.Runtime.Net40.XmlSerializationContext.Default.SchemaType = LiquidTechnologies.Runtime.Net40.SchemaType.XSD; LiquidTechnologies.Runtime.Net40.XmlSerializationContext.Default.DefaultNamespaceURI = "http://sample"; // ##HAND_CODED_BLOCK_END ID="Namespace Declarations"## DO NOT MODIFY ANYTHING OUTSIDE OF THESE TAGS return 1; } static public int iRegistrationIndicator = RegisterLicense(); } }

  Java
In the generated classes Registration.java there is class called Registration, the default mappings are configured in this class.

public class Registration { private static int registerLicense() { com.liquid_technologies.ltxmllib16.XmlObjectBase.register("Liquid Technologies Limited", "ElmNamespace.xsd", "XXXXXXXXXXXXXXXXXX"); // ##HAND_CODED_BLOCK_START ID="Namespace Declarations"## DO NOT MODIFY ANYTHING OUTSIDE OF THESE TAGS // Add Additional namespace declarations here... com.liquid_technologies.ltxmllib16.XmlSerializationContext.Default.setSchemaType(com.liquid_technologies.ltxmllib16.SchemaType.XSD); com.liquid_technologies.ltxmllib16.XmlSerializationContext.Default.setDefaultNamespaceURI("http://sample"); // ##HAND_CODED_BLOCK_END ID="Namespace Declarations"## DO NOT MODIFY ANYTHING OUTSIDE OF THESE TAGS return 1; } static public int iRegistrationIndicator = registerLicense(); }

  Visual Basic
In the generated classs General.bas there is a function called CF, the default mappings are configured in this class.

public Function CF() as ElmNamespace.ClassFactory If m_ClassFactory Is Nothing Then Set m_ClassFactory = New ElmNamespace.ClassFactory ' ##HAND_CODED_BLOCK_START ID="Default Namespace Declarations"## DO NOT MODIFY ANYTHING OUTSIDE OF THESE TAGS ' Add Additional namespace declarations here... LtXmlComLib16.DefaultXmlSerializationContext.SchemaType = LtXmlComLib16.SchemaType_XSD LtXmlComLib16.DefaultXmlSerializationContext.DefaultNamespaceURI = "http://sample" ' ##HAND_CODED_BLOCK_END ID="Default Namespace Declarations"## DO NOT MODIFY ANYTHING OUTSIDE OF THESE TAGS End If Set CF = m_ClassFactory End Function

 

Notes

Some XML parsers insist that certain namespaces be aliased using specific alias, i.e. xerces insists http://www.w3.org/XML/1998/namespace should be aliased 'xml'. This can be accomplished by editing the RegisterNamespaces method.

Description Value
Article Created 7/2/2006
Versions Liquid XML 2005 (4.1.0) and greater
Also See Changing Namespace Aliases
  Working In a multithreaded environment
  Working With Multiple Schemas
  Hand Coded Blocks