<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:gesd="http://bldapps.cs.unc.edu/gesd" targetNamespace="http://bldapps.cs.unc.edu/gesd" elementFormDefault="qualified" attributeFormDefault="unqualified">> <!-- Encompassing Element --> <xsd:element name="designDocument"> <xsd:complexType> <xsd:sequence> <xsd:element ref="gesd:metaData" minOccurs="0" maxOccurs="1" /> <xsd:element ref="gesd:useCases" minOccurs="0" maxOccurs="1" /> <xsd:element ref="gesd:userTypes" minOccurs="0" maxOccurs="1" /> <xsd:element ref="gesd:dataTypes" minOccurs="0" maxOccurs="1" /> <xsd:element ref="gesd:interactions" minOccurs="0" maxOccurs="1" /> <xsd:element ref="gesd:relations" minOccurs="0" maxOccurs="1" /> </xsd:sequence> </xsd:complexType> <xsd:key name="UserTypeKey"> <xsd:selector xpath="gesd:userTypes/gesd:userType" /> <xsd:field xpath="@id" /> </xsd:key> <xsd:keyref name="UserTypeRef" refer="gesd:UserTypeKey"> <xsd:selector xpath="gesd:interactions/gesd:interaction/gesd:userRef" /> <xsd:field xpath="@id" /> </xsd:keyref> <xsd:key name="DataTypeKey"> <xsd:selector xpath="gesd:dataTypes/gesd:dataType" /> <xsd:field xpath="@id" /> </xsd:key> <xsd:keyref name="DataTypeRef" refer="gesd:DataTypeKey"> <xsd:selector xpath="gesd:interactions/gesd:interaction/gesd:dataRef" /> <xsd:field xpath="@id" /> </xsd:keyref> <xsd:key name="ActionKey"> <xsd:selector xpath="gesd:dataTypes/gesd:dataType/gesd:actions/gesd:action" /> <xsd:field xpath="@id" /> </xsd:key> <xsd:keyref name="ActionRef" refer="gesd:ActionKey"> <xsd:selector xpath="gesd:interactions/gesd:interaction/gesd:actionRefs/gesd:userAction" /> <xsd:field xpath="@id" /> </xsd:keyref> <xsd:key name="RelationKey"> <xsd:selector xpath="gesd:dataTypes/gesd:dataType" /> <xsd:field xpath="@id" /> </xsd:key> <xsd:keyref name="RelationRef" refer="gesd:RelationKey"> <xsd:selector xpath="gesd:relations/gesd:relation/gesd:relationComponent/gesd:dataRef" /> <xsd:field xpath="@id" /> </xsd:keyref> </xsd:element> <!-- Top-Level Elements --> <!-- MetaData Element --> <xsd:element name="metaData"> <xsd:complexType> <xsd:sequence> <xsd:element name="name" type="xsd:string" minOccurs="1" maxOccurs="1" /> <xsd:element name="owner" type="xsd:string" minOccurs="1" maxOccurs="1" /> <xsd:element name="projectId" type="xsd:string" minOccurs="1" maxOccurs="1" /> <xsd:element name="acronym" type="xsd:string" minOccurs="0" maxOccurs="1" /> </xsd:sequence> <xsd:attribute name="id" type="xsd:string" use="required" /> </xsd:complexType> </xsd:element> <!-- UseCases Elements --> <xsd:element name="useCases"> <xsd:complexType> <xsd:sequence> <xsd:element ref="gesd:useCase" minOccurs="1" maxOccurs="unbounded" /> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="useCase"> <xsd:complexType> <xsd:sequence> <xsd:element name="task" type="xsd:string" minOccurs="1" maxOccurs="1" /> <xsd:element name="user" type="xsd:string" minOccurs="1" maxOccurs="1" /> <xsd:element ref="gesd:steps" minOccurs="1" maxOccurs="unbounded" /> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="steps"> <xsd:complexType> <xsd:sequence> <xsd:element ref="gesd:step" minOccurs="1" maxOccurs="unbounded" /> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="step"> <xsd:complexType> <xsd:sequence> <xsd:element name="index" type="xsd:string" minOccurs="1" maxOccurs="1" /> <xsd:element name="description" type="xsd:string" minOccurs="1" maxOccurs="1" /> </xsd:sequence> </xsd:complexType> </xsd:element> <!-- UserType Elements --> <xsd:element name="userTypes"> <xsd:complexType> <xsd:sequence> <xsd:element ref="gesd:userType" minOccurs="1" maxOccurs="unbounded" /> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="userType"> <xsd:complexType> <xsd:sequence> <xsd:element name="name" type="xsd:string" minOccurs="0" maxOccurs="1" /> </xsd:sequence> <xsd:attribute name="id" type="xsd:string" use="required" /> </xsd:complexType> </xsd:element> <!-- DataType Elements --> <xsd:element name="dataTypes"> <xsd:complexType> <xsd:sequence> <xsd:element ref="gesd:dataType" minOccurs="1" maxOccurs="unbounded" /> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="dataType"> <xsd:complexType> <xsd:sequence> <xsd:element name="name" type="xsd:string" minOccurs="0" maxOccurs="1" /> <xsd:element name="properties" type="gesd:Properties" minOccurs="0" maxOccurs="unbounded" /> <xsd:element ref="gesd:actions" minOccurs="0" maxOccurs="unbounded" /> </xsd:sequence> <xsd:attribute name="id" type="xsd:string" use="required" /> </xsd:complexType> </xsd:element> <xsd:element name="actions"> <xsd:complexType> <xsd:sequence> <xsd:element ref="gesd:action" minOccurs="1" maxOccurs="unbounded" /> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="action"> <xsd:complexType> <xsd:sequence> <xsd:element name="name" type="xsd:string" minOccurs="1" maxOccurs="1" /> <xsd:element name="label" type="xsd:string" minOccurs="0" maxOccurs="1" /> </xsd:sequence> <xsd:attribute name="id" type="xsd:string" use="required" /> </xsd:complexType> </xsd:element> <!-- Interaction Elements --> <xsd:element name="interactions"> <xsd:complexType> <xsd:sequence> <xsd:element ref="gesd:interaction" minOccurs="0" maxOccurs="unbounded" /> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="interaction"> <xsd:complexType> <xsd:sequence> <xsd:element ref="gesd:userRef" minOccurs="1" maxOccurs="1" /> <xsd:element ref="gesd:dataRef" minOccurs="1" maxOccurs="1" /> <xsd:element ref="gesd:actionRefs" minOccurs="1" maxOccurs="1" /> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="userRef"> <xsd:complexType> <xsd:attribute name="id" type="xsd:string" use="required" /> </xsd:complexType> </xsd:element> <xsd:element name="dataRef"> <xsd:complexType> <xsd:attribute name="id" type="xsd:string" use="required" /> </xsd:complexType> </xsd:element> <xsd:element name="actionRefs"> <xsd:complexType> <xsd:sequence> <xsd:element ref="gesd:userAction" minOccurs="0" maxOccurs="unbounded" /> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="userAction"> <xsd:complexType> <xsd:sequence> <xsd:element name="constraint" type="xsd:string" minOccurs="0" maxOccurs="unbounded" /> </xsd:sequence> <xsd:attribute name="id" type="xsd:string" use="required" /> </xsd:complexType> </xsd:element> <!-- Interaction Elements --> <xsd:element name="relations"> <xsd:complexType> <xsd:sequence> <xsd:element ref="gesd:relation" minOccurs="0" maxOccurs="unbounded" /> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="relation"> <xsd:complexType> <xsd:sequence> <xsd:element name="name" type="xsd:string" minOccurs="1" maxOccurs="1" /> <xsd:element ref="gesd:relationComponent" minOccurs="2" maxOccurs="2" /> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="relationComponent"> <xsd:complexType> <xsd:sequence> <xsd:element ref="gesd:dataRef" minOccurs="1" maxOccurs="1" /> <xsd:element name="virtualProperty" type="gesd:VirtualProperty" minOccurs="1" maxOccurs="1" /> <xsd:element name="multiplicity" type="xsd:string" minOccurs="1" maxOccurs="1" /> </xsd:sequence> </xsd:complexType> </xsd:element> <!-- Components Types --> <xsd:complexType name="Properties"> <xsd:sequence> <xsd:element name="property" type="gesd:Property" minOccurs="0" maxOccurs="unbounded" /> </xsd:sequence> </xsd:complexType> <xsd:complexType name="Property"> <xsd:sequence> <xsd:element name="name" type="xsd:string" minOccurs="1" maxOccurs="1" /> <xsd:element name="type" type="xsd:string" minOccurs="1" maxOccurs="1" /> </xsd:sequence> </xsd:complexType> <xsd:complexType name="VirtualProperty"> <xsd:sequence> <xsd:element name="name" type="xsd:string" minOccurs="1" maxOccurs="1" /> <xsd:element name="type" type="xsd:string" minOccurs="1" maxOccurs="1" /> </xsd:sequence> </xsd:complexType> </xsd:schema>