Vestavěná podpora XML v MS SQL umožňuje formátovat výstup výsledků dotazů přímo do XML. Pokud používáte IIS, můžete výslednou tabulku zobrazovat přímo v Internet Exploreru ve formě XML s pomocí vestavěných nebo vlastních stylů zobrazení. Pojďme se podívat, jak na to.

XML a MS SQL

V rámci vlastního rozšíření (dialektu) jazyka Transact-SQL disponuje MS SQL zabudovanou podporou formátu XML, standardu pro výměnu dat. S touto vymožeností není MS SQL jediný. I jiné komerční servery nabízejí knihovny „XML Developer Kit“. Bližší informace o XML a o práci s ním se dočtete v seriálu Slabikář XML.

Výstup tabulek – HTML nebo XML?

Jistě znáte někdy až nepřehledný kód se spoustou elementů HTML tabulek, v případě ASP stránek plný „response.write“ nebo PHP skriptů prošpikovaný příkazy „echo“, pro výpis jednotlivých položek aktuálního řádku tabulky vybrané příkazem SELECT do HTML stránky. V porovnání s XML je to celkem nepřehledné a navíc redundantní – formátovací elementy se pro každý nový řádek dokola opakují. Je to tím, že syntaxe HTML určuje především formu a způsob zobrazení v prohlížeči. Druhou možností je výstup příkazu SELECT ve formátu XML a použití parseru. V tomto případě zase způsob zobrazení definujete pomocí stylu. Pro detaily práce s XML se odvolávám na články, které na Intervalu na toto téma vyšly, a dále se zabývám pouze MS SQL serverem.

Klasický SELECT a SELECT FOR XML

Spusťte nástroj SQL Query Analyzer, jenž jsem popsal ve článku Jak na MS SQL – první dotazy. Přepněte na nějakou svou databázi a napište nějaký jednodušší SELECT, který vrací tabulku s alespoň jedním řádkem.

MS SQL Server - XML - klasický SELECT
klasický SELECT

Na této odpovědi není zatím nic zvláštního. Teď doplňte na konec SELECTu klauzuli „FOR XML“:

SELECT * FROM tabulka FOR XML AUTO

Vrátí se výsledek, tabulka ve formátu XML. Je to jeden dlouhý řetězec.

MS SQL Server - XML - SELECT do XML
SELECT do XML

Nyní již stačí použít obslužný program, který data přečte a zpracuje – například vloží ve formě HTML do právě generované stránky.

Konfigurace Internet Information Serveru

Pokud používáte IIS 5 a vyšší, dává MS SQL možnost konfigurovat virtuální adresář, který po zadání SQL dotazu SELECT FOR XML vrací přímo správně sestavený XML dokument. K nastavení slouží utilita „IIS Virtual Directory Management for SQL Server“. Pro její spuštění zvolte START | Programy | Microsoft SQL Server | Configure SQL XML Support in IIS:

MS SQL Server - XML - IIS Virtual Directory Management for SQL Server
IIS Virtual Directory Management for SQL Server

Ve stromu konzole označte webový server, pro který budete podporu XML aktivovat. Nyní vytvořte nový virtuální adresář – v menu Akce | Nový | Virtual Directory. V první záložce dialogu nazvané „General“ se zadává nové jméno virtuálního adresáře a odpovídající fyzická cesta. „Security“ zase řeší způsob přihlašování. V „Data Source“ volíte instanci SQL serveru, na kterou budou dotazy směřovány, a také název pracovní databáze, nad kterou budou dotazy vykonávány. Záložka „Settings“ nastavuje, jakými způsoby se bude předávat SQL dotaz ke zpracování.

MS SQL Server - XML - Dialog nového virtuálního adresáře
Dialog nového virtuálního adresáře, záložka Settings

Způsoby přístupu přes virtuální adresář

Allow URL queries – povoleno zadávání SQL dotazů rovnou do URL jako proměnné předávané metodou GET.
Allow template queries – uživatelé mohou spouštět dotazy uložené v šablonách.
Allow XPath – dotazy pracující s SQL pohledy.
Allow POST – povolení a nastavení maximální velikosti dat v dotazu předávaném ke zpracování metodou POST.

Dotazy přes URL

V následujícím příkladu předpokládám, že URL virtuálního adresáře, který jste si nastavili, je „http://localhost/xml“. Otevřete Internet Explorer a zadejte:

http://localhost/xml?sql=SELECT * FROM tabulka FOR XML AUTO&root=nazev_korene

V URL se používají dva parametry: sql je text SQL dotazu typu SELECT FOR XML a root je název kořenového elementu generovaného XML dokumentu.

V okně prohlížeče se objeví výsledek SQL dotazu ve formě XML dokumentu s barevným rozlišením syntaxe:

MS SQL Server - XML - XML v Internet Exporeru
XML v Internet Exploreru

Tento způsob komunikace s SQL serverem je na ladění na lokálním počítači určitě vhodný, ale naopak by byl bezpečnostní dírou při použití na webu. Proto, pokud pro nějaký virtuální adresář nastavíte „Allow URL queries“, nepovolujte k němu přístup z Internetu.

Dotazy prostřednictvím šablony

Ve fyzické složce odpovídající virtuálnímu adresáři „http://localhost/xml“ vytvořte soubor XML šablony. Tento soubor bude obsahovat příkaz SQL:

<root xmlns:sql=“urn:schemas-microsoft-com:xml-sql“>
<sql:query>
SELECT * FROM tabulka FOR XML AUTO
</sql:query>
</root>

Pokud v prohlížeči otevřete URL tohoto souboru, vypíše se výsledek dotazu stejně, jako v předchozím případě, kdy bylo SQL přímo součástí URL. V tomto případě je to ale bezpečnější, protože nelze SQL dotaz libovolně měnit.

Šablona popisující formát výstupu

S použitím šablony XSL lze určit HTML formát výstupu dat z XML. Šablona se tvoří jednoduše (název SQL tabulky a jednotlivých jejích sloupců jsou tučně):

<?xml version=’1.0′ encoding=’UTF-8′?>
<xsl:stylesheet xmlns:xsl=“http://www.w3.org/1999/XSL/Transform“ version=“1.0″>
<xsl:template match = ‚*‘>
<xsl:apply-templates />
</xsl:template>
<xsl:template match = ‚tabulka‚>
 <tr>
  <td><xsl:value-of select = ‚@sloupec 1‚ /></td>
  <td><xsl:value-of select = ‚@sloupec 2‚ /></td>
 </tr>
</xsl:template>
<xsl:template match = ‚/‘>
<table border=’1′>
 <tr>
  <td>zahlavi sloupce 1</td>
  <td>zahlavi sloupce 2</td>
 </tr>
 <xsl:apply-templates select = ‚root‘ />
</table>
</xsl:template>
</xsl:stylesheet>

V šabloně s SQL dotazem ještě musíte určit, že se pro výstup výsledku má použít šablona XSL (vyznačeno tučně):

<?xml version=’1.0′ encoding=’UTF-8′?>
<root xmlns:sql=’urn:schemas-microsoft-com:xml-sql‘ sql:xsl=‘sablona.xsl‚>
<sql:query>
SELECT * FROM tabulka FOR XML AUTO
</sql:query>
</root>

Výstup se zformátuje do HTML bez použití ASP, jak jsem o tom psal v úvodu článku. Šablony SQL dotazů umožňují používat i parametry, které mohou být propojeny přímo na prvky HTML formulářů a tak umožnit návštěvníkovi stránky zpřesnění dotazu.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět