Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:miw:miw08_xtt_xml [2008/03/05 02:40] miw |
pl:miw:miw08_xtt_xml [2019/06/27 15:50] (aktualna) |
====== Opis ====== | ====== Opis ====== |
| __**Projekt zakończony**__ |
| |
| |
Szymon Deja <szydej@gmail.com> | Szymon Deja <szydej@gmail.com> |
| |
| |
====== Spotkania ====== | ====== Spotkania ====== |
===== 08.03.10 ===== | |
| ===== 080311 ===== |
* XSLT | * XSLT |
* obsługa XSD | * obsługa XSD |
* gotowe transl xslt do owl | * gotowe transl xslt do owl |
* format graphviz: wizualizacja tablic :!: | * format graphviz: wizualizacja tablic :!: |
| |
| |
| ===== 080318 ===== |
| * próba translacji [[hekatedev:hqed:xttml20|XTTML20]] do graphviza |
| |
| |
| ===== 080401 ===== |
| * syntetyczny opis ograniczeń podejścia xttml->gv (czego i dlaczego nie da się zrobić) |
| * próba zrobienia tego w [[http://www.w3.org/Graphics/SVG/|SVG]] patrz FIXME proj z miw z zeszlego roku |
| |
| |
| |
| ===== 080408 ===== |
| * co jest nie tak? |
| * [[http://xml.apache.org/xalan/|xalan]] |
| |
| ===== 080415 ===== |
| * jw |
| |
| ===== 080429 ===== |
| * [[hekate:hekate_markup_language#xttml]] |
| |
| ===== 080527 ===== |
| * przykłady xttml |
| * sprawozd |
| |
====== Projekt ====== | ====== Projekt ====== |
| |
| Reprezentajca tabel w graphizie : |
| |
| <code graphviz> |
| |
| digraph structs { |
| node [shape=record]; |
| struct1 [shape=record,label="<f0> left|<f1> mid\ dle|<f2> right"]; |
| struct2 [shape=record,label="<f0> one|<f1> two"]; |
| struct3 [shape=record,label="hello\nworld |{ b |{c|<here> d|e}| f}| g | h"]; |
| struct1 -> struct2; |
| struct1 -> struct3; |
| } |
| |
| </code> |
| |
| |
| {{:pl:miw:record.gif|:pl:miw:record.gif}} |
| |
| Translacja XTTML20 do graphviza |
| * Translacja dotml do grapviza (dot) {{:pl:miw:dotml2dot.txt|dotml2dot.xsl}} |
| * Translacja XTTML20 do dotml (XSLT) {{:pl:miw:xtt2dot.txt|xtt2dotml.xsl}} |
| |
| |
| |
| <code xml> |
| |
| |
| <xsl:stylesheet version="1.0" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> |
| <xsl:strip-space elements="doc chapter section"/> |
| <xsl:output indent="yes" method="xml"/> |
| <xsl:template match="/"> |
| <graph xmlns="http://www.martin-loetzsch.de/DOTML"> |
| <xsl:for-each select="/xttml/xtt_list_table/xtt_table"> |
| <xsl:variable name="tabela" select="@name"/> |
| <record> |
| <xsl:for-each select="./column_attributes/ca"> |
| <xsl:variable name="col" select="position()"/> |
| <record> |
| <xsl:variable name="kolumna" select="."/> |
| <xsl:element name="node"> |
| <xsl:attribute name="id">555</xsl:attribute> |
| <xsl:attribute name="label"> |
| <xsl:value-of select="."/> |
| </xsl:attribute> |
| </xsl:element> |
| <xsl:for-each select="../../row"> |
| <xsl:variable name="i" select="position()"/> |
| <xsl:for-each select="cell[$col]"> |
| <xsl:variable name="id"> |
| <xsl:value-of select="$tabela"/> |
| <xsl:text>_</xsl:text> |
| <xsl:value-of select="$i"/> |
| <xsl:text>_</xsl:text> |
| <xsl:value-of select="$kolumna"/> |
| </xsl:variable> |
| <xsl:variable name="label" select="translate(translate(@content,'{','('),'}',')')"/> |
| <xsl:choose> |
| <xsl:when test="./@operator='e'"> |
| <node id="{$id}" label="= {$label}"/> |
| </xsl:when> |
| <xsl:when test="./@operator='ne'"> |
| <node id="{$id}" label="=! {$label}"/> |
| </xsl:when> |
| <xsl:when test="./@operator='g'"> |
| <node id="{$id}" label="gt; {$label}"/> |
| </xsl:when> |
| <xsl:when test="./@operator='ge'"> |
| <node id="{$id}" label="gt;= {$label}"/> |
| </xsl:when> |
| <xsl:when test="./@operator='l'"> |
| <node id="{$id}" label="lt; {$label}"/> |
| </xsl:when> |
| <xsl:when test="./@operator='le'"> |
| <node id="{$id}" label="lt;= {$label}"/> |
| </xsl:when> |
| <xsl:when test="./@operator='min'"> |
| <node id="{$id}" label="min {$label}"/> |
| </xsl:when> |
| <xsl:when test="./@operator='in'"> |
| <node id="{$id}" label="in {$label}"/> |
| </xsl:when> |
| </xsl:choose> |
| </xsl:for-each> |
| </xsl:for-each> |
| </record> |
| </xsl:for-each> |
| </record> |
| </xsl:for-each> |
| <xsl:for-each select="//xtt_list_connections/xtt_connection"> |
| <xsl:variable name="tabfrom" select="@source_table_name"/> |
| <xsl:variable name="tabto" select="@destination_table_name"/> |
| <xsl:variable name="sr" select="@source_row"/> |
| <xsl:variable name="dr" select="@destination_row"/> |
| <xsl:variable name="srow" select="//xtt_table[@name = $tabfrom]/column_attributes/ca[last()]"/> |
| <xsl:variable name="drow" select="//xtt_table[@name = $tabto]/column_attributes/ca[1]"/> |
| <xsl:variable name="from"> |
| <xsl:value-of select="$tabfrom"/> |
| <xsl:text>_</xsl:text> |
| <xsl:value-of select="$sr + 1"/> |
| <xsl:text>_</xsl:text> |
| <xsl:value-of select="$srow"/> |
| </xsl:variable> |
| <xsl:variable name="to"> |
| <xsl:value-of select="$tabto"/> |
| <xsl:text>_</xsl:text> |
| <xsl:value-of select="$dr + 1"/> |
| <xsl:text>_</xsl:text> |
| <xsl:value-of select="$drow"/> |
| </xsl:variable> |
| <xsl:element name="edge"> |
| <xsl:attribute name="from"> |
| <xsl:value-of select="$from"/> |
| </xsl:attribute> |
| <xsl:attribute name="to"> |
| <xsl:value-of select="$to"/> |
| </xsl:attribute> |
| <xsl:attribute name="constraint"> |
| <xsl:text>false</xsl:text> |
| </xsl:attribute> |
| <xsl:attribute name="tailport"> |
| <xsl:text>:e</xsl:text> |
| </xsl:attribute> |
| <xsl:attribute name="headport"> |
| <xsl:text>:w</xsl:text> |
| </xsl:attribute> |
| </xsl:element> |
| </xsl:for-each> |
| </graph> |
| </xsl:template> |
| </xsl:stylesheet> |
| |
| |
| </code> |
| |
| |
| |
| |
| |
| |
| ===== 080401 ===== |
| |
| xttml -> svg (XSL) {{:pl:miw:xttml2svg2.xml|xttml2svg.xsl}} |
| |
| |
| |
| <code xml> |
| <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/2000/svg" xmlns:fn ="http://www.w3.org/2005/02/xpath-functions"> |
| |
| <xsl:variable name="temp" /> |
| <xsl:output method="xml" indent="yes" omit-xml-declaration="no" /> |
| |
| <xsl:template match="/"> |
| <svg |
| xmlns="http://www.w3.org/2000/svg" |
| version="1.0" |
| width="297mm" |
| height="420mm" |
| id="svg2"> |
| <xsl:apply-templates select="/xttml/xtt_list_table/xtt_table" /> |
| <xsl:apply-templates select="/xttml/xtt_list_connections/xtt_connection" /> |
| </svg> |
| </xsl:template> |
| |
| <xsl:template match="//xtt_table"> |
| |
| <xsl:variable name="xpos" select=" ./localization/@xpos "/> |
| <xsl:variable name="ypos" select="./localization/@ypos "/> |
| |
| |
| <xsl:variable name="header" select="./localization/@header_height "/> |
| |
| <xsl:for-each select="column_attributes/ca"> |
| <xsl:variable name="col" select="position()"/> |
| <xsl:variable name="x" select=" $xpos + sum(../../localization/col_widths/cw[ position() < $col])"/> |
| <xsl:variable name="y" select=" $ypos"/> |
| <xsl:variable name="xdl" select="../../localization/col_widths/cw[$col]"/> |
| |
| <rect x="{$x}" y="{$y -$header}" width="{$xdl}" height="{$header}" |
| style="fill:none;stroke:#0080c0;"/> |
| |
| <text x="{$x}" y="{$y} " |
| style="font-size:10pt;font-weight:bold;text-anchor:start;font-family:Courier New;"> |
| <xsl:value-of select="."/></text> |
| |
| </xsl:for-each> |
| <xsl:for-each select="row"> |
| <xsl:variable name="row" select="position()"/> |
| |
| <xsl:for-each select="cell"> |
| <xsl:variable name="col" select="position()"/> |
| |
| <xsl:variable name="x" select=" $xpos + sum(../../localization/col_widths/cw[ position() < $col])"/> |
| <xsl:variable name="y" select=" $ypos +$header+ sum(../../localization/nrow_heights/rh[ position() < $row])"/> |
| <xsl:variable name="xdl" select="../../localization/col_widths/cw[$col]"/> |
| <xsl:variable name="ydl" select="../../localization/nrow_heights/rh[$row]"/> |
| |
| <rect x="{$x}" y="{$y -$ydl}" width="{$xdl}" height="{$ydl}" |
| style="fill:none;stroke:#0080c0;"/> |
| |
| <text x="{$x}" y="{$y} " |
| style="font-size:10pt;font-weight:normal;text-anchor:start;font-family:Courier New;"> |
| <xsl:choose> |
| <xsl:when test="./@operator='e'"> |
| <xsl:text>=</xsl:text> |
| </xsl:when> |
| <xsl:when test="./@operator='ne'"> |
| <xsl:text>!=</xsl:text> |
| </xsl:when> |
| <xsl:when test="./@operator='g'"> |
| <xsl:text>></xsl:text> |
| </xsl:when> |
| <xsl:when test="./@operator='ge'"> |
| <xsl:text>>=</xsl:text> |
| </xsl:when> |
| <xsl:when test="./@operator='l'"> |
| <xsl:text> < </xsl:text> |
| </xsl:when> |
| <xsl:when test="./@operator='le'"> |
| <xsl:text> <= </xsl:text> |
| </xsl:when> |
| <xsl:when test="./@operator='min'"> |
| <xsl:text> min </xsl:text> |
| </xsl:when> |
| <xsl:when test="./@operator='in'"> |
| <xsl:text> in </xsl:text> |
| </xsl:when> |
| |
| </xsl:choose> |
| <xsl:text> </xsl:text> |
| <xsl:value-of select="@content"/></text> |
| |
| |
| </xsl:for-each> |
| </xsl:for-each> |
| </xsl:template> |
| |
| |
| <xsl:template match="//xtt_connection"> |
| |
| <xsl:variable name="pozycja" select=" position() "/> |
| <xsl:variable name="ile" select=" last() "/> |
| |
| <xsl:variable name="stab" select="@source_table_name"/> |
| <xsl:variable name="dtab" select="@destination_table_name"/> |
| <xsl:variable name="srow" select="@source_row +1 "/> |
| <xsl:variable name="drow" select="@destination_row +1"/> |
| |
| |
| <xsl:variable name="x1" select=" /xttml/xtt_list_table/xtt_table[@name = $stab]/localization/@xpos + sum(/xttml/xtt_list_table/xtt_table[@name = $stab]/localization/col_widths/cw[ position() < last()+1])"/> |
| <xsl:variable name="y1" select=" /xttml/xtt_list_table/xtt_table[@name = $stab]/localization/@ypos +/xttml/xtt_list_table/xtt_table[@name = $stab]/localization/@header_height + |
| sum(//xtt_table[@name = $stab]/localization/nrow_heights/rh[ position() < $srow ]) -number( ( //xtt_table[@name = $stab]/localization/nrow_heights/rh[ $srow ])* 0.5)"/> |
| |
| |
| <xsl:variable name="x2" select=" /xttml/xtt_list_table/xtt_table[@name = $dtab]/localization/@xpos "/> |
| <xsl:variable name="y2" select=" /xttml/xtt_list_table/xtt_table[@name = $dtab]/localization/@ypos +/xttml/xtt_list_table/xtt_table[@name = $dtab]/localization/@header_height + |
| sum(//xtt_table[@name = $dtab]/localization/nrow_heights/rh[ position() < $drow]) - number( //xtt_table[@name = $dtab]/localization/nrow_heights/rh[ $drow] *0.5)"/> |
| |
| <xsl:variable name="x" select="number((($x2 - $x1) div ($ile + 1)) *($pozycja) +$x1 )"/> |
| <xsl:variable name="y" select=" last() "/> |
| |
| <polyline points="{$x1},{$y1},{$x2},{$y2}" |
| style="fill:white;stroke:red;stroke-width:1"/> |
| |
| </xsl:template> |
| |
| |
| |
| </xsl:stylesheet> |
| |
| |
| </code> |
| |
| |
| |
| |
| |
| |
| |
| |
| ===== svg ===== |
| Plik wejsciowy {{:pl:miw:thermostat2.0.xml|:pl:miw:thermostat2.0.xml}} |
| |
| przykladowy wynik translatora {{:pl:miw:termostat2.svg|termostat.svg}} |
| |
| |
| |
| {{:pl:miw:termostat.jpg|{{:pl:miw:prolog_javasockets_v.1.jpg|:pl:miw:prolog_javasockets_v.1.jpg}}}} |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| ===== xalan ===== |
| |
| java org.apache.xalan.xslt.Process -in thermostat2.0.xml -xsl xttml2svg.xsl |
| |
| Firefox tez sobier radzi z tralnslacja pliku (musi byc dostepny plik xtt2svg.xsl) : {{pl:miw:thermostat2.0.xml|thermostat.xml}} |
| |
| Saxon |
| java net.sf.saxon.Transform -s:source -xsl:stylesheet -o:output |
| |
| |
| |
====== Sprawozdanie ====== | ====== Sprawozdanie ====== |
| Celem projektu było stworzenie tlanslatroa XSLT z formatu XTT do plików dot oraz SVG. |
| Niestety reprezentacja plików XTT nie prezentuje sie najlepiej w graphize. Ograniczenia jakie napotkałem podczas tworzenia plików dot są opisane poniżej: |
| |
| |
| |
| ===== xttml→gv ===== |
| |
| Translacja XTTML20 do graphviza |
| * Translacja dotml do grapviza (dot) {{:pl:miw:dotml2dot.txt|dotml2dot.xsl}} |
| * Translacja XTTML20 do dotml (XSLT) {{:pl:miw:xtt2dot.txt|xtt2dotml.xsl}} |
| |
| |
| Opis ograniczeń podejścia xttml→gv |
| * Tekst w komurakch tabeli nie moze zawierać znaków : <, >, }, { |
| * graviz nie radzi sobie z odpowiednim ustawieniem przy złożonych diagramach (źle rysuje polączenia miedzy tabelami) |
| |
| |
| |
| |
| |
| |
| |
| ===== xttml→SVG ===== |
| |
| Plik XSL: |
| xttml -> svg (XSL) {{:pl:miw:xttml2svg2.xml|xttml2svg.xsl}} |
| |
| |
| Działanie translatora zostało przetestowane na poniższych silnikach XSLT: |
| Poniżej podano komendy wywołujące dany silnik. |
| |
| XALAN |
| java org.apache.xalan.xslt.Process -in thermostat2.0.xml -xsl xttml2svg.xsl |
| |
| Saxon |
| java net.sf.saxon.Transform -s:source -xsl:stylesheet -o:output |
| |
| Przykładowy wynik działania translatora dla pliku termostat: |
| przykladowy wynik translatora {{:pl:miw:termostat2.svg|termostat.svg}} |
| |
| |
| |
| {{:pl:miw:termostat.jpg|{{:pl:miw:prolog_javasockets_v.1.jpg|:pl:miw:prolog_javasockets_v.1.jpg}} |
| |
| |
| |
[[http://www.graphviz.org/About.php|graphviz]] | [[http://www.graphviz.org/About.php|graphviz]] |
| *[[http://www.martin-loetzsch.de/DOTML/]] |
| |
Gotowe tlanslatory XSLT | Gotowe tlanslatory XSLT |
| |
* [[http://www.ag-nbi.de/research/owltrans/]] | * [[http://www.ag-nbi.de/research/owltrans/]] |
| |
| |
| [[http://www.w3schools.com/svg/default.asp| SVG tutorial ]] |
| |
| |