Generating XML Schema Dynamically Using VB.NET 2005: Annotations and Nesting Complex Types
(Page 1 of 4 )
This is the second article in a series concentrating on generating XML Schema dynamically using Visual Basic 2005. The series is mainly targeted at those who are familiar with XML, XML Schema and the .NET framework.
A downloadable file for this article is available
here.
If you are new to this series, you can find the first article of this series here. If you are new to XML, there exist several articles on XML alone on this website (try “igrep”). If you are new to XML Schema, I strongly suggest you go through my series “Designing your own XML Schema.”
The entire solution for this article was developed using Visual Studio 2005 Professional Edition on Windows Server 2003 standard edition. Some examples in this series may not be compiled successfully using Visual studio 2003, as some of the features in .NET 1.1 turned out to be obsolete in .NET 2.0. For complete details you can refer to the link http://go.microsoft.com/fwlink/?linkid=14202. Please note that some of the examples in this series may not be practical. Those were designed only for explaining the particular concept.
Generate XML Schema dynamically using .NET framework – more practical complex type
Since I covered all the basics in my previous article, we shall now focus on more practical “complex types” in XML Schema. Let us consider the following XML Schema:
<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Organization">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="Employee">
<xs:complexType>
<xs:sequence>
<xs:element name="ID" type="xs:int" />
<xs:element name="Name" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
The above schema mainly contains a root element, “Organization.” Within the same element, we are trying to create as many “Employee” elements as possible. Every “Employee” element internally will have “ID” and “Name” elements. To generate the above XML Schema dynamically, we can consider the following code:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.TextBox1.Text = ""
Dim schema As New XmlSchema()
Dim eOrganization As New XmlSchemaElement
schema.Items.Add(eOrganization)
eOrganization.Name = "Organization"
Dim ctOrganization As New XmlSchemaComplexType
eOrganization.SchemaType = ctOrganization
Dim sqOrganization As New XmlSchemaSequence
ctOrganization.Particle = sqOrganization
Dim eEmployee As New XmlSchemaElement()
sqOrganization.Items.Add(eEmployee)
eEmployee.Name = "Employee"
eEmployee.MaxOccursString = "unbounded"
Dim ctEmployee As New XmlSchemaComplexType()
eEmployee.SchemaType = ctEmployee
Dim sqEmployee As New XmlSchemaSequence
ctEmployee.Particle = sqEmployee
Dim eID As New XmlSchemaElement()
sqEmployee.Items.Add(eID)
eID.Name = "ID"
eID.SchemaTypeName = New XmlQualifiedName("int", "http://www.w3.org/2001/XMLSchema")
Dim eName As New XmlSchemaElement()
sqEmployee.Items.Add(eName)
eName.Name = "Name"
eName.SchemaTypeName = New XmlQualifiedName("string", "http://www.w3.org/2001/XMLSchema")
Dim nsmgr As New XmlNamespaceManager(New NameTable())
nsmgr.AddNamespace("xs", "http://www.w3.org/2001/XMLSchema")
Dim sw As New IO.StringWriter
schema.Write(sw, nsmgr)
Me.TextBox1.Text = sw.ToString
End Sub
I purposefully excluded “import” statements, because I already covered them in my previous article. You can find a step-by-step explanation of the above code in the next section.
Next: Understanding the dynamic generation of complex type in XML Schema >>
More Visual Basic.NET Articles
More By Jagadish Chaterjee