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.