changeset 267:3f14a792fd41

Re #274: Crash when missing unit member ID * Add key and keyref for member type Re #290: Migrate to using key/keyref definitions instead of ID/IDREF type * Move keyref and key for equipment slot to correct place to be valid * Add aliased xmlns for schema to allow for use in XPath, which doesn't use default namespace * Disable warning reporting until Mono Bug 613684 is fixed (https://bugzilla.novell.com/show_bug.cgi?id=613684)
author IBBoard <dev@ibboard.co.uk>
date Sat, 12 Jun 2010 19:49:32 +0000
parents a3c1bf57fd3f
children d8e4eeb761c7
files api/Factories/Xml/WarFoundryXmlFactoryUtils.cs schemas/race.xsd
diffstat 2 files changed, 28 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/api/Factories/Xml/WarFoundryXmlFactoryUtils.cs	Sat Jun 05 18:57:46 2010 +0000
+++ b/api/Factories/Xml/WarFoundryXmlFactoryUtils.cs	Sat Jun 12 19:49:32 2010 +0000
@@ -63,7 +63,7 @@
 			{
 				settings = new XmlReaderSettings();
 				settings.ValidationType = ValidationType.Schema;
-				settings.ValidationFlags = XmlSchemaValidationFlags.ReportValidationWarnings;
+				//settings.ValidationFlags = XmlSchemaValidationFlags.ReportValidationWarnings;
 				settings.ProhibitDtd = true;
 				settings.ValidationEventHandler+= new ValidationEventHandler(ValidationEventMethod);
 				XmlSchemaSet cache = new XmlSchemaSet();
@@ -82,7 +82,14 @@
 		
 		private static void ValidationEventMethod(object sender, ValidationEventArgs e)
 		{
-			throw new InvalidFileException("Problem validating against schema for WarFoundry data: " + e.Message, e.Exception);
+			if (e.Severity == XmlSeverityType.Error)
+			{
+				throw new InvalidFileException("Problem validating against schema for WarFoundry data: " + e.Message, e.Exception);
+			}
+			else
+			{
+				//TODO: Fire some kind of warning event
+			}
 		}
 		
 		private static void AddSchemaToCache(XmlSchemaSet cache, string xmlNamespace, string schemaLocation)
--- a/schemas/race.xsd	Sat Jun 05 18:57:46 2010 +0000
+++ b/schemas/race.xsd	Sat Jun 12 19:49:32 2010 +0000
@@ -1,6 +1,6 @@
 <?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">
+targetNamespace="http://ibboard.co.uk/warfoundry/race" xmlns="http://ibboard.co.uk/warfoundry/race" xmlns:race="http://ibboard.co.uk/warfoundry/race" elementFormDefault="qualified">
 <xs:element name="race">
 	<xs:complexType>
 		<xs:sequence>
@@ -8,7 +8,16 @@
 			<xs:element name="units">
 				<xs:complexType>
 					<xs:sequence>
-						<xs:element name="unit" maxOccurs="unbounded" type="unit"/>
+						<xs:element name="unit" maxOccurs="unbounded" type="unit">
+							<xs:keyref name="equipSlotRef" refer="equipSlotKey">
+								<xs:selector xpath="race:unitEquipment/race:unitEquipmentItem"/>
+								<xs:field xpath="@equipmentSlot"/>
+							</xs:keyref>
+							<xs:key name="equipSlotKey">
+								<xs:selector xpath="race:equipmentSlots/race:equipmentSlot"/>
+								<xs:field xpath="@name"/>
+							</xs:key>
+						</xs:element>
 					</xs:sequence>
 				</xs:complexType>
 			</xs:element>
@@ -60,6 +69,14 @@
 		<xs:attribute name="system" type="xs:string" use="required"/>
 		<xs:anyAttribute processContents="lax"/>
 	</xs:complexType>
+	<xs:keyref name="memberTypeRef" refer="memberTypeKey">
+		<xs:selector xpath="race:units/race:unit/race:unitMembers/race:unitMember"/>
+		<xs:field xpath="@typeID"/>
+	</xs:keyref>
+	<xs:key name="memberTypeKey">
+		<xs:selector xpath="race:memberTypes/race:memberType"/>
+		<xs:field xpath="@id"/>
+	</xs:key>
 </xs:element>
 
 <!--Reusable complex types -->
@@ -81,10 +98,6 @@
 					</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>
@@ -107,10 +120,6 @@
 							<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"/>