[SVG] grid based layout DTD suggestion

<?xml version='1.0' encoding='iso-8859-1'?>
<!-- FILE: svg-grid4.xml -->
<!DOCTYPE svg [

<!ELEMENT svg    (#PCDATA|defs|grid)* >

<!-- SVG Faking it -->
<!ELEMENT defs   (#PCDATA|grid)*      >
<!ELEMENT use    (#PCDATA)>
<!ELEMENT g      (#PCDATA)>
<!ELEMENT text   (#PCDATA)>
<!ELEMENT rect   (#PCDATA)>
<!ELEMENT circle (#PCDATA)>
<!ELEMENT xlink  (#PCDATA)>

<!-- Minimum requirement everything else would be CSS oriented -->
<!ELEMENT grid  (grid-row*)   >
<!ATTLIST grid
  x             CDATA   "0"
  y             CDATA   "0"
  id            CDATA   #IMPLIED
  height        CDATA   #IMPLIED
  width         CDATA   #IMPLIED
  style         CDATA   #IMPLIED
  class         CDATA   #IMPLIED
  shape        (xlink)  #IMPLIED
  onclick       CDATA   #IMPLIED
  ondblclick    CDATA   #IMPLIED
  onmousedown   CDATA   #IMPLIED
  onmouseup     CDATA   #IMPLIED
  onmouseover   CDATA   #IMPLIED
  onmousemove   CDATA   #IMPLIED
  onmouseout    CDATA   #IMPLIED
  onkeypress    CDATA   #IMPLIED
  onkeydown     CDATA   #IMPLIED
  onkeyup       CDATA   #IMPLIED
>
<!ELEMENT grid-row  (grid-col*)   >
<!ATTLIST grid-row
  height        CDATA   #IMPLIED
  style         CDATA   #IMPLIED
  class         CDATA   #IMPLIED
  rowspan       CDATA   "1"
  shape        (xlink)  #IMPLIED
  onclick       CDATA   #IMPLIED
  ondblclick    CDATA   #IMPLIED
  onmousedown   CDATA   #IMPLIED
  onmouseup     CDATA   #IMPLIED
  onmouseover   CDATA   #IMPLIED
  onmousemove   CDATA   #IMPLIED
  onmouseout    CDATA   #IMPLIED
  onkeypress    CDATA   #IMPLIED
  onkeydown     CDATA   #IMPLIED
  onkeyup       CDATA   #IMPLIED
>
<!ELEMENT grid-col  (#PCDATA|use|g|text|rect|circle|grid)*      >
<!ATTLIST grid-col
  width         CDATA   #IMPLIED
  style         CDATA   #IMPLIED
  class         CDATA   #IMPLIED
  colspan       CDATA   "1"
  shape        (xlink)  #IMPLIED
  onclick       CDATA   #IMPLIED
  ondblclick    CDATA   #IMPLIED
  onmousedown   CDATA   #IMPLIED
  onmouseup     CDATA   #IMPLIED
  onmouseover   CDATA   #IMPLIED
  onmousemove   CDATA   #IMPLIED
  onmouseout    CDATA   #IMPLIED
  onkeypress    CDATA   #IMPLIED
  onkeydown     CDATA   #IMPLIED
  onkeyup       CDATA   #IMPLIED
>

]>

<!-- Example -->

<svg
   xmlns:xlink='http://www.w3.org/2000/xlink/namespace/'
   width='300'
   height='300'
>
<defs>
  <!-- ================================================= -->
  <g id='cat'>
    <image xlink:href='cat.png'/>
  </g>
  <!-- ================================================= -->
  <g id='mat'>
    <image xlink:href='mat.png'/>
  </g>
  <!-- ================================================= -->
  <g id='dog'>
    <image xlink:href='dog.png'/>
  </g>
  <!-- ================================================= -->
  <g id='fish'>
    <image xlink:href='fish.png'/>
  </g>
  <!-- ================================================= -->
  <g id="CatMatGrid">
    <grid>
      <grid-row>
        <!-- The (x,y) coordinates are offset to the table (0,0) top-left 
corner
             if ( x < 0 ) x = 0;
             if ( y < 0 ) y = 0;
        -->
        <grid-col>
          <text style='font:arial; font-size:48pt; text-rendering:normal;'
            x='10' y='10'>Cat</text>
        </grid-col>
        <grid-col>
          <text style='font:arial; font-size:48pt; text-rendering:normal;'
            x='10' y='10'>Mat</text>
        </grid-col>
      </grid-row>
      <grid-row>
        <grid-col>
          <use xlink:href='#cat' x='10' y='10'/>
        </grid-col>
        <grid-col>
          <use xlink:href='#mat' x='10' y='10'/>
        </grid-col>
      </grid-row>
    </grid>
  </g>
  <!-- ================================================= -->
  <g id="CatMatGrid2">
    <!-- The entire rectangular grid is morphed to fit into the cat picture 
-->
    <grid shape='url(#cat)' style='cellspacing: 10; cellpadding: 10; border: 
2;'>

      <!-- This particular grid-row has the external cell-padding that looks 
like the shape of a dog -->
      <grid-row shape='url(#dog)'>
        <!-- The (x,y) coordinates are offset to the table (0,0) top-left 
corner
             if ( x < 0 ) x = 0;
             if ( y < 0 ) y = 0;
        -->

        <!-- This particular cell has the external cell-padding that looks 
like the shape of a fish -->
        <grid-col shape='url(#fish)'>
          <text style='font:arial; font-size:48pt; text-rendering:normal;'
            x='10' y='10'>Cat</text>
        </grid-col>
        <grid-col>
          <text style='font:arial; font-size:48pt; text-rendering:normal;'
            x='10' y='10'>Mat</text>
        </grid-col>
      </grid-row>
      <grid-row>
        <grid-col>
          <use xlink:href='#cat' x='10' y='10'/>
        </grid-col>
        <grid-col>
          <use xlink:href='#mat' x='10' y='10'/>
        </grid-col>
      </grid-row>
    </grid>
  </g>

  <!-- ================================================= -->
  <g id="OverlapGrid">
    <grid>
      <grid-row>
        <grid-col>

            <grid x='10' y='10'>
              <grid-row>
                <grid-col>
                  <text style='font:arial; font-size:48pt; 
text-rendering:normal;'
                    x='10' y='10'>Cat</text>
                </grid-col>
                <grid-col>
                  <text style='font:arial; font-size:48pt; 
text-rendering:normal;'
                    x='30' y='10'>Mat</text>
                </grid-col>
              </grid-row>
            </grid>

            <grid x='10' y='10'>
              <grid-row>
                <grid-col>
                  <text style='font:arial; font-size:48pt; 
text-rendering:normal;'
                    x='10' y='10'>This text is overlapping by 
superposition</text>
                </grid-col>
              </grid-row>
            </grid>

        </grid-col>
      </grid-row>
    </grid>
  </g>

</defs>

<!--
  Draw a grid containing 2x2 cells span automatically to fit each picture
  with the text on top and the image under it
-->
<use xlink:href='#CatMatGrid' x='10' y='10'/>

<!--
  Draw a grid containing 2x2 cells span automatically to fit each picture
  with the text on top and the image under it

  where the entire grid is shaped like the cat picture
  the first row is shape like a dog
  and the first cell is shaped like a fish

  Therefore the word 'cat' is fitted and morphed to fit inside a fish
  where the fish is morphed to fit within a dog shape and the entire thing 
is morph into a cat.

  Sorry, no ASCII art yet! =P

-->
<use xlink:href='#CatMatGrid2' x='10' y='200'/>

</svg>


<!--

Ideas, comments, critics and suggestions are welcome !

Sincerely yours,
Fred.

-->



_________________________________________________________________
Add photos to your e-mail with MSN 8. Get 2 months FREE*.  
http://join.msn.com/?page=features/featuredemail

Received on Wednesday, 30 April 2003 05:02:55 UTC