Bereit zum Report

BIRT bringt Business Intelligence für Eclipse

Thomas Hohmann

Anfang Juni wurde Version 1.0 das Business Intelligence and Reporting Tools Project, kurz BIRT, veröffentlicht. Ziel und Inhalt des Projekts ist es, Softwareentwicklern eine erweiterbare Tool-Palette zum Aufbau von Business-Intelligence- und Reporting-Funktionalität für Java-Anwendungen bereitzustellen. Die BIRT-Software kann in Java-Applikationen integriert oder standalone eingesetzt werden. Damit erhält die Eclipse-Plattform eine wichtige Ergänzung, die es näher unter die Lupe zu nehmen gilt.

BIRT bietet Open-Source-Tools insbesondere für Webanwendungen, die auf Java SE und Java EE aufbauen. Die Software besteht aus zwei Hauptkomponenten: dem Report Designer – einem Eclipse-Plug-in zur Erstellung von Berichten – und einer Runtime-Umgebung, die an einen Application Server angebunden werden kann. Mit dem Designer kann der Nutzer in einer vertrauten, Web-ähnlichen Umgebung die gewünschten Berichtslayouts grafisch aufbauen. Die Bereitstellung der Berichte übernimmt das Runtime-Modul Report Engine unter Verwendung von Java-Klassenbibliotheken. Die Engine kann in Java EE-basierte Webanwendungen integriert werden, um dort Berichte auszuführen und anzuzeigen.

Wichtige Komponenten von BIRT 1.0 im Überblick

  • BIRT Report Designer: ist eine Authoring-Umgebung, in der Nutzer Berichtsdesigns erstellen können. Die Designs werden im XML-Format ausgegeben. Das Tool bietet auch Funktionen für den Aufbau von Diagrammen und unterstützt zahlreiche Sprachen.
  • BIRT Report Engine: erzeugt Berichte innerhalb beliebiger Java-Anwendungen auf Basis der mit Report Designer erstellten Berichtsdesigns. Die Report Engine ist das Herzstück der Runtime-Umgebung von BIRT.
  • Verschiedene APIs ermöglichen die Integration und Erweiterung von BIRT.

BIRT ist eines von acht Top-Level-Projekten der Eclipse Foundation. Ziel und Inhalt des Projekts ist es, Java-Entwicklern Business-Intelligence- und Reporting-Werkzeuge als einfach zu integrierenden Open-Source-Code zur Verfügung zu stellen. Die BIRT-Software nutzt, wo immer möglich, anderen quelloffenen Code wie die Javascript Engine Mozilla Rhino und ist konform zum Standard ECMA-262 (ECMAScript Language Specification).

BIRT 1.0 enthält als eine Hauptkomponente den Report Designer – ein Eclipse-Plug-in, mit dem der Nutzer Berichte im WYSIWYG-Modus aufbauen kann. Zur Report-Bereitstellung bietet BIRT 1.0 eine Runtime-Umgebung mit Java-Klassenbibliotheken, die die Berichte im HTML- oder PDF-Format präsentiert.

Mehr als 60 IT-Spezialisten beteiligen sich am BIRT-Projekt. Zwischen BIRT und anderen Open-Source-Projekten von Eclipse – TPTP, DTP, WTP – gibt es eine rege Kooperation und Abstimmung. Initiiert wurde das BIRT-Projekt vom Enterprise-Reporting-Anbieter Actuate. Im vergangenen Jahr wurde Actuate Vorstandmitglied der Eclipse Foundation und rief kurz darauf BIRT ins Leben. Während der Entwicklung der quelloffenen Bericht-Tools trug Actuate 243.000 Codezeilen bei und übernahm die Projektsteuerung innerhalb der Community.

Das Unternehmen möchte damit der Gemeinschaft der Java-Entwickler leistungsfähige Technologien zur Report-Erstellung open source zur Verfügung. Mit ihrer Transparenz und einer Durchdringungsrate von bereits 65 Prozent schafft Eclipse.org eine Win-Win-Situation für die Java-Entwickler und für Actuate. Die Entwickler profitieren von offenem Quellcode, Actuate profitiert vom Feedback. Und BIRT profitiert von einer immer breiteren Akzeptanz und Nutzung – und so von einer schnellen Weiterentwicklung.

Abb. 1: Architektur von BIRT
Report Designer

Mit dem BIRT Report Designer können Berichte schnell und einfach aufgebaut werden. Das Tool bietet auch Scripting-Funktionalität zur dynamischen Steuerung der Berichtserstellung sowie zur Integration von kundenspezifischen Datenzugriffsmechanismen und Berechnungen, aber auch zur Einbindung von Geschäftslogik aus vorhandenem Java-Code. Der Designer unterstützt die Sprachen Englisch, Deutsch, Französisch, Spanisch, Japanisch und Koreanisch. Der BIRT Report Designer umfasst leistungsfähige Module und Features, die die Berichterstellung vielfältig unterstützen:

  • Data Explorer organisiert Datenquellen (Datenverbindungen) und Data Sets (Datenabfragen).
  • Data Set Editor ermöglicht dem Nutzer, die Berichtsdaten zu testen und so sicherzustellen, dass der Report die richtigen Daten abruft.
  • Layout View ist ein WYSIWYG-Editor, der die Erstellung von Berichtslayouts per Drag & Drop erlaubt und verschiedene Standard-Berichtselemente anbietet.
  • Property Editor präsentiert die am häufigsten genutzten Eigenschaften (Properties) von Berichtselementen in einem Format, das der Nutzer komfortabel bearbeiten kann. Da der Report Designer mit der Standard-Property-Ansicht von Eclipse verknüpft ist, kann dem Nutzer die vollständige Liste der Eigenschaften eines Elements bereitgestellt werden.
  • Report Preview erlaubt das Testen eines Berichts mit Echtdaten. Das Vorschaufenster kann eine Ansicht innerhalb von Eclipse oder ein separates Browser-Fenster sein.

  • Code Editor unterstützt Skript-Programmierung, mit der Berichten beim Datenzugriff, bei der Report-Erzeugung und -Anzeige Geschäftslogik hinzugefügt werden kann.
  • Darstellungsoptionen erlauben die Präsentation der Daten in der gewünschten Form, zum Beispiel als Tabelle, Diagramm oder Text. Die verschiedenen Arten der Präsentation entsprechen Berichtselementen. Ein Data Set kann mit mehreren Berichtselementen verknüpft sein.

Außerdem bietet der Report Designer Lokalisierungsfunktionen, mit denen die Berichtsinhalte entsprechend dem geografischen Standort des Nutzers angepasst werden können.

Abb. 2: Report Designer & Chart Builder

Mit dem BIRT Chart Builder kann der Nutzer zudem in einer grafischen Bedienumgebung Diagramme (Charts) interaktiv definieren. Für den Aufbau von neuen Diagrammtypen bietet das Chart Builder Framework Erweiterungsschnittstellen für die Bedienoberfläche. Der BIRT Report Viewer ist eine webbasierte Komponente, die Berichtsdesigns ausführt und Berichte in verschiedenen Formaten wie HTML oder PDF anzeigt. Die Eclipse BIRT Report Engine erzeugt Berichte aufbauend auf XML-Berichtsdesigns. Dazu bietet sie zwei Basisdienste: Generierung und Präsentation. Die Engine umfasst auch eine Reihe von POJOs (Plain Old Java Objects). Diese können von JavaServer Pages (JSP) aufgerufen werden, um Reporting-Funktionalität in Java-Anwendungen zu integrieren. Die Report Engine ist eine komprimierte Datei (.jar-Datei), die sich in Java EE-Applikationen einbinden lässt. Die BIRT Chart Engine erzeugt geräteunabhängige Diagramme aufbauend auf EMF-basierten (EMF = Eclipse Modeling Framework) Diagramm-Modellen im XML-Format.

Basiselemente und -funktionen der BIRT-Berichte

BIRT-Berichte basieren auf verschiedenen Elementen und Funktionen. BIRT-Berichte können Daten aus unterschiedlichsten und beliebig vielen Quellen enthalten, zum Beispiel von Datenbanken, Web Services oder Java-Objekten. Auch JDBC und die Extraktion von Daten mithilfe von Code werden von BIRT unterstützt. Das BIRT Open Data Access (ODA) Framework gestattet den Aufbau einer neuen Bedienschnittstelle sowie von Runtime-Funktionen für jede Art von tabellarischen Daten.

Die BIRT-Berichte präsentieren dem Nutzer die Daten als sortierte, aggregierte, gefilterte und/oder gruppierte Informationen. Während einige Datenbanksysteme solche Transformationen ausführen können, muss für andere Datenquellen (z.B. Flat Files, Java-Objekte) die BIRT-Software diese Aufgabe übernehmen. Zudem ermöglicht BIRT auch anspruchsvollere Transformationen wie das Gruppieren nach Summen und nach Prozentanteilen von Gesamtwerten.

Informationen liegen in den seltensten Fällen in der inhaltlichen Struktur vor, die für einen Bericht benötigt wird. Deshalb müssen die Ausgangsdaten anhand von geschäftsspezifischer Logik in sinnvolle, strukturierte Informationen überführt werden. Geschäftslogik, die für einen einzelnen BIRT-Bericht gebraucht wird, lässt sich in der BIRT-Umgebung per Javascript aufbauen. Enthält die betreffende Anwendung schon Geschäftslogik, so kann mit den BIRT-Scripting-Funktionen auf den entsprechenden Java-Code zugegriffen werden.

BIRT-Projekte sind als Baumstruktur organisiert. Auf der obersten Ebene findet man den Gesamtbericht, darunter separate Kategorien für Präsentationsstil, Berichtsinhalt, Datenquelle, Data Set, Berichtsparameter etc. In der Gliederungsansicht ist die gesamte Berichtsstruktur auf einen Blick erkennbar.

BIRT in Applikationen einbinden

BIRT hat vier Hauptintegrationspunkte mit einer Anwendung. Die meisten Berichte geben dem Anwender die Möglichkeit, eine Art Eingabe zu spezifizieren, so genannte Report-Parameter. Das Parameter User Interface kann statisch sein und für jeden Bericht eigens gestaltet werden. Sie kann aber auch dynamisch generiert werden, indem Metadaten für die Parameter herangezogen werden. So funktioniert eine einzige Eingabeseite für jeden Bericht.

Wenn der Anwender das Parameter-Formular abschickt, gibt die Webanwendung die Parameter an die Report Engine weiter. Diese ruft dann die Report-Design-Datei auf, liest die Daten ein und generiert den Berichtsoutput. Zur Datenübergabe an die Engine können herkömmliche Java-Objekte verwendet werden, die den Zugriff auf die Datenquellen definieren. Zusätzliche JSPs, Viewer genannt, zeigen dem Anwender den Berichts-Output an. Das BIRT-Projekt bietet einen Beispiel-Viewer an. Er kann auch auf jedem JSP-fähigen Java EE-Server eingesetzt werden.

Um mit einem BIRT-Projekt zu beginnen, müssen Eclipse, GEF, EMF und BIRT installiert sein. Vollständige Anleitungen dazu sind zu finden unter download.eclipse.org/birt/downloads/. Das folgende Beispiel bezieht sich auf die Beispieldatenbank „Classic Models“, die standardmäßig Apache Derby als ihre DBMS nutzt, aber auch als MySQL- oder MS-Access-Datenbank downgeloadet und eingerichtet werden kann. Entsprechende Hinweise dafür finden Sie auf der Website.

Erste Schritte – Tutorial für den Einstieg in BIRT

BIRT erstellt eine Reporting Perspective innerhalb von Eclipse. Um sie zu öffnen, wählt man im Menüpunkt WINDOW im Eclipse-Hauptmenü OPEN PERSPECTIVE, dann REPORT DESIGN. Wenn REPORT DESIGN nicht gleich erscheint, kann es unter OTHER ausgewählt werden. Eclipse wechselt dann zur BIRT Perspective.

Für dieses Tutorial wird, wie in Eclipse üblich, ein eigenes Projekt zur Organisation von Dateien angelegt. Wählen Sie den Menüpunkt FILE | NEW | PROJECT und wählen Sie in der Gruppe BUSINESS INTELLIGENCE AND REPORTING TOOLS den Punkt REPORT PROJECT. Dann geht es weiter mit NEXT und für dieses Beispiel dem Projektnamen MY REPORTS und einem Klick auf FINISH. Wenn Sie gefragt werden, ob Sie zur Report Design Perspective wechseln möchten, klicken Sie bitte OK.

Berichte erstellen

Das Erstellen eines neuen Berichts ist ebenso einfach. Unter FILE | NEW | REPORT finden Sie das gerade angelegte neue Projekt My Reports. In das Eingabefeld Customers.rptdesign eingeben und mit NEXT bestätigen. Grundsätzlich können Berichte auf dreierlei Weise erstellt werden: als Blanko-Reports, mithilfe eines vordefinierten Template aus BIRT oder indem man ein bestehendes Berichtsdesign kopiert und wieder verwendet.

Die in BIRT enthaltenen Berichtsdesigns können bei der Entwicklung von Berichten hilfreich sein, da man nicht sämtliche Elemente neu anlegen muss. In vielen Fällen reicht es aus, die Templates nach den eigenen Anforderungen zu modifizieren. Die Templates, die im NEW | REPORT-Dialog angeboten warden, sind im Einzelnen:

  • My First Report – ein Tutorial, das mit der Online-Hilfe Schritt für Schritt durch die Berichtserstellung anhand eines Beispieles führt.
  • Blank Report – ein leerer Bericht ohne Inhalte.
  • Simple Listing – ein tabellarischer Bericht ohne Gruppierungen.
  • Grouped Listing – ein tabellarischer Listenbericht mit Gruppierungen. Gruppierungen zeigen sich wiederholende Werte nur ein Mal an. Mit ihrer Hilfe lassen sich auch Untersummen bilden.
  • Dual Column Listing – ein zweispaltiger Listenbericht.
  • Chart & Listing – eine tabellarische Liste mit einer Grafik am Anfang des Berichts.
  • Dual Chart & Listing – kombiniert Grafiken und Tabellen, sodass man zwei aufeinander bezogene Datasets in einem gemeinsamen Bericht darstellen kann.
  • Side-by-Side Chart & Listing – eine visuelle Variation des Dual Chart & Listing Designs.

Wählt man eine dieser Optionen aus, öffnet BIRT den betreffenden neuen Report im Eclipse Workspace und man kann mit dem Editieren beginnen. Wir wählen in unserem Beispiel MyFirstReport.

Abb. 3: Beispiele für Report-Designs und Templates
Data Sources und Data Sets

Bevor wir mit dem Design einer Reportvorlage beginnen können, müssen Anbindungen an benötigte Datenquellen und entsprechende Abfragen darauf erzeugt werden. BIRT-Berichte verwenden Data Sources, um sich mit einer Datenbank oder anderen Datenlieferanten zu verbinden. Den Zugriff auf die Daten übernimmt ein Data Set. Die Unterscheidung der beiden ist einfach: eine Data Source stellt die Verbindung zur Datenquelle her, ein Data Set definiert die Abfrage.

Eine Data Source lässt sich leicht erstellen. Falls das Fenster DATA EXPLORER noch nicht angezeigt wird, öffnet man es in Eclipse unter WINDOWS, SHOW VIEW und DATA EXPLORER. Im DATA EXPLORER wählt man den Ordner DATA SOURCES, öffnet das Kontextmenü mit einem Rechtsklick und wählt NEW DATA SOURCE aus. Für unser Beispiel wählen Sie bitte CLASSIC MODELS SAMPLE DATABASE aus der Liste aus, geben Sample als Data-Source-Namen ein und klicken FINISH. Die neue Data Source erscheint daraufhin im DATA EXPLORER unter DATA SOURCES. Um die Data Source zu modifizieren, reicht ein Doppelklick auf den betreffenden Namen im Ordner und der passende Editor wird gestartet. Die Beispiel-Data-Source, die auch im BIRT-Tutorial unter www.eclipse.org/birt/ verwendet wird, kann übrigens nicht verändert werden.

Data Sets in BIRT sind wiederverwendbar. Das bedeutet, dass man denselben Data Set mehrfach einsetzen kann. Zum Beispiel kann ein Data Set „Year-to-Date Sales“ (Verkäufe seit Jahresbeginn) auf dreierlei Weise angezeigt werden: nach Monaten, nach Verkäufern und als Diagramm. Mit BIRT reicht es, den Data Set einmal zu definieren. Erst im eigentlichen Berichtsteil wird bestimmt, in welcher Form die Daten dargestellt werden. Dazu lassen sich folgende Eigenschaften über den Property Editor definieren:

  • Binding-Data Set spezifiziert, für welche Report-Teile der Data Set verwendet werden soll.
  • Binding-Parameter gibt Daten an einen Data Set weiter. Man kann zum Beispiel einen Haupt/Detail-Unterreport generieren, indem man einen Data Set verwendet, der Daten vom Hauptbericht an den Unterbericht weiterreicht.
  • Sorting ist eine klassische Sortierungsfunktion, wie man sie aus Tabellenkalkulationen kennt.
  • Groups helfen bei der Anzeige von Untersummen und strukturieren Berichte visuell.
  • Highlights ermöglichen eine Bedingungs-abhängige Formatierung von Daten.
  • Filter bieten Auswahlbedingungen, die für eine bestimmte Darstellungsweise spezifisch sind. Zum Beispiel könnte eine Transaktionliste alle möglichen Transaktionen aufführen, oder durch die Filterfunktion in Umsätze und Erträge aufsplitten.

Auf dieser Grundlage kann nun ein Data Set erstellt und getestet werden. Dazu wählt man im DATA EXPLORER den Ordner DATA SETS, erstellt mit Rechtsklick ein neues und folgt den Dialogen bei Namensvergabe und Speicherung. Stellen Sie dabei bitte sicher, dass das Feld Data Source die eben erstellte Data Source Sample sowie Data Set Type den Eintrag SQL SELECT Query anzeigen.

Data Set Editor

Im Data Set Editor wird die eigentliche Abfrage eingegeben. Dazu bietet das Tool die folgenden Möglichkeiten:

  • Query zeigt das SQL SELECT Statement an. Hier kann die SQL-Abfrage erstellt und verändert werden. Sobal eine einfache Abfrage steht, kann ein WHERE-Clause hinzugefügt werden, die ausgewählten Spalten angepasst werden etc. Mit dem SQL-Editor können auch weiter vorberechnete Spalten (computed columns) eingefügt werden, die von der Datenbank-Engine errechnet werden sollen. Mit SQL ALIAS können sie auch frei benannt werden.
  • Computed Columns sind von BIRT berechnete Spalten und erscheinen im Bericht wie jede Standardspalte. Mit Javascript Expressions oder Java-Aufrufen kann erweiterte Geschäftslogik hinzugefügt werden.
  • Parameter können in SQL SELECT Statements enthalten sein, die Daten an die Abfrage weiterleiten. Sie werden in der Query mit dem SQL-Symbol „?“ gekennzeichnet. Auf dieser Seite können die Parameter benannt werden, Default-Werte festgelegt werden usw. Zwischen den Einträgen auf dieser Seite und den „?“-Symbolen der Query muss eine eins-zu-eins-Übereinstimmung bestehen.
  • Filter können innerhalb von BIRT auf die Daten angewendet werden und die zum Bericht weitergegebenen Daten eingrenzen. Das WHERE-Clause ist ebenfalls ein Filter, allerdings durch die Datenbank ausgeführt. Auf dieser Seite des Data Set Editor können zusätzliche Filter durch BIRT Scripting (Javascript) gesetzt werden.
Database Browser

Wenn Sie auf die Query-Seite wechseln, finden sie einen einfachen Datenbank-Browser vor. Wenn Sie die Sample Data Source expandieren, finden Sie die Schemata innerhalb dieser Datenbank vor. In diesem Fall gibt es nur eines: CLASSIC MODELS. Ein Klick darauf zeigt die in dieser Datenbank vorhandenen Tabellen, ein weiterer Klick auf eine Tabelle die darin befindlichen Spalten an. Per Drag & Drop können Sie eine Tabelle oder ihre Spalten dem SQL-Editor hinzufügen. Schlüsselbegriffe wie z.B. SELECT oder WHERE können jederzeit manuell eingegeben werden. Die Query für unser Beispiel ist sehr einfach:

SELECT customerName, contactLastName, contactFirstName, phone
FROM CUSTOMERS
WHERE COUNTRY='USA'

Wenn Sie den Data Set Editor offen haben, klicken Sie bitte auf PREVIEW RESULTS. Die Vorschauseite erscheint und zeigt die Namen der zuvor ausgewählten Spalten der Abfrage ganz oben, darunter werden die Datenzeilen mit den Kunden aus den USA aufgelistet. Bestätigen Sie bitte mit OK. Nach diesem Vorgang wird im Data Explorer mitsamt der Data Source einer neuen Data Set erscheinen. Er lässt sich bei Bedarf mit dem Editor verändern und testen.

Report-Layout und -Vorschau

Der Beispielbericht soll mit einer Liste von Kunden in einer Tabelle angezeigt werden. Das Template MyFirstReport, das zuvor ausgewählt wurde, hat die Grundstruktur für diese Tabelle erstellt und wartet jetzt auf weitere Detaileinträge. Daten lassen sich einfach per Drag & Drop aus dem Data Explorer in das Berichtsdesign ziehen. Wenn man eine Gruppierung vornehmen will, muss die Tabelle mit einem Data Set verbunden (assoziiert) werden. Dazu dient der Reiter BINDING in der Ansicht PROPERTY EDITOR.

In der „Palette“-Ansicht stellt BIRT eine Reihe von Berichtsobjekten zum Reportdesign bereit. Dazu gehören Gestaltungs- und Inhaltselemente wie Text, Label, Datenfelder, Bilder, Grids, Listen, Tabellen und Diagramme. Nachdem man den Bericht nach Belieben mit Daten gefüllt und verschiedene Anzeigeoptionen gewählt hat, kann das Layout mit der Preview-Funktion getestet werden. Dazu wählt man einfach die Preview-Seite aus. Auf dieser Grundlage kann man dann beurteilen, wie man den Bericht mit Farben, Titeln, Tabellengrößen und Diagrammen visuell ansprechend gestalten kann.

Actuate BIRT

Der Einsatz von Open Source in Unternehmensanwendungen ist naturgemäß nicht ganz ohne rechtliche und organisatorische Risiken. Mögliche Probleme sind Rechtsansprüche Dritter, zum Beispiel bei Copyrights oder Patenten für bestimmte Teile einer Software, und ein Mangel an Wartung und Support. Der BIRT-Initiator Actuate möchte diesen Bedenken und Hemmnissen begegnen, indem er parallel zum frei verfügbaren Eclipse BIRT Zusatzdienste anbietet. Actuate BIRT bietet die identische Funktionalität wie sein Pendant unter der Open Source Eclipse Public Licence (EPL). Hinzu kommt eine vereinfachte „One Button“-Installation, ein Lizensierungsmodell von Actuate, Wartung, Professional Services und Support. Diese Leistungen sind als Jahresabonnements in verschiedenen Paketen erhältlich. Die Lizenz- und Service-Pakete für Actuate BIRT sind:

  • Basic: Zwölf Monate unbeschränkter Zugang zu den Produkt-Releases von Actuate BIRT mit Verbesserungen und Wartungs-Updates.
  • Silver: Basic-Paket plus ein zwölfmonatiger Wartungsvertrag, der bis zu drei registrierten Personen 30 Tage Installations-Support, Zugang zur Actuate Knowledge Base und den Foren bietet. Außerdem können Probleme und Verbesserungsvorschläge über die Online Support Website zurückgemeldet werden.
  • Gold: Neben den Leistungen des Silver-Pakets enthält der Gold-Service das Recht für drei bis fünf Kontaktpersonen, den Actuate BIRT-Kundenservice unbegrenzt und innerhalb einer fest vereinbarten Reaktionszeit in Anspruch zunehmen.

Mehr Informationen zu Actuate BIRT unter www.actuate.com/birt.

Abb. 4: Sample Chart
Report Designer

Nachdem Sie sich mit BIRT vertraut gemacht haben und einen ersten Überblick über die Editier- und Vorschaufunktionen sowie Möglichkeiten des Report-Layouts haben, können Sie tiefer in fortgeschrittenere Themen einsteigen, wie zum Beispiel Scripting, selbsterstellte Data Access Extensions, komplexere Formatierung, ausgefeiltere Abfagen, Berichte mit mehreren Abschnitten, bedingte Formatierungen, erweiterte Datenobjekte etc. Hinweise hierzu finden Sie auf der BIRT-Homepage. Dort steht auch die Software zum kostenlosen Download bereit.

Thomas Hohmann ist Senior Sales Consultant beim Anbieter von Business Intelligence und Enterprise Reporting Software, Actuate, in Frankfurt am Main.

Geschrieben von
Thomas Hohmann
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.