sccd.xsd 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xsd:schema
  3. xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  4. xmlns:sccd="msdl.uantwerpen.be/sccd"
  5. targetNamespace="msdl.uantwerpen.be/sccd"
  6. elementFormDefault="qualified"
  7. attributeFormDefault="unqualified">
  8. <!-- First, some type declarations... -->
  9. <xsd:simpleType name="identifier">
  10. <xsd:restriction base="xsd:string">
  11. <xsd:pattern value="([A-Za-z0-9]|_)+"/>
  12. </xsd:restriction>
  13. </xsd:simpleType>
  14. <xsd:simpleType name="stateId">
  15. <xsd:restriction base="sccd:identifier"/>
  16. </xsd:simpleType>
  17. <xsd:simpleType name="portName">
  18. <xsd:restriction base="sccd:identifier"/>
  19. </xsd:simpleType>
  20. <xsd:simpleType name="className">
  21. <xsd:restriction base="sccd:identifier"/>
  22. </xsd:simpleType>
  23. <!-- Used for 'onentry', 'onexit' and 'transition' -->
  24. <xsd:complexType name="hasActions">
  25. <xsd:choice minOccurs="0" maxOccurs="unbounded">
  26. <xsd:element name="raise">
  27. <xsd:complexType>
  28. <xsd:attribute name="event" type="xsd:string" use="required"/>
  29. <xsd:attribute name="port" type="sccd:portName"/>
  30. </xsd:complexType>
  31. </xsd:element>
  32. <xsd:element name="script" type="xsd:string"/>
  33. </xsd:choice>
  34. </xsd:complexType>
  35. <!--
  36. Recursive type.
  37. Basically all the common stuff of basic/or/and states.
  38. An element of this type does not have an 'id' attribute, but all its children
  39. states do.
  40. The reason we don't include state id's at the highest level is because
  41. the root of a diagram is also a state (an or-state, to be specific),
  42. but it has no id.
  43. -->
  44. <xsd:complexType name="commonState" abstract="true">
  45. <xsd:sequence>
  46. <xsd:element name="onentry" minOccurs="0" type="sccd:hasActions"/>
  47. <xsd:element name="onexit" minOccurs="0" type="sccd:hasActions"/>
  48. <xsd:choice minOccurs="0" maxOccurs="unbounded">
  49. <!-- Every state can have any number of <state> and <parallel> elements in it.
  50. These elements always have an 'id' attribute. -->
  51. <xsd:element name="state">
  52. <xsd:complexType>
  53. <xsd:complexContent>
  54. <xsd:extension base="sccd:orState">
  55. <xsd:attribute name="id" type="sccd:stateId" use="required"/>
  56. </xsd:extension>
  57. </xsd:complexContent>
  58. </xsd:complexType>
  59. </xsd:element>
  60. <xsd:element name="parallel">
  61. <xsd:complexType>
  62. <xsd:complexContent>
  63. <xsd:extension base="sccd:commonState">
  64. <xsd:attribute name="id" type="sccd:stateId" use="required"/>
  65. </xsd:extension>
  66. </xsd:complexContent>
  67. </xsd:complexType>
  68. </xsd:element>
  69. <xsd:element name="transition">
  70. <xsd:complexType>
  71. <xsd:complexContent>
  72. <xsd:extension base="sccd:hasActions">
  73. <xsd:attribute name="target" type="xsd:string" use="required"/>
  74. <xsd:attribute name="after" type="xsd:decimal"/>
  75. <xsd:attribute name="cond" type="xsd:string"/>
  76. </xsd:extension>
  77. </xsd:complexContent>
  78. </xsd:complexType>
  79. </xsd:element>
  80. </xsd:choice>
  81. </xsd:sequence>
  82. </xsd:complexType>
  83. <!-- Just like commonState, also without 'id' attribute -->
  84. <xsd:complexType name="orState">
  85. <xsd:complexContent>
  86. <xsd:extension base="sccd:commonState">
  87. <xsd:attribute name="initial" type="xsd:string"/>
  88. </xsd:extension>
  89. </xsd:complexContent>
  90. </xsd:complexType>
  91. <xsd:attributeGroup name="semanticOptions">
  92. <xsd:attribute name="big_step_maximality">
  93. <xsd:simpleType>
  94. <xsd:restriction base="xsd:string">
  95. <xsd:enumeration value="take_one"/>
  96. <xsd:enumeration value="take_many"/>
  97. </xsd:restriction>
  98. </xsd:simpleType>
  99. </xsd:attribute>
  100. </xsd:attributeGroup>
  101. <xsd:complexType name="portDecl">
  102. <xsd:attribute name="name" type="sccd:portName"/>
  103. </xsd:complexType>
  104. <!-- Root element -->
  105. <xsd:element name="diagram">
  106. <xsd:complexType>
  107. <xsd:sequence>
  108. <xsd:element name="description" type="xsd:string" minOccurs="0"/>
  109. <xsd:element name="inport" minOccurs="0" maxOccurs="unbounded" type="sccd:portDecl"/>
  110. <xsd:element name="outport" minOccurs="0" maxOccurs="unbounded" type="sccd:portDecl"/>
  111. <xsd:element name="class" maxOccurs="unbounded">
  112. <xsd:complexType>
  113. <xsd:sequence>
  114. <xsd:element name="scxml" minOccurs="0">
  115. <xsd:complexType>
  116. <xsd:complexContent>
  117. <xsd:extension base="sccd:orState">
  118. <xsd:attributeGroup ref="sccd:semanticOptions"/>
  119. </xsd:extension>
  120. </xsd:complexContent>
  121. </xsd:complexType>
  122. </xsd:element>
  123. </xsd:sequence>
  124. <xsd:attribute name="name" type="sccd:className" use="required"/>
  125. <xsd:attribute name="default" type="xsd:boolean"/>
  126. </xsd:complexType>
  127. </xsd:element>
  128. <xsd:element name="test" minOccurs="0">
  129. <xsd:complexType>
  130. <xsd:sequence>
  131. <xsd:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
  132. </xsd:sequence>
  133. </xsd:complexType>
  134. </xsd:element>
  135. </xsd:sequence>
  136. <xsd:attribute name="author" type="xsd:string"/>
  137. <xsd:attribute name="name" type="xsd:string"/>
  138. </xsd:complexType>
  139. </xsd:element>
  140. </xsd:schema>