view schemas/army.xsd @ 368:8cfb1818823d

Re #346: Add core schema support for requirements * Keep basis of existing schema, but allow for more extensibility
author IBBoard <dev@ibboard.co.uk>
date Sat, 28 May 2011 15:57:10 +0000
parents c7a95912c1e8
children
line wrap: on
line source

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://ibboard.co.uk/warfoundry/army"
xmlns="http://ibboard.co.uk/warfoundry/army" xmlns:army="http://ibboard.co.uk/warfoundry/army" xmlns:core="http://ibboard.co.uk/warfoundry/core" elementFormDefault="qualified">
<xs:element name="army">
	<xs:complexType>
		<xs:sequence>
			<xs:element name="units">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="unit" minOccurs="0" maxOccurs="unbounded" type="unit"/>
					</xs:sequence>
					<xs:anyAttribute processContents="lax"/>
				</xs:complexType>
				<xs:keyref name="containedUnitRef" refer="unitKey">
					<xs:selector xpath="army:unit/army:contains/army:containedUnit"/>
					<xs:field xpath="@containedID"/>
				</xs:keyref>
				<xs:key name="unitKey">
					<xs:selector xpath="army:unit"/>
					<xs:field xpath="@id"/>
				</xs:key>
			</xs:element>
			<xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
		</xs:sequence>
		<xs:attribute name="id" type="xs:ID" />
		<xs:attribute name="name" type="xs:string" use="required"/>
		<xs:attribute name="system" type="xs:string" use="required"/>
		<xs:attribute name="race" type="xs:string" use="required"/>
		<xs:attribute name="maxPoints" type="xs:positiveInteger" use="required"/>
		<xs:anyAttribute processContents="lax"/>
	</xs:complexType>
</xs:element>

<!-- Re-usable complex types -->

<xs:complexType name="unit">
	<xs:sequence>
		<xs:element name="equipment" minOccurs="0">
			<xs:complexType>
				<xs:sequence>
					<xs:element name="equipItem" maxOccurs="unbounded">
						<xs:complexType>
							<xs:sequence>
								<xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
							</xs:sequence>
							<xs:attribute name="id" type="xs:string" use="required" />
							<xs:attribute name="amount" type="core:nonNegativeOrInfiniteIntegerOrPercentage" use="required"/>
							<xs:attribute name="amountType" type="equipmentAmountType" default="ratio"/>
							<xs:anyAttribute processContents="lax"/>
						</xs:complexType>
					</xs:element>
				</xs:sequence>
				<xs:anyAttribute processContents="lax"/>
			</xs:complexType>
		</xs:element>
		<xs:element name="contains" minOccurs="0">
			<xs:complexType>
				<xs:sequence>
					<xs:element name="containedUnit">
						<xs:complexType>
							<xs:sequence>
								<xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
							</xs:sequence>
							<xs:attribute name="containedID" type="xs:string" use="required"/>
							<xs:anyAttribute processContents="lax"/>
						</xs:complexType>
					</xs:element>
				</xs:sequence>
			</xs:complexType>
		</xs:element>
		<xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
	</xs:sequence>
	<xs:attribute name="id" type="xs:string" use="required" />
	<xs:attribute name="unitType" type="xs:string" use="required"/>
	<xs:attribute name="unitName" type="xs:string" use="required"/>
	<xs:attribute name="size" type="xs:positiveInteger" use="required"/>
	<xs:attribute name="race" type="xs:string" default=""/>
	<xs:attribute name="category" type="xs:string" default=""/>
	<xs:anyAttribute processContents="lax"/>
</xs:complexType>

<xs:simpleType name="equipmentAmountType">
	<xs:restriction base="xs:string">
		<xs:enumeration value="ratio"/>
		<xs:enumeration value="fixed"/>
	</xs:restriction>
</xs:simpleType>
</xs:schema>