Internet standardy

Z cadwiki
Verze z 11. 3. 2008, 10:20, kterou vytvořil Vrecion (diskuse | příspěvky) (Zamyká „Internet standardy“ [edit=sysop:move=sysop])

(rozdíl) ← Starší verze | zobrazit aktuální verzi (rozdíl) | Novější verze → (rozdíl)
Přejít na: navigace, hledání

Výměna dat prostřednictvím Internetu

Pro výměnu dat o výrobcích a výrobních kapacitách byla vyvinuta řada standardů. Většina standardů je dnes postavena na značkovacím jazyku XML.

Princip si ukážeme na příkladu. Zvolíme si konkrétní výrobek, třeba čerpadlo a popíšeme jej několika způsoby. Pro jednoduchost budeme uvažovat jen základní parametry čerpadla:

  • Název: 80 KDFU 130-13-AO, ponorné kalové čerpadlo SIGMA
  • Kód: SIGMA_80KDFU13
  • Napětí: 400 V
  • Příkon: 3550 W
  • Maximální dopravní výtlak: 15m
  • Průtok: 480 l/min

Ve skutečnosti jsou často čerpadla takto popsána a zveřejněna v katalozích na webu. Výrobce pak většinou nabízí podrobnější popis nejčastěji jako PDF soubor.

Tento přístup je přímočarý a jednoduchý, ale není správný. Proč? Pokud se nad příkladem zamyslíte, najdete hned několik problémů.

Především názvy jsou česky a v podstatě jsou vyloučeni zahraniční zákazníci.

Podobný problém nastává u jednotek, kde v anglosaském světě je zvykem používat jiné jednotky, jako jsou například palce a galony.

Konečně poslední problém, který není již tak zřejmý, spočívá v tom, že takto popsaný výrobek se nedá počítačově zpracovat. Představte si obchodníka s čerpadly, který ve svém internetovém obchodě chce zákazníkům nabídnout možnost vyhledat čerpadla podle zadaných parametrů. Každý výrobce dodá sice v potřebné informace, ale každý v jiném formátu, s jinými popisy a v různých jednotkách.

Vytvoření XML protokolu

Všechny tři problémy lze vyřešit pomocí XML, které pomůže oddělit obsah a formu prezentace. V následujícím příkladu vytvoříme jednoduchý XML jazyk pro popis čerpadel a ukážeme si i jednoduchou transformaci do prezentačního formátu HTML.

<?xml version="1.0" encoding="utf-8"?>
<Pump>
  <Model>80 KDFU 130-13-AO</Model>
  <Code Catalog="PumpShop">SIGMA_80KDFU13</Code>
  <Description lang="cz">ponorné kalové čerpadlo SIGMA</Description>
  <Tension Unit="V">400</Tension>
  <MotorInput Unit="W">3550</MotorInput>
  <MaxDisplacement Unit="m">15</MaxDisplacement>
  <PumpCapacity Unit="l/min">480</PumpCapacity>
</Pump>

Čerpadlo (Pump) je identifikováno modelem (Model), katalogovým číslem (Code), které je dále blíže určeno katalogem (Catalog).

Popisů (Description) může být více, v různých jazycích (lang).

Technické parametry jsou jmenovité napětí motoru (Tension), jmenovitý výkon (MotorInput), maximální výtlak (MaxDisplacement) a maximální průtok (PumpCapacity). U hodnoty parametrů jsou vždy uvedeny jednotky (Unit).

Tento XML jazyk bychom tímto stylem dále postupně rozšiřovali o další důležité parametry. To však nyní dělat nebudeme a ukážeme si poměrně jednoduchý postup, který si můžete vyzkoušet přímo v browseru na svém počítači.

Naším cílem bude transformovat XML do HTML stránky, kde se zobrazí údaje v angličtině a v imperiálních jednotkách a česky v jednotkách SI. Nejprve do XML přidáme ještě jedno čerpadlo a do hlavičky uvedeme jméno XSL, tedy šablony, kterou se XML bude transformovat do HTML stránky. XSL transformaci napíšeme později.

Po rozšíření bude náš ukázkový XML soubor vypadat takto:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="pumpcz.xsl" type="text/xsl"?>
<Pumps>
  <Pump>
    <Model>80 KDFU 130-13-AO</Model>
    <Code Catalog="PumpShop">SIGMA_80KDFU13</Code>
    <Description lang="cz">ponorné kalové čerpadlo SIGMA</Description>
    <Description lang="en">submersible sludge pump SIGMA</Description>
    <Tension Unit="V">400</Tension>
    <MotorInput Unit="W">3550</MotorInput>
    <MaxDisplacement Unit="m">15</MaxDisplacement>
    <PumpCapacity Unit="l/min">480</PumpCapacity>
  </Pump>
  <Pump>
    <Model>100-KDFU-150-13,5-AO</Model>
    <Code Catalog="PumpShop">SIGMA_100KDFU15</Code>
    <Description lang="cz">ponorné kalové čerpadlo SIGMA</Description>
    <Description lang="en">submersible sludge pump SIGMA</Description>
    <Tension Unit="V">400</Tension>
    <MotorInput Unit="W">3000</MotorInput>
    <MaxDisplacement Unit="m">27</MaxDisplacement>
    <PumpCapacity Unit="m3/hod">86</PumpCapacity>
  </Pump>
</Pumps>

Doplnili jsme anglické popisy a zejména <?xml-stylesheet href="pumpcz.xsl" type="text/xsl"?>, který je procesní instrukcí pro browser, který znamená "toto xml transformuj do jiné podoby, podle příkazů v souboru pumpcz.xsl".

XSL Transformace z XML do HTML

Nyní tedy napíšeme transformační xsl soubor. Budeme chtít zobrazit data v přehledné tabulce. V XML jsou také u průtoků použity různé jednotky (l/min a m3/hod), které sjednotíme na l/min, pro výkon použijeme kW.

Obsah souboru pumpcz.xsl pak bude vypadat takto:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
  <xsl:template match="Pumps">
  <html>
    <head>
      <meta http-equiv="content-type" content="text/html; charset=windows-1250"/>
      <title>Pumpy našeho podniku</title>
    </head>
    <body>
     <table border="1">
      <caption>Naše čerpadla</caption>
      <thead>
       <tr> 
        <th>Model</th>
        <th>Kód</th>
        <th>Popis</th>
        <th>Jmenovité napětí [V]</th>
        <th>Jm. výkon motoru [kW]</th>
        <th>Výtlak max. [m]</th>
        <th>Průtok max. [l/min]</th>
       </tr> 
      </thead>
      <tbody>
       <xsl:for-each select="Pump">
        <tr>
         <td><xsl:value-of select="Model"/></td>
         <td><xsl:value-of select="Code"/></td>
         <td><xsl:value-of select="Description[@lang='cz']"/></td>
         <td><xsl:value-of select="Tension"/></td>
         <td>
          <xsl:choose>
            <xsl:when test="MotorInput/@Unit='W'">
              <xsl:value-of select="MotorInput div 1000"/>
            </xsl:when>
            <xsl:otherwise>
              <xsl:value-of select="MotorInput"/>
            </xsl:otherwise>
          </xsl:choose>
         </td>
         <td><xsl:value-of select="MaxDisplacement"/></td>
         <td>
          <xsl:choose>
            <xsl:when test="PumpCapacity/@Unit='m3/hod'">
              <xsl:value-of select="format-number(PumpCapacity * 1000 div 60,'#0')"/>
            </xsl:when>
            <xsl:otherwise>
              <xsl:value-of select="PumpCapacity"/>    
            </xsl:otherwise>
          </xsl:choose>
         </td>
        </tr>
       </xsl:for-each>
      </tbody>
     </table>
    </body>
  </html>
  </xsl:template>
</xsl:stylesheet>

Jednotlivé XSL příkazy jsou dobře vysvětleny v mnoha jiných zdrojích na internetu (viz například odkazy níže). Povšimněte si zejména přepočtu jednotek MotorInput div 1000 (převod z W na kW) a PumpCapacity * 1000 div 60 (převod z m3/hod na l/min).

Výsledkem transformace je pak tabulka:

Naše čerpadla

Model Kód Popis Jmenovité napětí [V] Jm. výkon motoru [kW] Výtlak max. [m] Průtok max. [l/min]
80 KDFU 130-13-AO SIGMA_80KDFU13 ponorné kalové čerpadlo SIGMA 400 3.55 15 480
100-KDFU-150-13,5-AO SIGMA_100KDFU15 ponorné kalové čerpadlo SIGMA 400 3 27 1433

Pro zákazníky a partnery z anglosaských zemí použijeme stejná data ale jinou transformaci, kde kromě anglických textů budou i jednotky jako stopa a galon.

Založíme další soubor s názvem pumpen.xsl s následujícím obsahem:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
  <xsl:template match="Pumps">
  <html>
    <head>
      <meta http-equiv="content-type" content="text/html; charset=windows-1250"/>
      <title>Our company pumps</title>
    </head>
    <body>
     <table border="1">
      <caption>Our pumps</caption>
      <thead>
       <tr> 
        <th>Model</th>
        <th>Code</th>
        <th>Description</th>
        <th>Tension [V]</th>
        <th>Motor input [hp]</th>
        <th>Displacement max. [ft]</th>
        <th>Capacity max. [gal/min]</th>
       </tr> 
      </thead>
      <tbody>
       <xsl:for-each select="Pump">
        <tr>
         <td><xsl:value-of select="Model"/></td>
         <td><xsl:value-of select="Code"/></td>
         <td><xsl:value-of select="Description[@lang='en']"/></td>
         <td><xsl:value-of select="Tension"/></td>
         <td>
          <xsl:choose>
            <xsl:when test="MotorInput/@Unit='W'">
              <xsl:value-of select="format-number(MotorInput div 745.7,'#0.00')"/>
            </xsl:when>
            <xsl:when test="MotorInput/@Unit='kW'">
              <xsl:value-of select="format-number(MotorInput div 0.7457,'#0.00')"/>
            </xsl:when>
            <xsl:otherwise>
              <xsl:value-of select="MotorInput"/>
            </xsl:otherwise>
          </xsl:choose>
         </td>
         <td><xsl:value-of select="format-number(MaxDisplacement * 3.28,'#0.00')"/></td>
         <td>
          <xsl:choose>
            <xsl:when test="PumpCapacity/@Unit='m3/hod'">
              <xsl:value-of select="format-number(PumpCapacity * 1000 div 3.785 div 60,'#0')"/>
            </xsl:when>
            <xsl:when test="PumpCapacity/@Unit='l/min'">
              <xsl:value-of select="format-number(PumpCapacity div 3.785,'#0')"/>
            </xsl:when>
            <xsl:otherwise>
              <xsl:value-of select="PumpCapacity"/>    
            </xsl:otherwise>
          </xsl:choose>
         </td>
        </tr>
       </xsl:for-each>
      </tbody>
     </table>
    </body>
  </html>
  </xsl:template>
</xsl:stylesheet>

Aby se nová transformace projevila je nutné změnit odkaz v souboru pump.xml na <?xml-stylesheet href="pumpen.xsl" type="text/xsl"?>.

Kromě anglických názvů si povšimněte jiného přepočtu jednotek MotorInput div 745.7 (převod z W na hp), PumpCapacity div 3.785 (převod z l/min na gal/min) a MaxDisplacement * 3.28 (převod z m na stopy).

Výsledkem transformace je pak tabulka:

Our pumps

Model Code Description Tension [V] Motor input [hp] Displacement max. [ft] Capacity max. [gal/min]
80 KDFU 130-13-AO SIGMA_80KDFU13 submersible sludge pump SIGMA 400 4.76 49.20 127
100-KDFU-150-13,5-AO SIGMA_100KDFU15 submersible sludge pump SIGMA 400 4.02 88.56 379

Vyzkoušejte sami

  1. Stáhněte si archiv PumpXmlXslt.zip
  2. Archiv rozbalte na disk.
  3. V browseru otevřete soubor pump.xml.
  4. V souboru pump.xml změňte odkaz na xsl soubor (pumpcz.xsl nebo pumpen.xsl).
  5. V browseru vždy po změně aktualizujte obsah, aby se změny projevily.
  6. Pokuste se přidat další čerpadlo do pump.xml soboru.
  7. Pokuste se vylepšit nebo změnit transformaci do HTML, zkuste vytvořit transformaci do dalšího jazyka, například vytvořte soubor pumpde.xsl pro německé zákazníky.

Další zdroje

Některé z používaných standardů naleznete na stránkách standardizačních organizací, nebo na portálech věnovaných XML standardům:

Prostřednictvím těchto standardů si podniky vyměňují informace o produktech, jejich vlastnostech a dodávkách (stav skladových zásob, podmínky a stav dodání).

Kromě těchto protokolů existují i specializované portály jako je Wer Liefert Was nebo česká verze služby wlw.cz

Zpět na úvod - Materiály a poznámky k přednáškám