-
Notifications
You must be signed in to change notification settings - Fork 0
AwfSp
dellch edited this page Jul 20, 2018
·
3 revisions
<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sp="http://tolkin.org/service-provider" targetNamespace="http://tolkin.org/service-provider" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xsd:annotation> <xsd:documentation> Schema for service provider description document. </xsd:documentation> </xsd:annotation> <xsd:element name="service-provider"> <xsd:complexType> <xsd:sequence> <xsd:element name="types" type="sp:TypesType" minOccurs="1" maxOccurs="unbounded"/> <!-- Type translation functionality is optional --> <xsd:element name="type-translation" type="sp:TypeTranslationType" minOccurs="0" maxOccurs="unbounded"/> <xsd:element ref="sp:program" minOccurs="1" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> <!-- Type name must be unique --> <xsd:unique name="typeNameUnique"> <xsd:selector xpath="sp:types/sp:type"/> <xsd:field xpath="@name"/> </xsd:unique> <!-- Program name must be unique --> <xsd:unique name="programNameUnique"> <xsd:selector xpath="sp:program"/> <xsd:field xpath="@name"/> </xsd:unique> <xsd:key name="typeNameKey"> <xsd:selector xpath="sp:types/sp:type"/> <xsd:field xpath="@name"/> </xsd:key> <!-- The from and to attribute of type-translation must come from existing types --> <xsd:keyref name="fromKeyRef" refer="sp:typeNameKey"> <xsd:selector xpath="sp:type-translation"/> <xsd:field xpath="@from"/> </xsd:keyref> <xsd:keyref name="toKeyRef" refer="sp:typeNameKey"> <xsd:selector xpath="sp:type-translation"/> <xsd:field xpath="@to"/> </xsd:keyref> <xsd:keyref name="acceptTypeRef" refer="sp:typeNameKey"> <xsd:selector xpath="sp:program/sp:input/sp:accept-type"/> <xsd:field xpath="@name"/> </xsd:keyref> <xsd:keyref name="alternativeTypeRef" refer="sp:typeNameKey"> <xsd:selector xpath="sp:program/sp:output/sp:alternative-type"/> <xsd:field xpath="@name"/> </xsd:keyref> </xsd:element> <xsd:complexType name="TypeType"> <xsd:simpleContent> <xsd:extension base="xsd:string"> <xsd:attribute name="name" type="xsd:string" use="required"/> </xsd:extension> </xsd:simpleContent> </xsd:complexType> <xsd:complexType name="TypesType"> <xsd:sequence> <xsd:element name="type" type="sp:TypeType" minOccurs="1" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> <!-- An empty type with two attributes from and to --> <xsd:complexType name="TypeTranslationType"> <xsd:attribute name="from" type="xsd:string" use="required"/> <xsd:attribute name="to" type="xsd:string" use="required"/> </xsd:complexType> <xsd:element name="program" type="sp:ProgramType"> <!-- Input name must be unique --> <xsd:unique name="inputNameUnique"> <xsd:selector xpath="sp:program/sp:input"/> <xsd:field xpath="@name"/> </xsd:unique> <!-- Parameter name must be unique --> <xsd:unique name="parameterNameUnique"> <xsd:selector xpath="sp:program/sp:parameter"/> <xsd:field xpath="@name"/> </xsd:unique> <!-- Output name must be unique --> <xsd:unique name="outputNameUnique"> <xsd:selector xpath="sp:program/sp:output"/> <xsd:field xpath="@name"/> </xsd:unique> </xsd:element> <xsd:complexType name="ProgramType"> <xsd:sequence> <xsd:element name="comment" type="xsd:string" minOccurs="0" maxOccurs="1"/> <xsd:element name="input" type="sp:InputType" minOccurs="0" maxOccurs="unbounded"/> <xsd:element name="parameter" type="sp:ParameterType" minOccurs="0" maxOccurs="unbounded"/> <!-- A program must produce at least one output --> <xsd:element name="output" type="sp:OutputType" minOccurs="1" maxOccurs="unbounded"/> </xsd:sequence> <xsd:attribute name="name" type="xsd:string" use="required"/> <xsd:attribute name="group" type="xsd:string" use="required"/> </xsd:complexType> <xsd:complexType name="InputType"> <xsd:sequence> <xsd:element name="comment" type="xsd:string" minOccurs="0" maxOccurs="1"/> <xsd:element name="alternative-type" type="sp:AlternativeTypeType" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> <xsd:attribute name="name" type="xsd:string" use="required"/> <xsd:attribute name="type" type="xsd:string" use="required"/> <xsd:attribute name="optional" type="xsd:boolean" default="true"/> </xsd:complexType> <xsd:complexType name="ParameterType" abstract="true"> <xsd:sequence> <xsd:element name="comment" type="xsd:string" minOccurs="0" maxOccurs="1"/> </xsd:sequence> <xsd:attribute name="name" type="xsd:string" use="required"/> <xsd:attribute name="optional" type="xsd:boolean" default="true"/> </xsd:complexType> <xsd:complexType name="IntegerParameter"> <xsd:complexContent> <xsd:extension base="sp:ParameterType"> <xsd:attribute name="default" type="xsd:integer" use="optional"/> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:complexType name="DoubleParameter"> <xsd:complexContent> <xsd:extension base="sp:ParameterType"> <xsd:attribute name="default" type="xsd:double" use="optional"/> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:complexType name="BooleanParameter"> <xsd:complexContent> <xsd:extension base="sp:ParameterType"> <xsd:attribute name="default" type="xsd:boolean" use="optional"/> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:complexType name="StringParameter"> <xsd:complexContent> <xsd:extension base="sp:ParameterType"> <xsd:sequence> <xsd:element name="choice" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> <xsd:attribute name="default" type="xsd:string" use="optional"/> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:complexType name="OutputType"> <xsd:sequence> <xsd:element name="comment" type="xsd:string" minOccurs="0" maxOccurs="1"/> <xsd:element name="alternative-type" type="sp:AlternativeTypeType" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> <xsd:attribute name="name" type="xsd:string" use="required"/> <xsd:attribute name="type" type="xsd:string" use="required"/> </xsd:complexType> <xsd:complexType name="AlternativeTypeType"> <xsd:attribute name="name" type="xsd:string" use="required"/> </xsd:complexType> </xsd:schema>