Click here to Skip to main content
15,886,806 members
Articles / Programming Languages / XSLT

Generic Data Points Series XML format and its validated loading with LINQ to XML

Rate me:
Please Sign up or sign in to vote.
4.67/5 (3 votes)
24 Apr 2009CPOL13 min read 24.5K   101   7  
How to express a series of generic data points in XML and read them without much pain.
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" 
					 targetNamespace="urn:PointSeries-schema"
					 xmlns="urn:PointSeries-schema"
					 xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<!-- Root element -->
	<xs:element name="Items" type="itemsType"/>
	
	<!-- Root element type -->
	<xs:complexType name="itemsType">
		<xs:choice maxOccurs="unbounded">
			<xs:element name="Points.Int" type="pointsIntIntType"/>
			<xs:element name="Points.Int.Double" type="pointsIntDblType"/>
			<xs:element name="Points.Int.DateTime" type="pointsIntDttmType"/>
			<xs:element name="Points.Int.Date" type="pointsIntDtType"/>
			<xs:element name="Points.Int.Time" type="pointsIntTimeType"/>
			<xs:element name="Points.Int.Month" type="pointsIntMonthType"/>
			<xs:element name="Points.Int.Year" type="pointsIntYearType"/>
			<xs:element name="Points.Int.YearMonth" type="pointsIntYearMonthType"/>
			<xs:element name="Points.Int.MonthDay" type="pointsIntMonthDayType"/>
			<xs:element name="Points.Int.Duration" type="pointsIntDurationType"/>
			<xs:element name="Points.Double" type="pointsDblDblType"/>
			<xs:element name="Points.Double.Int" type="pointsDblIntType"/>
			<xs:element name="Points.Double.DateTime" type="pointsDblDttmType"/>
			<xs:element name="Points.Double.Date" type="pointsDblDtType"/>
			<xs:element name="Points.Double.Month" type="pointsDblMonthType"/>
			<xs:element name="Points.DateTime" type="pointsDttmDttmType"/>
			<xs:element name="Points.DateTime.Int" type="pointsDttmIntType"/>
			<xs:element name="Points.DateTime.Double" type="pointsDttmDblType"/>
			<xs:element name="Points.DateTime.Date" type="pointsDttmDtType"/>
			<xs:element name="Points.DateTime.Month" type="pointsDttmMonthType"/>
			<xs:element name="Points.Date" type="pointsDtDtType"/>
			<xs:element name="Points.Date.Int" type="pointsDtIntType"/>
			<xs:element name="Points.Date.Double" type="pointsDtDblType"/>
			<xs:element name="Points.Date.DateTime" type="pointsDtDttmType"/>
			<xs:element name="Points.Date.Month" type="pointsDtMonthType"/>
			<xs:element name="Points.Month" type="pointsMonthMonthType"/>
			<xs:element name="Points.Month.Int" type="pointsMonthIntType"/>
			<xs:element name="Points.Month.Double" type="pointsMonthDblType"/>
			<xs:element name="Points.Month.DateTime" type="pointsMonthDttmType"/>
			<xs:element name="Points.Month.Date" type="pointsMonthDtType"/>
		</xs:choice>
	</xs:complexType>
	
	<!-- Point Series Type attributes -->
	<xs:attributeGroup name="pointSetAttributes">
		<xs:attribute name="YName" type="xs:string" use="optional" />
		<xs:attribute name="XName" type="xs:string" use="optional" />
	</xs:attributeGroup>

	<!-- Point Series Types -->
	<xs:complexType name="pointsIntIntType">
			<xs:sequence>
				<xs:element minOccurs="1" maxOccurs="unbounded" name="Point">
					<xs:complexType>
						<xs:attribute name="x" type="xs:int" use="required" />
						<xs:attribute name="y" type="xs:int" use="required" />
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		<xs:attributeGroup ref="pointSetAttributes"/>
	</xs:complexType>
	<xs:complexType name="pointsIntDblType">
			<xs:sequence>
				<xs:element minOccurs="1" maxOccurs="unbounded" name="Point">
					<xs:complexType>
						<xs:attribute name="x" type="xs:int" use="required" />
						<xs:attribute name="y" type="xs:double" use="required" />
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		<xs:attributeGroup ref="pointSetAttributes"/>
	</xs:complexType>
	<xs:complexType name="pointsIntDttmType">
			<xs:sequence>
				<xs:element minOccurs="1" maxOccurs="unbounded" name="Point">
					<xs:complexType>
						<xs:attribute name="x" type="xs:int" use="required" />
						<xs:attribute name="y" type="xs:dateTime" use="required" />
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		<xs:attributeGroup ref="pointSetAttributes"/>
	</xs:complexType>
	<xs:complexType name="pointsIntDtType">
			<xs:sequence>
				<xs:element minOccurs="1" maxOccurs="unbounded" name="Point">
					<xs:complexType>
						<xs:attribute name="x" type="xs:int" use="required" />
						<xs:attribute name="y" type="xs:date" use="required" />
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		<xs:attributeGroup ref="pointSetAttributes"/>
	</xs:complexType>
	<xs:complexType name="pointsIntTimeType">
			<xs:sequence>
				<xs:element minOccurs="1" maxOccurs="unbounded" name="Point">
					<xs:complexType>
						<xs:attribute name="x" type="xs:int" use="required" />
						<xs:attribute name="y" type="xs:time" use="required" />
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		<xs:attributeGroup ref="pointSetAttributes"/>
	</xs:complexType>
	<xs:complexType name="pointsIntMonthType">
			<xs:sequence>
				<xs:element minOccurs="1" maxOccurs="unbounded" name="Point">
					<xs:complexType>
						<xs:attribute name="x" type="xs:int" use="required" />
						<xs:attribute name="y" type="xs:gMonth" use="required" />
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		<xs:attributeGroup ref="pointSetAttributes"/>
	</xs:complexType>
	<xs:complexType name="pointsIntYearType">
			<xs:sequence>
				<xs:element minOccurs="1" maxOccurs="unbounded" name="Point">
					<xs:complexType>
						<xs:attribute name="x" type="xs:int" use="required" />
						<xs:attribute name="y" type="xs:gYear" use="required" />
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		<xs:attributeGroup ref="pointSetAttributes"/>
	</xs:complexType>
	<xs:complexType name="pointsIntYearMonthType">
			<xs:sequence>
				<xs:element minOccurs="1" maxOccurs="unbounded" name="Point">
					<xs:complexType>
						<xs:attribute name="x" type="xs:int" use="required" />
						<xs:attribute name="y" type="xs:gYearMonth" use="required" />
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		<xs:attributeGroup ref="pointSetAttributes"/>
	</xs:complexType>
	<xs:complexType name="pointsIntMonthDayType">
			<xs:sequence>
				<xs:element minOccurs="1" maxOccurs="unbounded" name="Point">
					<xs:complexType>
						<xs:attribute name="x" type="xs:int" use="required" />
						<xs:attribute name="y" type="xs:gMonthDay" use="required" />
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		<xs:attributeGroup ref="pointSetAttributes"/>
	</xs:complexType>
	<xs:complexType name="pointsIntDurationType">
			<xs:sequence>
				<xs:element minOccurs="1" maxOccurs="unbounded" name="Point">
					<xs:complexType>
						<xs:attribute name="x" type="xs:int" use="required" />
						<xs:attribute name="y" type="xs:duration" use="required" />
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		<xs:attributeGroup ref="pointSetAttributes"/>
	</xs:complexType>
	
	<xs:complexType name="pointsDblIntType">
			<xs:sequence>
				<xs:element minOccurs="1" maxOccurs="unbounded" name="Point">
					<xs:complexType>
						<xs:attribute name="x" type="xs:double" use="required" />
						<xs:attribute name="y" type="xs:int" use="required" />
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		<xs:attributeGroup ref="pointSetAttributes"/>
	</xs:complexType>
	<xs:complexType name="pointsDblDblType">
			<xs:sequence>
				<xs:element minOccurs="1" maxOccurs="unbounded" name="Point">
					<xs:complexType>
						<xs:attribute name="x" type="xs:double" use="required" />
						<xs:attribute name="y" type="xs:double" use="required" />
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		<xs:attributeGroup ref="pointSetAttributes"/>
	</xs:complexType>
	<xs:complexType name="pointsDblDttmType">
			<xs:sequence>
				<xs:element minOccurs="1" maxOccurs="unbounded" name="Point">
					<xs:complexType>
						<xs:attribute name="x" type="xs:double" use="required" />
						<xs:attribute name="y" type="xs:dateTime" use="required" />
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		<xs:attributeGroup ref="pointSetAttributes"/>
	</xs:complexType>
	<xs:complexType name="pointsDblDtType">
			<xs:sequence>
				<xs:element minOccurs="1" maxOccurs="unbounded" name="Point">
					<xs:complexType>
						<xs:attribute name="x" type="xs:double" use="required" />
						<xs:attribute name="y" type="xs:date" use="required" />
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		<xs:attributeGroup ref="pointSetAttributes"/>
	</xs:complexType>
	<xs:complexType name="pointsDblMonthType">
			<xs:sequence>
				<xs:element minOccurs="1" maxOccurs="unbounded" name="Point">
					<xs:complexType>
						<xs:attribute name="x" type="xs:double" use="required" />
						<xs:attribute name="y" type="xs:gMonth" use="required" />
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		<xs:attributeGroup ref="pointSetAttributes"/>
	</xs:complexType>
	
	<xs:complexType name="pointsDttmDttmType">
			<xs:sequence>
				<xs:element minOccurs="1" maxOccurs="unbounded" name="Point">
					<xs:complexType>
						<xs:attribute name="x" type="xs:dateTime" use="required" />
						<xs:attribute name="y" type="xs:dateTime" use="required" />
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		<xs:attributeGroup ref="pointSetAttributes"/>
	</xs:complexType>
	<xs:complexType name="pointsDttmIntType">
			<xs:sequence>
				<xs:element minOccurs="1" maxOccurs="unbounded" name="Point">
					<xs:complexType>
						<xs:attribute name="x" type="xs:dateTime" use="required" />
						<xs:attribute name="y" type="xs:int" use="required" />
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		<xs:attributeGroup ref="pointSetAttributes"/>
	</xs:complexType>
	<xs:complexType name="pointsDttmDblType">
			<xs:sequence>
				<xs:element minOccurs="1" maxOccurs="unbounded" name="Point">
					<xs:complexType>
						<xs:attribute name="x" type="xs:dateTime" use="required" />
						<xs:attribute name="y" type="xs:double" use="required" />
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		<xs:attributeGroup ref="pointSetAttributes"/>
	</xs:complexType>
	<xs:complexType name="pointsDttmDtType">
			<xs:sequence>
				<xs:element minOccurs="1" maxOccurs="unbounded" name="Point">
					<xs:complexType>
						<xs:attribute name="x" type="xs:dateTime" use="required" />
						<xs:attribute name="y" type="xs:date" use="required" />
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		<xs:attributeGroup ref="pointSetAttributes"/>
	</xs:complexType>
	<xs:complexType name="pointsDttmMonthType">
			<xs:sequence>
				<xs:element minOccurs="1" maxOccurs="unbounded" name="Point">
					<xs:complexType>
						<xs:attribute name="x" type="xs:dateTime" use="required" />
						<xs:attribute name="y" type="xs:gMonth" use="required" />
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		<xs:attributeGroup ref="pointSetAttributes"/>
	</xs:complexType>
	
	<xs:complexType name="pointsDtDtType">
			<xs:sequence>
				<xs:element minOccurs="1" maxOccurs="unbounded" name="Point">
					<xs:complexType>
						<xs:attribute name="x" type="xs:date" use="required" />
						<xs:attribute name="y" type="xs:date" use="required" />
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		<xs:attributeGroup ref="pointSetAttributes"/>
	</xs:complexType>
	<xs:complexType name="pointsDtDttmType">
			<xs:sequence>
				<xs:element minOccurs="1" maxOccurs="unbounded" name="Point">
					<xs:complexType>
						<xs:attribute name="x" type="xs:date" use="required" />
						<xs:attribute name="y" type="xs:dateTime" use="required" />
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		<xs:attributeGroup ref="pointSetAttributes"/>
	</xs:complexType>
	<xs:complexType name="pointsDtDblType">
			<xs:sequence>
				<xs:element minOccurs="1" maxOccurs="unbounded" name="Point">
					<xs:complexType>
						<xs:attribute name="x" type="xs:date" use="required" />
						<xs:attribute name="y" type="xs:double" use="required" />
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		<xs:attributeGroup ref="pointSetAttributes"/>
	</xs:complexType>
	<xs:complexType name="pointsDtIntType">
			<xs:sequence>
				<xs:element minOccurs="1" maxOccurs="unbounded" name="Point">
					<xs:complexType>
						<xs:attribute name="x" type="xs:date" use="required" />
						<xs:attribute name="y" type="xs:int" use="required" />
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		<xs:attributeGroup ref="pointSetAttributes"/>
	</xs:complexType>
	<xs:complexType name="pointsDtMonthType">
			<xs:sequence>
				<xs:element minOccurs="1" maxOccurs="unbounded" name="Point">
					<xs:complexType>
						<xs:attribute name="x" type="xs:date" use="required" />
						<xs:attribute name="y" type="xs:gMonth" use="required" />
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		<xs:attributeGroup ref="pointSetAttributes"/>
	</xs:complexType>
	
	<xs:complexType name="pointsMonthIntType">
			<xs:sequence>
				<xs:element minOccurs="1" maxOccurs="unbounded" name="Point">
					<xs:complexType>
						<xs:attribute name="x" type="xs:gMonth" use="required" />
						<xs:attribute name="y" type="xs:int" use="required" />
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		<xs:attributeGroup ref="pointSetAttributes"/>
	</xs:complexType>
	<xs:complexType name="pointsMonthDblType">
			<xs:sequence>
				<xs:element minOccurs="1" maxOccurs="unbounded" name="Point">
					<xs:complexType>
						<xs:attribute name="x" type="xs:gMonth" use="required" />
						<xs:attribute name="y" type="xs:double" use="required" />
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		<xs:attributeGroup ref="pointSetAttributes"/>
	</xs:complexType>
	<xs:complexType name="pointsMonthDttmType">
			<xs:sequence>
				<xs:element minOccurs="1" maxOccurs="unbounded" name="Point">
					<xs:complexType>
						<xs:attribute name="x" type="xs:gMonth" use="required" />
						<xs:attribute name="y" type="xs:dateTime" use="required" />
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		<xs:attributeGroup ref="pointSetAttributes"/>
	</xs:complexType>
	<xs:complexType name="pointsMonthDtType">
			<xs:sequence>
				<xs:element minOccurs="1" maxOccurs="unbounded" name="Point">
					<xs:complexType>
						<xs:attribute name="x" type="xs:gMonth" use="required" />
						<xs:attribute name="y" type="xs:date" use="required" />
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		<xs:attributeGroup ref="pointSetAttributes"/>
	</xs:complexType>
	<xs:complexType name="pointsMonthMonthType">
			<xs:sequence>
				<xs:element minOccurs="1" maxOccurs="unbounded" name="Point">
					<xs:complexType>
						<xs:attribute name="x" type="xs:gMonth" use="required" />
						<xs:attribute name="y" type="xs:gMonth" use="required" />
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		<xs:attributeGroup ref="pointSetAttributes"/>
	</xs:complexType>
</xs:schema>

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Team Leader
Russian Federation Russian Federation
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions