18.08. 2009
Jak rozchodit subreporty na JasperServeru
Každý report v napsaný v JasperReport / navržených v editoru iReport může obsahovat pouze jeden jediný zdrojový dotaz pro získání dat — definovaný v elementu <queryString>. V některých případech potřebujete získat data pomocí dvou či více dotazů. V takových případech si s jediným reportem nevystačíte — pro tento účel jsou k dispozici subreporty složící pro vložení jiných reportů do hlavní šablony. Jednoduše připojíte jiný JRXML soubor, předáte spojení, parametry, … Pokud reporty nahráváte na JasperServer, situace se trochu komplikuje o správné nastavení cesty k druhé šabloně.
11.05. 2009
JasperServer Input Controls pro volbu více hodnot
Dříve či později při vývoji reportů nad JasperServer narazíte na požadavek, aby parametry a vstupní prvky dovolovaly zvolit více jak jednu hodnotu. Typicky je třeba prvek, kde se volí právě jeden prvek, jeden a nebo všechny, a nebo jeden až všechny. Samozřejmě, že vstupní prvky by měly mít hodnoty naplněné z databáze, což jsem popsal nedávno.
Dnes popíšu, jak vytvořit vstupní prvek s možností volby různého počtu hodnot. Základem je definice parametru. Stačí v iReport editoru, v panelu Struktura dokumentu (Document structure) kliknout pravým tlačítkem na Parametry (Parameters) a Add… > Parameter. Důležité je nastavit datový typ java.util.Collection.
V JasperServeru pak definujeme příslušný vstupní prvek, která musí umožňovat volbu více hodnot. Máme-li k dispozici hotový Dotaz (Query) v JasperServeru pro získání hodnot, v panelu JS-Plugin 3.0 zvolíme dialog Add > Input Control a vybereme typ Multi–Select Query a vyplníme ostatní parametry stejně jako u Single–Select Query. Vstupní prvek přiřadíme do reportu (Report Unit).
Poslední a nejdůležitější je použít parametr v reportu. Jelikož hodnot může být různý počet, v dotazu použijeme omezující podmínku WHERE table.attr IN(…). Klasické parametry s jednou hodnotou zapisujeme pomocí $P{ParameterName}. Pro parametry s více hodnotami existuje speciální zápis – $X{IN, table.attr, ParameterName}, který vygeneruje celou podmínku v dotazu. Místo IN můžete použít také NOTIN, pokud chcete vygenerovat klauzulin NOT IN(…).
Vstupní prvek se zobrazí jako selectbox s více zobrazenými hodnotami, kde můžete i více hodnot zvolit.
02.02. 2009
Lineární grafy v JasperReports / iReports
Moje práce na reportech a JasperServeru pro jejich správu pokračuje i nadále. Aktuálně jsem řešil problém, jak správně vytvořil lineární graf (Line Chart) v editoru iReports. Kde byl problém? Byly dokonce dva. První se týkal správného umístění elementu grafu v JRXML šabloně, druhý zadání zdrojových políček z dotazu. Druhý ze zdrojů uváděl, že do libovolné části šablony, která se neopakuje. Po spuštění reportu, kdy se mi vygeneroval graf na tolik stránek, kolik bylo řádků zdrojových dat, jsem pochopil, že to nepůjde do libovolného elementu. Tutoriál ke grafům v iReports dal správnou odpověď — graf umístěte do elementu <summary>. Řešení, jak nastavit zdrojová pole, jsem našel na Java Lobby. Máme-li dotaz:
SELECT
workstatus.time AS DATE_TIME,
workstatus.active_projects_count AS PROJECT_COUNT
FROM workstatus
WHERE workstatus.time BETWEEN $P{VALID_FROM} AND $P{VALID_TO}
ORDER BY workstatus.time ASC
Můžeme nastavit graf tímto způsobem:
- Výraz pro sérii: název jedné linie v grafu, např.
"Počet aktivních projektů" - Výraz pro kategorii: Osa X,
$F{DATE_TIME} - Hodnota výrazu: Osa Y,
$F{PROJECT_COUNT}
Graf se vykreslí v horizontální orientaci, kde na ose X budou data, na ose Y počty projektů a pod grafem v legendě název tohoto datového zdroje. Do grafu lze samozřejmě zadat více datových setů a mít více přímek.
17.12. 2008
Dynamické Input Controls na JasperServeru
Pokud jste někdy řešili úkol tvorby reportů, určitě jste při hledání vhodné technologie neopomenuli prohlédnout nebo dokonce použili JasperReports. Tento framework poskytuje flexibilní šablonovací nástroj založený na vlasním XML formátu, který navíc můžete navrhnout v grafickém WYSIWYG editoru iReport od stejných tvůrců. Škála výstupních formátů je širová – hlavně PDF a XLS budou zajímavé. Pokud se chcete o nástroji dozvědět více, doporučuji krátké představení nástroje a integrace se Springu od Vlasty Vávrů nebo tutorial z ČVUT.
Minulý týden jsem řešil přípravu několika reportů nad Oracle databází. Výhodou bylo, že máme nainstalovaný JasperServer – ten slouží k hostování, správě, automatizovanému spouštění reportů a správě vygenerovaných reportů. Pro editor iReport je vytvořen předinstalovaný plug–in, kterým můžete server spravovat. Stačí přidat adresu a přihlašovací údaje, do widgetu se vám načte kompletní obsah, se kterým můžete manipulovat a vlatní šablony přímo v editoru upravovat. Co nepřidalo na jednoduchosti, byl požadavek na vstupní parametry. Např. volba jedné ze stavů faktury, či omezení časového intervalu. Protože mě to stálo minimálně den pátrání, popíšu, jak vytvořit na JasperServeru znovupoužitelné vstupní komponenty, jejichž výčet hodnot se načítá z databáze.
Základem je mít v šabloně reportu vytvořené vstupní parametry. Jméno vstupní komponenty se musí se jménem parametru shodovat! Máte–li šablonu hotovou, můžete připravit vstupní komponenty. Pro naplnění komponenty daty potřebujete Query (dotaz). Nabídku Add > Query najdete po pravém kliku na některou složku v JS plug–inu. Záložka General vyžaduje vyplnit Name (ID komponenty) a Label (libovolný popisek pro orientaci na JasperServeru). Záložka Query poskytuje volby pro vlastní získání dat. Je třeba zvolit dotazovací jazyk (např. SQL, EJBQL, HQL či XPath), najít již definované spojení na datový zdroj (databázi) a zadat vlastní dotaz.
Máte–li definovaný Dotaz, můžete vytvořit vlastní vstupní komponentu. Dialog najdete pod Add > Input Control. Ze zajímavých voleb uvedu Type, který je třeba nastavit na Single Select Query, dále najít na JasperServeru námi definovaný dotaz a pak, Value Column určuje jméno sloupce s hodnotou. Naopak Visible Query Columns sloupce, které budou v roletce zobrazeny.
Když vytvoříte všechny potřebné komponenty, otevřete si strukturu vašeho reportu (Report Unit) a všechny postupně připojte přes volbu Link an Existing Input Control (pravý klik na Input Controls). V této chvíli jsou již nabízený v komponentách správné hodnoty a report je pak se zvolenými hodnotami předanými přes parametry spuštěn a vygenerován.
16.12. 2008
JSON notace pro RDF
RDF, jako klíčová technologie sémantického Webu, umožňuje zápis informací a jejich výměnu. Data jsou zapisována jako trojice (předmět, predikát a objekt) a dohromady pak tvoří graf. Výhodou pak je, že existuje mnoho notací, jak graf zapsat. Nejznámější je určitě RDF/XML nebo třeba Notation 3. Mezi ty méně známé pak jistě patří RDF/JSON vytvářený skupinou Talis. Nabízí se srovnání se dvěma jmenovanými – „výřečností“ může konkurovat XML notaci, ba ji i předčit, ale někdy se může podpora v JSONu hodit. Krátká ukázka N3 a RDF/JSON pro porovnání:
<http://example.org/about>
<http://purl.org/dc/elements/1.1/title>
"About page" .
{
"http://example.org/about":
{
"http://purl.org/dc/elements/1.1/title":
[
{
"type": "literal",
"value": "About page"
}
]
}
}
I tuto notaci používá dříve zmiňovaný projekt OpenVocab pro management ontologií.
08.12. 2008
Projekt OpenVocab pro sémantický Web
Na informace o projektu OpenVocab jsem narazil nedávno a už představení jeho současných i plánovaných funkcí mne zaujalo. O co jde? Sémantický Web je založen zejména na strojově čitelných datech a jejich výměně. Ty musí být kódovaný použitím nějakého schématu (RDFS) či lépe ontologie (OWL). Existuje mnoho „standardů“ jako FOAF, DOAP, Dublin Core… V některých případech ale potřebujete vytvořit vlastní koncepty (třídy) či atributy. Pak máte na výběr buď vytvořit jejich popis v některé z notací RDF (obvykle RDF/XML), přemýšlet nad tvarem URIref jednotlivých konceptů a následně vše publikovat, a nebo je zde právě OpenVocab.
Ve zkratce se jedná o kolaborativní hosting a tvorbu pojmů z ontologií, kdy data lze tvořit, sdílet a upravovat v rámci otevřeného systému. Ten pak poskytuje unifikovaný tvar adres, koncepty jsou zpřístupněny jako Linked Data a také v rozličných formátech – RDF, XHTML, JSON, Turtle. Linked Data znamená, že každá URIref (URL adresa) označující termín vrací na požadavky hlavičku HTTP 303 See Other a přesměrování na jinou prezentační verzi s informacemi o tomto konceptu. A to podle preferencí agenta (obvykle RDF pro stroje a XHTML pro prohlížeče).
Technicky, data jsou uložena v RDF úložišti Talis Platform a jsou přístupná přes SPARQL. Zdrojové kódy a dokumentaci projektu najdete na Google Code. Projekt navazuje na původní vocab.org, který pouze poskytoval prostor a neměnnou doménu pro různé ontologie, ale posunuje celou ideu dál. Zajímalo by mne, jestli autor bude ontologie publikované na vocab.org migrovat do nového systému.
01.12. 2008
Nekompletní podpora SPARQL OPTIONAL v PHP frameworcích
Během práce na komunitní stránce Knowledge Engineering Group, která je kompletně implementována nad RDF úložištěm, jsem narazil na jeden problém s nekompatibilitou se standardem SPARQL. Používali jsme framework RDF API for PHP, což je téměř zažitý standard pro PHP aplikace pracující s RDF. Nyní popíšu náš případ užití. Měli jsme v úložišti několik instancí typu foaf:Group; některé měly jeden atribut foaf:name, jehož hodnotou bylo jméno v anglickém jazyce a jiné měly dva atributy foaf:name, jeden v angličtině a druhý v češtině. Jedním dotazem jsme chtěli zvolit obě jména a zobrazit je v XHTML editoru. SPARQL dotaz vypadal následovně:
26.11. 2008
Sémantický Web - perspektivy, aplikace, technologie (překlad)
Máte–li zájem si přečíst pár zajímavých textů o sémantickém Webu v češtině, nabízím odkaz na tři články, které přeložil během posledních pár nocí Aristo. Originál vyšel v časopise IEEE Intelligent Systems (PDF, 705 kB). (Pozn. ještě tomu chybí korektury.)
Užitečné nástroje pro Relax NG
(Doplněno!) V sobotu jsem zde doporučova Relax NG pro tvorbu XML schémat. Plnohodnotný vývoj schématu se ale neobejde bez validátor, který by ověřil validitu schéma a následně zvalidoval soubory proti tomuto schématu. Stejně tak může chybět nástroj pro konverzi, který pomůže vytvořit verze v jiných jazycích pro XML schéma. Abyste nemuseli bloudit a hledat, dám tipy na nástroje, které používám již od prvního seznámení s Relax NG …
Převod mezi jednotlivými formáty pro tvorbu XML schémat zvládá aplikace Trang. Jde o konzolovou aplikaci implementovanou v Javě. V instalaci je přibalený podrobný manuál se seznamem příkazů. Zvládá konverze mezi DTD, WXS a Relax NG v obou syntaxích (XML i kompaktní).
Validaci schémat a dokumentů proti těmto schématům umí aplikace Jing. Opět se jedná o konzolovou aplikaci implementovanou v Javě – obě dvě jsou od stejných tvůrců (tj. Thai Open Source Software Center Ltd). Jing podporuje Relax NG v obou syntaxích a experimentálně několik dalších technologií. Důležité parametry volání:
-c: schéma používá kompaktní syntaxi-e enc: určení kódování pro načtení schématu
Volání pro spuštění:
java –jar jing.jar [-c –e …] <soubor schématu> [<XML dokument>]
XML dokument je volitelný. Pokud jej zadáte, bude se validovat proti určenému schématu. Pokud zadáte pouze cestu ke schématu, bude se validovat to.
Doplněno 26.11. 2008: Jiří Kosek avizoval návrat tvůrce nástrojů Jing a Trang do světa XML. Pro tento projekt to znamená další rozvoj. Od nynějška můžete projekt najít na Google Code.
18.11. 2008
Je libo demonstraci aplikací sémantického Webu?
Tento týden si Aristo a HoNem na katedrálním semináři připravili demonstraci některých již fungujících aplikací, které využívají technologie sémanticého Webu. Pro některé by to mohl snad být důkaz, že S.W. není jen hračkou pro vědce a teoretiky, ale dá se i prakticky někde uplatnit. Máte–li o téma zájem, určitě se stavte. Anotace přednášky:
Semantic Web Technologies Applied – Demonstrations and Discussion
Speakers: Jan Nemrava, KIZI, VŠE Praha and Jan Zemánek, KIZI VŠE Praha
We are going to showcase a couple of real world Semantic Web applications most of them presented during this year's Semantic Web Challenge [1] at ISWC in Karlsruhe [2]. Afterwards we will discuss in which areas the Semantic Web technologies brings us actual benefits over conventional technologies/approaches and which are those.
[1] http://challenge.semanticweb.org/
[2] http://iswc2008.semanticweb.org/