16-17 May 2019 • Sofia, Bulgaria

Submission: 1 February 2019 • Notification: 1 March 2019 • Final Version: 1 April 2019

GNschema.xsd

From Ifigenia, the wiki for intuitionistic fuzzy sets and generalized nets
Jump to: navigation, search

GNschema.xsd (Download-icon.png XSD (15 Kb, Info) Download-icon.png)

<?xml version="1.0"?>
<!-- edited with XMLSpy v2007 sp2 (http://www.altova.com) by fr0zd (none) -->
<xsd:schema xmlns="http://www.clbme.bas.bg/GN" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xhtml="http://www.w3.org/1999/xhtml" targetNamespace="http://www.clbme.bas.bg/GN" elementFormDefault="qualified">
	<xsd:annotation>
		<xsd:documentation xml:lang="en">
			<xhtml:h1>This is version 1.10 of the GN schema</xhtml:h1>
			<xhtml:h2>Version history:</xhtml:h2>
			<xhtml:h3>Version 1.10</xhtml:h3>
			<xhtml:ul>
				<xhtml:li>Multiple gn elements can be written single gn-model document element</xhtml:li>
				<xhtml:li>Changes to visual information representation</xhtml:li>
			</xhtml:ul>
			<xhtml:h3>Version 1.9</xhtml:h3>
			<xhtml:ul>
				<xhtml:li>Visual information for elements included</xhtml:li>
			</xhtml:ul>
			<xhtml:h3>Version 1.8.1</xhtml:h3>
			<xhtml:ul>
				<xhtml:li>"random" type of generator added</xhtml:li>
			</xhtml:ul>
			<xhtml:h3>Version 1.8</xhtml:h3>
			<xhtml:ul>
				<xhtml:li>Predicate definitions changed</xhtml:li>
				<xhtml:li>References changed</xhtml:li>
			</xhtml:ul>
			<xhtml:h3>Version 1.7</xhtml:h3>
			<xhtml:ul>
				<xhtml:li>Namespace qualification has been introduced</xhtml:li>
				<xhtml:li>Namespace "http://www.clbme.bas.bg/GN" will be used for GN XML definitions</xhtml:li>
			</xhtml:ul>
			<xhtml:h3>Version 1.6</xhtml:h3>
			<xhtml:ul>
				<xhtml:li>The "common" attribute group has been created</xhtml:li>
				<xhtml:li>"generator" declared as an extension of "token"</xhtml:li>
				<xhtml:li>Sequence replaced with all in "gn" element</xhtml:li>
				<xhtml:li>The "integerInf" type has been added</xhtml:li>
				<xhtml:li>Some cosmetic changes and comments were added</xhtml:li>
			</xhtml:ul>
			<xhtml:h3>Version 1.5</xhtml:h3>
			<xhtml:ul>
				<xhtml:li>Merging of tokens in places is now supported via the "merge" and "mergeRule" attributes</xhtml:li>
				<xhtml:li>The "generatorType" has been provided as an enumeration type</xhtml:li>
			</xhtml:ul>
			<xhtml:h3>Version 1.4</xhtml:h3>
			<xhtml:ul>
				<xhtml:li>Token generators now supported via adding a "generator" alternative to the "token" element</xhtml:li>
				<xhtml:li>Generators can also be referenced by a keyref in place/@host</xhtml:li>
				<xhtml:li>Deprecation of old tokens with a default characteristics</xhtml:li>
			</xhtml:ul>
			<xhtml:h3>Version 1.3</xhtml:h3>
			<xhtml:ul>
				<xhtml:li>"import" element defined, "fundefs" attribute of "gn" element maintained for backward compatibility</xhtml:li>
				<xhtml:li>Mixed content model for "functions", inline function definitions permitted</xhtml:li>
				<xhtml:li>Multiple named characteristics for tokens are defined via "char" subelements of "token"</xhtml:li>
				<xhtml:li>Backward compatibility is still maintained for old GN models</xhtml:li>
			</xhtml:ul>
			<xhtml:h3>Version 1.2</xhtml:h3>
			<xhtml:ul>
				<xhtml:li>Some comments were added with suggestions to future expansions of the transitionType tags, input and output lists and predicate matrix. Special thanks to Evelina :)</xhtml:li>
			</xhtml:ul>
			<xhtml:h3>Version 1.1</xhtml:h3>
			<xhtml:ul>
				<xhtml:li>"entering" and "leaving" attributes of "token" added</xhtml:li>
				<xhtml:li>"timeStart" and "timeStep" attributes of "gn" element added</xhtml:li>
			</xhtml:ul>
			<xhtml:h3>Version 1.0</xhtml:h3>
			<xhtml:ul>
				<xhtml:li>First definition of the XML Schema</xhtml:li>
				<xhtml:li>Only one characteristic in tokens supported</xhtml:li>
			</xhtml:ul>
		</xsd:documentation>
	</xsd:annotation>
	<xsd:simpleType name="transitionType">
		<xsd:restriction base="xsd:string"/>
	</xsd:simpleType>
	<xsd:element name="point" type="visualPositionType"/>
	<xsd:complexType name="pointList">
		<xsd:sequence maxOccurs="unbounded">
			<xsd:element ref="point"/>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:simpleType name="capacityMatrix">
		<xsd:list itemType="xsd:nonNegativeInteger"/>
	</xsd:simpleType>
	<xsd:simpleType name="integerInf">
		<xsd:restriction base="xsd:integer">
			<xsd:minInclusive value="-1"/>
		</xsd:restriction>
	</xsd:simpleType>
	<xsd:complexType name="placeRefType">
		<xsd:all>
			<xsd:element name="arc" type="pointList" minOccurs="0"/>
		</xsd:all>
		<xsd:attribute name="ref" type="xsd:NMTOKEN" use="required"/>
	</xsd:complexType>
	<xsd:element name="transition">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="inputs">
					<xsd:complexType>
						<xsd:sequence maxOccurs="unbounded">
							<xsd:element name="input" type="placeRefType"/>
						</xsd:sequence>
					</xsd:complexType>
				</xsd:element>
				<xsd:element name="outputs">
					<xsd:complexType>
						<xsd:sequence maxOccurs="unbounded">
							<xsd:element name="output" type="placeRefType"/>
						</xsd:sequence>
					</xsd:complexType>
				</xsd:element>
				<xsd:element name="predicates">
					<xsd:complexType>
						<xsd:sequence minOccurs="0" maxOccurs="unbounded">
							<xsd:element name="predicate">
								<xsd:complexType>
									<xsd:simpleContent>
										<xsd:extension base="xsd:NMTOKEN">
											<xsd:attribute name="input" type="xsd:IDREF" use="required"/>
											<xsd:attribute name="output" type="xsd:IDREF" use="required"/>
										</xsd:extension>
									</xsd:simpleContent>
								</xsd:complexType>
							</xsd:element>
						</xsd:sequence>
						<xsd:attribute name="default" default="false">
							<xsd:simpleType>
								<xsd:restriction base="xsd:string">
									<xsd:enumeration value="true"/>
									<xsd:enumeration value="false"/>
								</xsd:restriction>
							</xsd:simpleType>
						</xsd:attribute>
					</xsd:complexType>
				</xsd:element>
				<xsd:element name="capacities" type="capacityMatrix" minOccurs="0"/>
			</xsd:sequence>
			<xsd:attributeGroup ref="common"/>
			<xsd:attributeGroup ref="visualBounds"/>
			<xsd:attribute name="startTime" type="xsd:nonNegativeInteger" default="0"/>
			<xsd:attribute name="lifeTime" type="integerInf" default="-1"/>
			<xsd:attribute name="type" type="transitionType"/>
			<!-- The transition type can be an identifier of a predicate, which should be evaluated every time
             a transition is fired -->
		</xsd:complexType>
		<!-- keys -->
		<xsd:key name="inputKey">
			<xsd:selector xpath="inputs/input"/>
			<xsd:field xpath="@ref"/>
		</xsd:key>
		<xsd:key name="outputKey">
			<xsd:selector xpath="outputs/output"/>
			<xsd:field xpath="@ref"/>
		</xsd:key>
		<xsd:key name="predicateKey">
			<xsd:selector xpath="predicates/predicate"/>
			<xsd:field xpath="@input"/>
			<xsd:field xpath="@output"/>
		</xsd:key>
		<!-- keyrefs -->
		<xsd:keyref name="predicateInputRef" refer="inputKey">
			<xsd:selector xpath="predicates/predicate"/>
			<xsd:field xpath="@input"/>
		</xsd:keyref>
		<xsd:keyref name="predicateOutputRef" refer="outputKey">
			<xsd:selector xpath="predicates/predicate"/>
			<xsd:field xpath="@output"/>
		</xsd:keyref>
	</xsd:element>
	<xsd:attributeGroup name="common">
		<xsd:attribute name="id" type="xsd:ID" use="required"/>
		<xsd:attribute name="priority" type="xsd:nonNegativeInteger" default="0"/>
		<xsd:attribute name="name" type="xsd:string" default=""/>
	</xsd:attributeGroup>
	<xsd:attributeGroup name="visualPosition">
		<xsd:attribute name="positionX" type="visualCoordinatesType"/>
		<xsd:attribute name="positionY" type="visualCoordinatesType"/>
	</xsd:attributeGroup>
	<xsd:attributeGroup name="visualSize">
		<xsd:attribute name="sizeX" type="visualMetricType" default="0"/>
		<xsd:attribute name="sizeY" type="visualMetricType" default="0"/>
	</xsd:attributeGroup>
	<xsd:attributeGroup name="visualBounds">
		<xsd:attributeGroup ref="visualPosition"/>
		<xsd:attributeGroup ref="visualSize"/>
	</xsd:attributeGroup>
	<xsd:element name="place">
		<xsd:complexType>
			<xsd:attributeGroup ref="common"/>
			<xsd:attributeGroup ref="visualPosition"/>
			<xsd:attribute name="char" type="xsd:string" default="ID"/>
			<xsd:attribute name="capacity" type="integerInf" default="-1"/>
			<xsd:attribute name="merge" type="xsd:boolean" default="false"/>
			<xsd:attribute name="mergeRule" type="xsd:string" default="ID"/>
		</xsd:complexType>
	</xsd:element>
	<xsd:simpleType name="charType">
		<xsd:restriction base="xsd:string"/>
	</xsd:simpleType>
	<xsd:element name="char">
		<xsd:complexType>
			<xsd:simpleContent>
				<xsd:extension base="charType">
					<xsd:attribute name="name" type="xsd:NMTOKEN" default="Default"/>
					<xsd:attribute name="type" type="xsd:string" use="required"/>
					<xsd:attribute name="history" type="xsd:positiveInteger" default="1"/>
				</xsd:extension>
			</xsd:simpleContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:complexType name="tokenType">
		<xsd:sequence minOccurs="0" maxOccurs="unbounded">
			<xsd:element ref="char"/>
		</xsd:sequence>
		<xsd:attributeGroup ref="common"/>
		<xsd:attribute name="host" type="xsd:IDREF" use="required"/>
		<xsd:attribute name="entering" type="xsd:nonNegativeInteger" default="0"/>
		<xsd:attribute name="leaving" type="integerInf" default="-1"/>
		<!-- obsolete -->
		<!--
      <xsd:attribute name="history" type="xsd:positiveInteger" default="1"/>
      <xsd:attribute name="defaulttype" type="xsd:string" use="required"/>
      <xsd:attribute name="default" type="xsd:string" use="required"/>
-->
	</xsd:complexType>
	<xsd:simpleType name="generatorMode">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="periodic"/>
			<xsd:enumeration value="conditional"/>
			<xsd:enumeration value="random"/>
		</xsd:restriction>
	</xsd:simpleType>
	<xsd:complexType name="generatorType">
		<xsd:complexContent>
			<xsd:extension base="tokenType">
				<xsd:attribute name="type" type="generatorMode" use="required"/>
				<xsd:attribute name="predicate" type="xsd:NMTOKEN" default="true"/>
				<xsd:attribute name="period" type="xsd:positiveInteger" default="1"/>
			</xsd:extension>
			<!-- generator attributes -->
		</xsd:complexContent>
	</xsd:complexType>
	<xsd:simpleType name="functionType">
		<xsd:restriction base="xsd:string"/>
	</xsd:simpleType>
	<!-- not used for the moment
    functions are declared inline, without an id

  <xsd:element name="function">
    <xsd:complexType>
      <xsd:simpleContent>
        <xsd:extension base="functionType">
	  <xsd:attribute name="id" type="xsd:ID" use="required"/>
	</xsd:extension>
      </xsd:simpleContent>
    </xsd:complexType>
  </xsd:element>

    <xsd:key name="functionKey">
      <xsd:selector xpath="functions/function"/>
      <xsd:field xpath="@id"/>
    </xsd:key>

-->
	<xsd:element name="import">
		<xsd:complexType>
			<xsd:attribute name="fundefs" type="xsd:string"/>
		</xsd:complexType>
	</xsd:element>
	<xsd:simpleType name="unitsType">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="px"/>
			<xsd:enumeration value="mm"/>
		</xsd:restriction>
	</xsd:simpleType>
	<xsd:simpleType name="visualMetricType">
		<xsd:restriction base="xsd:double">
			<xsd:minInclusive value="0"/>
		</xsd:restriction>
	</xsd:simpleType>
	<xsd:simpleType name="visualCoordinatesType">
		<xsd:restriction base="xsd:double"/>
	</xsd:simpleType>
	<xsd:complexType name="visualSizeType">
		<xsd:attributeGroup ref="visualSize"/>
	</xsd:complexType>
	<xsd:complexType name="visualPositionType">
		<xsd:attributeGroup ref="visualPosition"/>
	</xsd:complexType>
	<xsd:complexType name="visualBoundsType">
		<xsd:attributeGroup ref="visualBounds"/>
	</xsd:complexType>
	<xsd:element name="visual-parameters">
		<xsd:complexType>
			<xsd:all>
				<xsd:element name="metric">
					<xsd:complexType>
						<xsd:attribute name="units" type="unitsType" default="px"/>
						<xsd:attribute name="value" type="xsd:double" default="1"/>
					</xsd:complexType>
				</xsd:element>
				<xsd:element name="placeRadius" type="visualMetricType"/>
				<xsd:element name="transitionTriangleSize" type="visualSizeType"/>
			</xsd:all>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="gn-model">
		<xsd:complexType>
			<xsd:all>
				<xsd:element ref="gn"/>
				<xsd:element ref="visual-parameters" minOccurs="0"/>
			</xsd:all>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="gn">
		<xsd:complexType>
			<xsd:all>
				<!-- still not implemented
      
        <xsd:element name="constants" minOccurs="0">
          <xsd:complexType>
            <xsd:sequence minOccurs="0" maxOccurs="unbounded">
          </xsd:complexType>
        </xsd:element>
      -->
				<xsd:element name="transitions">
					<xsd:complexType>
						<xsd:sequence maxOccurs="unbounded">
							<xsd:element ref="transition"/>
						</xsd:sequence>
					</xsd:complexType>
				</xsd:element>
				<xsd:element name="places">
					<xsd:complexType>
						<xsd:sequence minOccurs="0" maxOccurs="unbounded">
							<xsd:element ref="place"/>
						</xsd:sequence>
					</xsd:complexType>
				</xsd:element>
				<xsd:element name="tokens">
					<xsd:complexType>
						<xsd:sequence minOccurs="0" maxOccurs="unbounded">
							<xsd:choice>
								<xsd:element name="token" type="tokenType">
									<xsd:unique name="uniqueTokenChar">
										<xsd:selector xpath="char"/>
										<xsd:field xpath="@name"/>
									</xsd:unique>
								</xsd:element>
								<xsd:element name="generator" type="generatorType">
									<xsd:unique name="uniqueGeneratorChar">
										<xsd:selector xpath="char"/>
										<xsd:field xpath="@name"/>
									</xsd:unique>
								</xsd:element>
							</xsd:choice>
						</xsd:sequence>
					</xsd:complexType>
				</xsd:element>
				<xsd:element name="functions" minOccurs="0">
					<xsd:complexType mixed="true">
						<xsd:sequence minOccurs="0" maxOccurs="unbounded">
							<xsd:element ref="import"/>
						</xsd:sequence>
					</xsd:complexType>
				</xsd:element>
				<xsd:element ref="visual-parameters" minOccurs="0"/>
			</xsd:all>
			<xsd:attributeGroup ref="visualBounds"/>
			<xsd:attribute name="name" type="xsd:ID" use="required"/>
			<xsd:attribute name="time" type="xsd:positiveInteger"/>
			<xsd:attribute name="timeStep" type="xsd:positiveInteger" default="1"/>
			<xsd:attribute name="timeStart" type="xsd:nonNegativeInteger" default="0"/>
			<xsd:attribute name="fundefs" type="xsd:string"/>
			<xsd:attribute name="root" type="xsd:boolean" default="false"/>
			<xsd:attribute name="language"/>
			<!-- deprecated -->
		</xsd:complexType>
		<!-- keys -->
		<xsd:key name="transitionKey">
			<xsd:selector xpath="transitions/transition"/>
			<xsd:field xpath="@id"/>
		</xsd:key>
		<xsd:key name="placeKey">
			<xsd:selector xpath="places/place"/>
			<xsd:field xpath="@id"/>
		</xsd:key>
		<xsd:key name="tokenKey">
			<xsd:selector xpath="tokens/token"/>
			<xsd:field xpath="@id"/>
		</xsd:key>
		<!-- keyrefs -->
		<xsd:keyref name="hostPlaceReference" refer="placeKey">
			<xsd:selector xpath="tokens/token | tokens/generator"/>
			<xsd:field xpath="@host"/>
		</xsd:keyref>
		<xsd:keyref name="transPlaceReference" refer="placeKey">
			<xsd:selector xpath="transitions/transition/inputs/input | transitions/transition/outputs/output"/>
			<xsd:field xpath="@ref"/>
		</xsd:keyref>
	</xsd:element>
</xsd:schema>