Ralph Gauges, Ursula Rost, Sven Sahle and Katja Wegner
European Media Laboratory
Schloss-Wolfsbrunnen Weg 33
69118 Heidelberg
Germany
October 28, 2003
?xml version="1.0" encoding="UTF-8"?
sbml xmlns:sbml="http://www.sbml.org/sbml/level2" level="2"
version="1"
xmlns:sl2="http://projects.eml.org/bcb/sbml/level2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://projects.eml.org/bcb/sbml/level2
http://projects.eml.org/bcb/sbml/level2/layout2.xsd"
XML Schema representation:
xsd:complexType name="SBase" abstract="true"
xsd:sequence
xsd:element name="notes" minOccurs="0"
xsd:complexType
xsd:sequence
xsd:any namespace="http://www.w3.org/1999/xhtml"
processContents="skip"
maxOccurs="unbounded"/
/xsd:sequence
/xsd:complexType
/xsd:element
xsd:element name="annotation" minOccurs="0"
xsd:complexType
xsd:sequence
xsd:any processContents="skip" maxOccurs="unbounded"/
/xsd:sequence
/xsd:complexType
/xsd:element
/xsd:sequence
xsd:attribute name="metaid" type="xsd:ID" use="optional"/
/xsd:complexType
xsd:simpleType name="SId"
xsd:restriction base="xsd:string"
xsd:pattern value="(_|[a-z]|[A-Z])(_|[a-z]|[A-Z]|[0-9])*"/
/xsd:restriction
/xsd:simpleType
XML Schema representation:
xsd:complexType name="ListOfLinetypes"
xsd:complexContent
xsd:extension base="sl2:SBase"
xsd:sequence
xsd:element name="linetype" type="sl2:Linetype"
maxOccurs="unbounded"/
/xsd:sequence
/xsd:extension
/xsd:complexContent
/xsd:complexType
xsd:complexType name="ListOfFilltypes"
xsd:complexContent
xsd:extension base="sl2:SBase"
xsd:sequence
xsd:element name="filltype" type="sl2:Filltype" maxOccurs="unbounded"/
/xsd:sequence
/xsd:extension
/xsd:complexContent
/xsd:complexType
xsd:complexType name="ListOfShapes"
xsd:complexContent
xsd:extension base="sl2:SBase"
xsd:sequence
xsd:element name="shape" type="sl2:Shape" maxOccurs="unbounded"/
/xsd:sequence
/xsd:extension
/xsd:complexContent
/xsd:complexType
xsd:complexType name="ListOfRenderGroups"
xsd:complexContent
xsd:extension base="sl2:SBase"
xsd:sequence
xsd:element name="group" type="sl2:RenderGroup" maxOccurs="unbounded"/
/xsd:sequence
/xsd:extension
/xsd:complexContent
/xsd:complexType
xsd:complexType name="Render"
xsd:sequence
xsd:element name="listOfColors" type="sl2:ListOfColors" minOccurs="0"/
xsd:element name="listOfLinetypes" type="sl2:ListOfLinetypes" minOccurs="0"/
xsd:element name="listOfShapes" type="sl2:ListOfShapes" minOccurs="0"/
xsd:element name="listOfRenderGroups" type="sl2:ListOfRenderGroups" minOccurs="0"/
/xsd:sequence
xsd:attribute name="background" type="sl2:Color" use="optional"
xsd:attribute name="foreground" type="sl2:Color" use="optional"
/xsd:complexType
XML Schema representation:
xsd:simpleType name="ColorChannel" xsd:restriction base="xsd:integer" xsd:minInclusive value="0"/ xsd:maxInclusive value="255"/ /xsd:restriction /xsd:simpleType xsd:complexType name="Color" xsd:complexContent xsd:extension base="sl2:SBase" xsd:attribute name="id" type="sl2:SId"/ xsd:attribute name="red" type="sl2:ColorChannel"/ xsd:attribute name="green" type="sl2:ColorChannel"/ xsd:attribute name="blue" type="sl2:ColorChannel"/ xsd:attribute name="alpha" type="sl2:ColorChannel" use="optional" default="255"/ /xsd:extension /xsd:complexContent /xsd:complexType
The shapes are normally just drawn as an outline. In order to be able to fill a shape we have defined one filltype called SingleColorFill. The only attributes are an id to reference the filltype from other objects and the color with which the shape should be filled. Other filltypes that might be useful are a gradient and a pattern filltype, but those will only be defined if there is an actual need for them.
XML Schema representation:
xsd:complexType name="StrokeType" abstract="true"
xsd:complexContent
xsd:extension base="sl2:SBase"
/xsd:extension
/xsd:complexContent
/xsd:complexType
xsd:complexType name="SolidStroke" abstract="true"
xsd:complexContent
xsd:extension base="sl2:StrokeType"
/xsd:extension
/xsd:complexContent
/xsd:complexType
xsd:complexType name="DashedStroke" abstract="true"
xsd:complexContent
xsd:extension base="sl2:StrokeType"
xsd:attribute name="sequence"
xsd:simpleType
xsd:list itemType="xsd:double" minLength="2" maxLength="unbounded"/
/xsd:simpleType
/xsd:attribute
/xsd:extension
/xsd:complexContent
/xsd:complexType
xsd:complexType name="Linetype"
xsd:complexContent
xsd:extension base="sl2:SBase"
xsd:sequence
xsd:element name="stroke" type="sl2:StrokeType"/
/xsd:sequence
xsd:attribute name="id" type="sl2:SId"/
xsd:attribute name="lineWidth" type="xsd:double"/
/xsd:extension
/xsd:complexContent
/xsd:complexType
xsd:complexType name="Filltype" abstract="true"
xsd:complexContent
xsd:extension base="sl2:SBase"
xsd:attribute name="id" type="sl2:SId"/
/xsd:extension
/xsd:complexContent
/xsd:complexType
xsd:complexType name="SingleColorFill"
xsd:complexContent
xsd:extension base="sl2:Filltype"
xsd:attribute name="color" type="sl2:Color"/
/xsd:extension
/xsd:complexContent
/xsd:complexType
XML Schema representation:
xsd:complexType name="Shape" abstract="true"
xsd:complexContent
xsd:extension base="sl2:SBase"
xsd:attribute name="id" type="sl2:SId"/
/xsd:extension
/xsd:complexContent
/xsd:complexType
xsd:complexType name="Shape2D" abstract="true"
xsd:complexContent
xsd:extension base="sl2:Shape"
/xsd:extension
/xsd:complexContent
/xsd:complexType
xsd:complexType name="Shape3D" abstract="true"
xsd:complexContent
xsd:extension base="sl2:Shape"
/xsd:extension
/xsd:complexContent
/xsd:complexType
xsd:complexType name="Ellipses"
xsd:complexContent
xsd:extension base="sl2:Shape2D"
xsd:sequence
xsd:element name="linecolor" type="sl2:Color" minOccurs="0" maxOccurs="1"/
xsd:element name="linetype" type="sl2:Linetype" minOccurs="0" maxOccurs="1"/
xsd:element name="filltype" type="sl2:Filltype" minOccurs="0" maxOccurs="1"/
/xsd:sequence
xsd:attribute name="xr" type="xsd:double"/
xsd:attribute name="yr" type="xsd:double"/
/xsd:extension
/xsd:complexContent
/xsd:complexType
xsd:complexType name="Triangle"
xsd:complexContent
xsd:extension base="sl2:Shape2D"
xsd:sequence
xsd:element name="linecolor" type="sl2:Color" minOccurs="0" maxOccurs="1"/
xsd:element name="linetype" type="sl2:Linetype" minOccurs="0" maxOccurs="1"/
xsd:element name="filltype" type="sl2:Filltype" minOccurs="0" maxOccurs="1"/
/xsd:sequence
xsd:attribute name="x1" type="xsd:double"/
xsd:attribute name="y1" type="xsd:double"/
xsd:attribute name="x2" type="xsd:double"/
xsd:attribute name="y2" type="xsd:double"/
xsd:attribute name="x3" type="xsd:double"/
xsd:attribute name="y3" type="xsd:double"/
/xsd:extension
/xsd:complexContent
/xsd:complexType
xsd:complexType name="Rectangle"
xsd:complexContent
xsd:extension base="sl2:Shape2D"
xsd:sequence
xsd:element name="linecolor" type="sl2:Color" minOccurs="0" maxOccurs="1"/
xsd:element name="linetype" type="sl2:Linetype" minOccurs="0" maxOccurs="1"/
xsd:element name="filltype" type="sl2:Filltype" minOccurs="0" maxOccurs="1"/
/xsd:sequence
xsd:attribute name="width" type="xsd:double"/
xsd:attribute name="height" type="xsd:double"/
xsd:attribute name="rx" type="xsd:double" use="optional" default="0.0"/
xsd:attribute name="ry" type="xsd:double" use="optional" default="0.0"/
/xsd:extension
/xsd:complexContent
/xsd:complexType
xsd:SimpleType name="FontFamily"
restriction base="string"
xsd:enumeration value="serif"/
xsd:enumeration value="sansseerif"/
xsd:enumeration value="monospaced"/
/restriction
/xsd:SimpleType
xsd:SimpleType name="FontWeight"
restriction base="string"
xsd:enumeration value="normal"/
xsd:enumeration value="bold"/
/restriction
/xsd:SimpleType
xsd:SimpleType name="FontStyle"
restriction base="string"
xsd:enumeration value="normal"/
xsd:enumeration value="italic"/
/restriction
/xsd:SimpleType
xsd:complexType name="Text"
xsd:complexContent
xsd:extension base="sl2:Shape2D"
xsd:sequence
xsd:element name="linecolor" type="sl2:Color" minOccurs="0" maxOccurs="1"/
/xsd:sequence
xsd:attribute name="family" type="sl2:FontFamily"/
xsd:attribute name="size" type="xsd:double"/
xsd:attribute name="weight" type="sl2:FontWeight" use="optional" default="normal"/
xsd:attribute name="style" type="sl2:FontStyle" use="optional" default="normal"/
/xsd:extension
/xsd:complexContent
/xsd:complexType
xsd:complexType name="ImplicitText"
xsd:complexContent
xsd:extension base="sl2:Text"
xsd:attribute name="reference" type="sl2:SId"/
/xsd:extension
/xsd:complexContent
/xsd:complexType
xsd:complexType name="LineSegment"
xsd:complexContent
xsd:extension base="sl2:SBase"
xsd:attribute name="x1" type="xsd:double"/
xsd:attribute name="y1" type="xsd:double"/
xsd:attribute name="z1" type="xsd:double" use="optional" default="0.0"/
xsd:attribute name="x2" type="xsd:double"/
xsd:attribute name="y2" type="xsd:double"/
xsd:attribute name="z2" type="xsd:double" use="optional" default="0.0"/
/xsd:extension
/xsd:complexContent
/xsd:complexType
xsd:complexType name="CubicBezier"
xsd:complexContent
xsd:extension base="sl2:LineSegment"
xsd:attribute name="x3" type="xsd:double"/
xsd:attribute name="y3" type="xsd:double"/
xsd:attribute name="z3" type="xsd:double" use="optional" default="0.0"/
xsd:attribute name="x4" type="xsd:double"/
xsd:attribute name="y4" type="xsd:double"/
xsd:attribute name="z4" type="xsd:double" use="optional" default="0.0"/
/xsd:extension
/xsd:complexContent
/xsd:complexType
xsd:complexType name="ListOfCurveSegments"
xsd:complexContent
xsd:extension base="sl2:SBase"
xsd:sequence
xsd:element name="curveSegment" type="sl2:LineSegment"
minOccurs="1" maxOccurs="unbounded"/
/xsd:sequence
/xsd:extension
/xsd:complexContent
/xsd:complexType
xsd:complexType name="Curve"
xsd:complexContent
xsd:extension base="sl2:SBase"
xsd:sequence
xsd:element name="listOfCurceSegments" type="sl2:ListOfCurveSegments"/
/xsd:sequence
/xsd:extension
/xsd:complexContent
/xsd:complexType
xsd:complexType name="Path"
xsd:complexContent
xsd:extension base="sl2:Shape"
xsd:sequence
xsd:element name="Curve" type="sl2:ListOfCurves" minOccurs="1" maxOccurs="1"/
xsd:element name="linetype" type="sl2:LineType" minOccurs="0" maxOccurs="1"/
xsd:element name="linecolor" type="sl2:Color" minOccurs="0" maxOccurs="1"/
/xsd:sequence
/xsd:extension
/xsd:complexContent
/xsd:complexType
xsd:complexType name="Bitmap"
xsd:complexContent
xsd:extension base="sl2:Shape2D"
xsd:attribute name="filename" type="xsd:string"/
/xsd:extension
/xsd:complexContent
/xsd:complexType
XML Schema representation:
xsd:complexType
xsd:complexContent
xsd:extension base="sl2:SBase"
/xsd:extension
/xsd:complexContent
/xsd:complexType
xsd:complexType name="SimpleTransformation"
xsd:complexContent
xsd:extension base="sl2:Transformation"
xsd:attribute name="tx" type="xsd:double" use="optional" default="0.0"/
xsd:attribute name="ty" type="xsd:double" use="optional" default="0.0"/
xsd:attribute name="tz" type="xsd:double" use="optional" default="0.0"/
xsd:attribute name="rx" type="xsd:double" use="optional" default="0.0"/
xsd:attribute name="ry" type="xsd:double" use="optional" default="0.0"/
xsd:attribute name="rz" type="xsd:double" use="optional" default="0.0"/
xsd:attribute name="sx" type="xsd:double" use="optional" default="1.0"/
xsd:attribute name="sy" type="xsd:double" use="optional" default="1.0"/
xsd:attribute name="sz" type="xsd:double" use="optional" default="1.0"/
/xsd:extension
/xsd:complexContent
/xsd:complexType
xsd:complexType name="AffineTransformation"
xsd:complexContent
xsd:extension base="sl2:Transformation"
xsd:attribute name="a0" type="xsd:double" use="optional" default="1.0"/
xsd:attribute name="a1" type="xsd:double" use="optional" default="0.0"/
xsd:attribute name="a2" type="xsd:double" use="optional" default="0.0"/
xsd:attribute name="a3" type="xsd:double" use="optional" default="0.0"/
xsd:attribute name="b0" type="xsd:double" use="optional" default="0.0"/
xsd:attribute name="b1" type="xsd:double" use="optional" default="1.0"/
xsd:attribute name="b2" type="xsd:double" use="optional" default="0.0"/
xsd:attribute name="b3" type="xsd:double" use="optional" default="0.0"/
xsd:attribute name="c0" type="xsd:double" use="optional" default="0.0"/
xsd:attribute name="c1" type="xsd:double" use="optional" default="0.0"/
xsd:attribute name="c2" type="xsd:double" use="optional" default="1.0"/
xsd:attribute name="c3" type="xsd:double" use="optional" default="0.0"/
/xsd:extension
/xsd:complexContent
/xsd:complexType
xsd:complexType name="RenderItem"
xsd:complexContent
xsd:extension base="sl2:SBase"
/xsd:extension
/xsd:complexContent
/xsd:complexType
xsd:complexType name="ObjectReference"
xsd:complexContent
xsd:extension base="sl2:RenderItem"
xsd:sequence
xsd:choice
xsd:element name="transformation" type="sl2:Transformation"/
xsd:element name="transformation" type="sl2:AffineTransformation"/
/xsd:choice
/xsd:sequence
xsd:attribute name="object" type="sl2:SId"/
/xsd:extension
/xsd:complexContent
/xsd:complexType
xsd:SimpleType name="RenderTypes"
restriction base="string"
xsd:enumeration value="species"/
xsd:enumeration value="compartment"/
xsd:enumeration value="reaction"/
xsd:enumeration value="speciesreference"/
/restriction
/xsd:SimpleType
xsd:complexType name="Group"
xsd:extension base="sl2:SBase"
xsd:attribute name="id" type="sl2:SId"/
xsd:attribute name="defaultType" type="sl2:RenderTypes" use="optional"/
/xsd:extension
/xsd:complexType
xsd:complexType name="RenderGroup"
xsd:complexContent
xsd:extension base="sl2:Group"
xsd:sequence
xsd:element name="item" type="sl2:ObjectReference" minOccurs="1"
maxOccurs="unbounded"/
/xsd:sequence
/xsd:extension
/xsd:complexContent
/xsd:complexType
xsd:simpleType name="HVBoxDirection"
restriction base="string"
xsd:enumeration value="horizontal"/
xsd:enumeration value="vertical"/
/restriction
/xsd:simpleType
xsd:simpleType name="AlignmentRange"
xsd:restriction base="xsd:double"
xsd:minInclusive value="0.0"/
xsd:maxInclusive value="1.0"/
/xsd:restriction
/xsd:simpleType
xsd:complexType name="HVBox"
xsd:complexContent
xsd:extension base="sl2:Group"
xsd:sequence
xsd:element name="item" type="sl2:RenderItem" minOccurs="1"
maxOccurs="unbounded"/
/xsd:sequence
xsd:attribute name="direction" type="sl2:HVBoxDirection" use="optional"
default="vertical"/
xsd:attribute name="alignment" type="sl2:AlignmentRange" use="optional"
default="0.0"/
/xsd:extension
/xsd:complexContent
/xsd:complexType
xsd:complexType name="Spacer"
xsd:complexContent
xsd:extension base="sl2:RenderItem"
xsd:attribute name="size" type="xsd:double"/
/xsd:extension
/xsd:complexContent
/xsd:complexType
listOfLayouts
.
.
.
speciesGlyph id="ATP_Glyph" species="ATP" x="20.0" y="10.0" w="50" h="50"
renderGroup="specRefRender2"
/speciesGlyph
speciesGlyph id="ATP_Glyph" species="ATP" x="70.0" y="80.0" w="100" h="100"
renderGroup="specRefRender1"
transformation xsi:type="sl2:Transformation mx="10" my="10" sx="0.8" sy="0.8"/
/speciesGlyph
.
.
.
/listOfLayouts
render
listOfColors
color id="Color_Green" red="0" green="255" blue="0"/
color id="Color_Black" red="0" green="0" blue="0"/
/listOfColors
listOfLinetypes
lineType id="SolidLine" width="1"
strokeType xsi:type="sl2:SolidStroke"/
/lineType
/listOfLinetypes
listOfShapes
shape xsi:type="sl2:Circle" id="StandCircle" lineType="SolidLine"
linecolor="Color_Green" radius="1.0"/
shape xsi:type="sl2:Text" id="label1" family="sansserif" size="12"
linecolor="Color_Black"Glucose/shape
shape xsi:type="sl2:Text" id="label2" family="sansserif" size="12"
linecolor="Color_Black"ATP/shape
/listOfShapes
listOfRenderGroups
renderGroup id="specRefRender1"
shape shape="StandCircle"
transformation sx="100" sy="100"/
/shape
shape shape="label1"
transformation mx="10" my="44"/
/shape
/renderGroup
renderGroup id="specRefRender2"
shape shape="StandCircle"
transformation sx="50.0" sy="50.0"/
/shape
shape shape="label1"
transformation mx="7.0" my="19.0"/
/shape
/renderGroup
/listOfRenderGroups
/render
O.K. As this is a made up example it probably has tons of mistakes, but we hope that it still shows the general principal that we think could be used to connect layout and render information. So what this example is supposed to show is a layout part with (among other things) two speciesGlyphs. Those have different sizes and different positions. In the render part, we define some colors and a line type. We don't use any fill types in this example. Next come the basic shapes that we will use to build up the render information. Each shape can in principal be used in more than one renderGroup as demonstrated with the circle. Last but not least we define two renderGroups each with a circle and a text label. Since the textLabels have different sizes, the circle has to be scaled to the right size with a transformation. Now we can reference these two renderGroups in our speciesGlyphs from the layout part. There is now a tag called renderGroup and an optional transformation to be used on the renderGroup. While the first renderGroup is rendered unchanged, the second one is scaled down a little bit and then moved as to be in the center of the bounding box of the speciesGlyph again.