Mercurial > repos > snowblizz-super-API-ideas
view schemas/race.xsd @ 252:a54da5a8b5bb
Re #268: Restructure stats for re-use
* Add "Member Type" class
* Add member type setting and getting to Race
* Load member types from XML files
* Make unit type pull stat line from stats or first member type, or fall back to a blank stat line
* Change Stats object to initialise blank values
* Change schema
* Make stats optional
* Add member type list to race
* Add optional member type references to units
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Sun, 25 Apr 2010 15:07:08 +0000 |
parents | 2f8fd45d55e2 |
children | 0db25d5d0992 |
line wrap: on
line source
<?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:core="http://ibboard.co.uk/warfoundry/core" xmlns:cats="http://ibboard.co.uk/warfoundry/cats" targetNamespace="http://ibboard.co.uk/warfoundry/race" xmlns="http://ibboard.co.uk/warfoundry/race" elementFormDefault="qualified"> <xs:element name="race"> <xs:complexType> <xs:sequence> <xs:element name="categories" type="cats:categoriestype" minOccurs="0" /> <xs:element name="units"> <xs:complexType> <xs:sequence> <xs:element name="unit" maxOccurs="unbounded" type="unit"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="equipment" minOccurs="0" type="equipment"> </xs:element> <xs:element name="abilities" minOccurs="0"> <xs:complexType> <xs:sequence> <xs:element name="ability" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="description" type="xs:string" /> <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/> </xs:sequence> <xs:attribute name="id" type="xs:ID" use="required"/> <xs:attribute name="name" type="xs:string" use="required"/> <xs:anyAttribute processContents="lax"/> </xs:complexType> </xs:element> </xs:sequence> <xs:anyAttribute processContents="lax"/> </xs:complexType> </xs:element> <xs:element name="memberTypes" minOccurs="0"> <xs:complexType> <xs:sequence> <xs:element name="memberType" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="stats" type="stats" minOccurs="0"/> </xs:sequence> <xs:attribute name="id" type="xs:ID" use="required"/> <xs:attribute name="name" 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:ID" /> <xs:attribute name="subid" type="xs:string" default=""/> <xs:attribute name="name" type="xs:string" use="required"/> <xs:attribute name="system" type="xs:string" use="required"/> <xs:anyAttribute processContents="lax"/> </xs:complexType> </xs:element> <!--Reusable complex types --> <xs:complexType name="unit"> <xs:sequence> <xs:element name="stats" type="stats" minOccurs="0"/> <xs:element name="equipmentSlots" minOccurs="0"> <xs:complexType> <xs:sequence> <xs:element name="equipmentSlot" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="maxLimit" minOccurs="0" type="core:limit" /> <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/> </xs:sequence> <xs:attribute name="name" type="xs:string" use="required"/> <xs:anyAttribute processContents="lax"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> <xs:key name="equipSlotName"> <xs:selector xpath="equipmentSlot"/> <xs:field xpath="@name"/> </xs:key> </xs:element> <xs:element name="unitEquipment" minOccurs="0"> <xs:complexType> <xs:sequence> <xs:element name="unitEquipmentItem" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="minLimit" minOccurs="0" type="core:limit" /> <xs:element name="maxLimit" minOccurs="0" type="core:limit" /> <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/> </xs:sequence> <xs:attribute name="id" type="xs:IDREF" /> <xs:attribute name="required" type="xs:boolean" default="false"/> <!-- exclusivityGroup is deprecated in favour of the comma-separated exclusivityGroups --> <xs:attribute name="exclusivityGroup" type="xs:string" default=""/> <xs:attribute name="exclusivityGroups" type="xs:string" default=""/> <xs:attribute name="equipmentSlot" type="xs:string"/> <xs:attribute name="roundDirection" type="core:updowntype" default="up"/> <xs:attribute name="costMultiplier" type="core:nonNegativeDouble" default="1"/> <xs:attribute name="costRounding" type="costroundingtype" default="UpToHalf"/> <xs:anyAttribute processContents="lax"/> </xs:complexType> <xs:keyref name="equipmentSlot" refer="equipSlotName"> <xs:selector xpath="."/> <xs:field xpath="@equipmentSlot"/> </xs:keyref> </xs:element> </xs:sequence> <xs:anyAttribute processContents="lax"/> </xs:complexType> </xs:element> <xs:element name="unitAbilities" minOccurs="0"> <xs:complexType> <xs:sequence> <xs:element name="unitAbility" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/> </xs:sequence> <xs:attribute name="abilityID" type="xs:IDREF" /> <xs:attribute name="required" type="xs:boolean" default="true"/> <xs:anyAttribute processContents="lax"/> </xs:complexType> </xs:element> </xs:sequence> <xs:anyAttribute processContents="lax"/> </xs:complexType> </xs:element> <xs:element name="requirements" minOccurs="0"> <xs:complexType> <xs:sequence> <xs:element name="requirement"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="requirementName" type="xs:string" use="required"/> <xs:anyAttribute processContents="lax"/> </xs:extension> </xs:simpleContent> </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" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/> </xs:sequence> <xs:attribute name="containedID" type="xs:IDREF" use="required"/> <xs:anyAttribute processContents="lax"/> </xs:complexType> </xs:element> </xs:sequence> <xs:anyAttribute processContents="lax"/> </xs:complexType> </xs:element> <xs:element name="extraData" minOccurs="0"> <xs:complexType> <xs:sequence> <xs:element name="data" maxOccurs="unbounded"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="id" type="xs:ID" use="required"/> <xs:anyAttribute processContents="lax"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> </xs:sequence> <xs:anyAttribute processContents="lax"/> </xs:complexType> </xs:element> <xs:element name="unitMembers" minOccurs="0"> <xs:complexType> <xs:sequence> <xs:element name="unitMember" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/> </xs:sequence> <xs:attribute name="typeID" type="xs:IDREF" use="required"/> <xs:anyAttribute processContents="lax"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="notes" type="xs:string" minOccurs="0" /> <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/> </xs:sequence> <xs:attribute name="id" type="xs:ID" /> <xs:attribute name="typeName" type="xs:string" use="required"/> <xs:attribute name="cat" type="xs:string" use="required"/> <xs:attribute name="points" type="core:nonNegativeNonInfiniteDouble" use="required"/> <xs:attribute name="basePoints" type="core:nonNegativeNonInfiniteDouble" default="0"/> <xs:attribute name="baseSize" type="xs:nonNegativeInteger" default="0"/> <xs:attribute name="minSize" type="xs:nonNegativeInteger" default="5"/> <xs:attribute name="maxSize" type="core:positiveOrInfiniteInteger" default="-1"/> <xs:attribute name="minNum" type="xs:nonNegativeInteger" default="0"/> <xs:attribute name="maxNum" type="core:positiveOrInfiniteInteger" default="-1"/> <xs:anyAttribute processContents="lax"/> </xs:complexType> <xs:complexType name="stats"> <xs:sequence> <xs:element name="stat" maxOccurs="unbounded"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="name" type="xs:string" use="required"/> <xs:anyAttribute processContents="lax"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> </xs:sequence> <xs:attribute name="statSet" type="xs:string" default="" /> <xs:anyAttribute processContents="lax"/> </xs:complexType> <xs:complexType name="equipment"> <xs:sequence> <xs:element name="equipmentItem" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="description" type="xs:string" minOccurs="0" /> <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/> </xs:sequence> <xs:attribute name="id" type="xs:ID" use="required"/> <xs:attribute name="name" type="xs:string" use="required"/> <xs:attribute name="cost" type="core:nonNegativeNonInfiniteDouble" use="required"/> <xs:attribute name="armourType" type="armourtype" default="None"/> <xs:anyAttribute processContents="lax"/> </xs:complexType> </xs:element> </xs:sequence> <xs:anyAttribute processContents="lax"/> </xs:complexType> <!--Reusable simple types --> <xs:simpleType name="costroundingtype"> <xs:restriction base="xs:string"> <xs:enumeration value="Up"/> <xs:enumeration value="Down"/> <xs:enumeration value="Banker"/> <xs:enumeration value="UpToHalf"/> <xs:enumeration value="DownToHalf"/> <xs:enumeration value="BankerToHalf"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="armourtype"> <xs:restriction base="xs:string"> <xs:enumeration value="None"/> <xs:enumeration value="Shield"/> <xs:enumeration value="LightArmour"/> <xs:enumeration value="LightArmourShield"/> <xs:enumeration value="HeavyArmour"/> <xs:enumeration value="HeavyArmourShield"/> <xs:enumeration value="Barding"/> <xs:enumeration value="BardingShield"/> <xs:enumeration value="BardingLightArmour"/> <xs:enumeration value="BardingLightArmourShield"/> <xs:enumeration value="BardingHeavyArmour"/> <xs:enumeration value="BardingHeavyArmourShield"/> </xs:restriction> </xs:simpleType> </xs:schema>