PostgreSQL - Jak To Zrobić w Linux-ie: Sterownik PostgreSQL (Database Interface - DBI) dla Perl-a
Następna
Poprzednia
Spis treści
10. Sterownik PostgreSQL (Database Interface - DBI) dla Perl-a
10.1 Perl 5 - interfejs dla PostgreSQL
PERL to skrót oznaczający 'Practical Extraction and Report Language'.
Perl jest dostępny w dosłownie każdym systemie operacyjnym i na każdej
platformie sprzętowej świata.
Możesz użyć Perl-a na Windows95/NT, Apple Macintosh iMac, wszystkich odmianach
Unixa (Solaris, HPUX, AIX, Linux, Irix, SCO itd.), mainframe'ach MVS, dekstop
OS/2, OS/400, Amdahl UTS i wielu innych.
Perl działa NAWET na wielu mało popularnych, a nawet ogólnie
nieznanych systemach operacyjnych i sprzęcie!!
Nie bądź więc zaskoczony, jeśli zobaczysz perl-a działającego na bardzo
rzadko używanym systemie operacyjnym.
Możesz sobie wyobrazić olbrzymi rozmiar bazy użytkowników i developerów Perl-a.
Interfejs PostgreSQL-Perl został włączony do dystrybucji PostgreSQL. Zobacz
w katalogu src/pgsql_perl5.
Email kontaktowy Pgsql_perl5:
E.Mergl@bawue.de
Inne źródła z -
ftp://ftp.kciLink.com/pub/PostgresPerl-1.3.tar.gz
Strona domowa Perl-a:
http://www.perl.com/perl/index.html
Samouczek Perl-a, szukaj tytułu 'Tutorial' pod:
http://reference.perl.com/
FAQ Perl-a:
http://www.yahoo.com/Computers_and_Internet/Programming_Languages/Perl/
Graficzny interfejs użytkownika (GUI) dla Perl-a, Perl-Qt w wersji rpm:
ftp://ftp.redhat.com/pub/contrib/i386
i szukaj pliku PerlQt-1.06-1.i386.rpm
Graficzny interfejs użytkownika dla Perl-a, Perl-Qt:
http://www.accessone.com/~jql/perlqt.html
Graficzny interfejs użytkownika dla Perl-a, Perl-XForms:
ftp://ftp.redhat.com/pub/contrib/i386, szukaj pliku
Xforms4Perl-0.8.4-1.i386.rpm
Graficzny interfejs użytkownika dla Perl-a, Perl-Tk:
ftp://ftp.redhat.com/pub/contrib/i386
Narzędzia GUI dla Perl-a:
http://reference.perl.com/query.cgi?ui
Interfejsy bazodanowe dla Perl-a:
http://reference.perl.com/query.cgi?database
Translator programów w Perl-u na "C":
http://www.perl.com/CPAN-local/modules/by-module/B/
, szukaj pliku Compiler-a3.tar.gz
Translator skryptów powłoki Bourne'a na Perl:
http://www.perl.com/CPAN/authors/id/MERLYN/sh2perl-0.02.tar.gz
Translatory z awk (a2p) i sed (s2p) są dołączane do dystrybucji PERL.
Zobacz również grupy dyskusyjne poświęcone PERL-owi w hierarchii
comp.lang.perl.*
10.2 Perl - interfejs bazodanowy DBI
CZYM JEST DBI?
Interfejs bazodanowy Perl (DBI) jest interfejsem programowania aplikacji
(API - Application Programming Interface) dla języka Perl. Specyfikacja
Perl DBI API definiuje zestaw funkcji, zmiennnych i konwencji udostępniających
spójny interfejs bazodanowy niezależny od aktualnie używanej bazy danych.
Informacje do sekcji poświęconych DBI zostały wzięte z 'DBI FAQ',
którego autorem jest Alligator Descartes i są zamieszczone tu za jego zgodą.
Alligator Descartes Hermetica
descarte@hermetica.com
Sterownik DBI dla PostgreSQL: DBD-Pg-0.89
Sciągnij plik DBD-Pg-0.89.tar.gz z adresów podanych poniżej
DBD-Pg-0.89:
http://www.perl.com/CPAN/modules/by-module/DBD/
Pełne Archiwum Zasobów Perl-a (Comprehensive Perl Archive Network CPAN):
http://www.perl.com/CPAN
Lista sterowników DBI i stron poświęconych DBI:
http://www.hermetica.com/technologia/perl/DBI
Informacje na temat DBI:
http://www.fugue.com/dbi/
Główny serwer ftp:
ftp://ftp.demon.co.uk/pub/perl/db
Linki do różnych stron o DBI:
http://www-ccs.cs.umass.edu/db.html
Linki do różnych stron o DBI:
http://www.odmg.org/odmg93/updates_dbarry.html
Linki do różnych stron o DBI:
http://www.jcc.com/sql_stnd.html
Baza danych PostgreSQL:
http://www.postgresql.org
WYMAGANIA:
- skompiluj, przetestuj i zainstaluj Perl 5 (przynajmniej 5.002)
- skompiluj, przetestuj i zainstaluj moduł DBI (przynajmniej 0.89)
- skompiluj, przetestuj i zainstaluj PostgreSQL (przynajmniej 6.2)
Wsparcie techniczne dla DBI
Proszę wysyłać bug-reports do:
E.Mergl@bawue.de
Proszę dołączyć wyniki działania poleceń perl -v, perl -V
wersję PostgreSQL,
wersję DBD-Pg,
oraz wersję DBI
w bug-report.
Co to jest DBI, DBperl, Oraperl i *perl?
Zacytujmy Tima Bunce, projektanta i autora DBI:
"Interfejs bazodanowy Perl (DBI) jest interfejsem programowania aplikacji
(API - Application Programming Interface) dla języka Perl. Specyfikacja
Perl DBI API definiuje zestaw funkcji, zmiennnych i konwencji
udostępniających spójny interfejs bazodanowy niezależny od aktualnie
używanej bazy danych."
Mówiąc prostym językiem, interfejs DBI umożliwia użytkownikom "przezroczysty"
dostęp do wielu typów baz danych. Tak więc, jeśli podłączasz się do Oracle'a,
Informix'a, mSQL, Sybase, czy jakiejkolwiek innej bazy danych, nie musisz znać
mechanizmów działania warstwy 3GL. API zdefiniowane przez DBI będzie działać
na wszystkich tych typach baz danych.
Podobną korzyść osiągamy dzięki możliwości podłączenia się do dwóch różnych
baz danych różnych producentów przy pomocy tego samego skryptu w perl-u.
Chcę na przykład odczytać dane z bazy oraclowej i wstawić je do
Informixa przy pomocy jednego programu. Warstwa DBI umożliwia szybkie wykonanie
tego zadania.
Starszą nazwą specyfikacji DBI jest DBperl. W chwili obecnej jest zazwyczaj
używany do zaznaczenia modułów interfejsu bazodanowego perl4 takich jak
oraperl, isqlperl, ingperl i innych. Te interfejsy nie mają standardu API
i zazwyczaj nie są już wspierane.
Oto lista modułów DBperl wraz z ich odpowiednikami DBI i informacjami
dodatkowymi. Zapytania odnośnie sterowników DBI powinny być kierowane
bezpośrednio na e-mailową listę dystrybucyjną dbi-users.
Nazwa modułu Wymagana Baza D. Autor DBI
------------ ---------------- ----- ---
Sybperl Sybase Michael Peppler DBD::Sybase
<mpeppler@datamig.com>
http://www.mbay.net/~mpeppler
Oraperl Oracle 6 & 7 Kevin Stock DBD::Oracle
<dbi-users@fugue.com>
Ingperl Ingres Tim Bunce & DBD::Ingres
Ted Lemon
<dbi-users@fugue.com>
Interperl Interbase Buzz Moschetti DBD::Interbase
<buzz@bear.com>
Uniperl Unify 5.0 Rick Wargo Brak
<rickers@coe.drexel.edu>
Pgperl Postgres Igor Metz DBD::Pg
<metz@iam.unibe.ch>
Btreeperl NDBM John Conover SDBM?
<john@johncon.com>
Ctreeperl C-Tree John Conover Brak
<john@johncon.com>
Cisamperl Informix C-ISAM Mathias Koerber Brak
<mathias@unicorn.swi.com.sg>
Duaperl X.500 Directory Eric Douglas Brak
User Agent
Niektóre moduły DBI mają jednakże warstwy emulacyjne DBPerl, np. DBD::Oracle
jest dostarczana z warstwą emulacyjną Oraperl, która umożliwia uruchamianie
skryptów oraperl bez modyfikacji. Warstwa emulacyjna tłumaczy wywołania API
oraperl na wywołania DBI i wykonuje je poprzez uchwyt (switch) DBI.
Oto tablica przedstawiająca informacje o warstwie emulacyjnej:
Moduł Warstwa emulacyjna Stan
------ ------------------ ----
DBD::Oracle Oraperl Kompletna
DBD::Informix Isqlperl W trakcie rozwijania
DBD::Sybase Sybperl Działa? ( Potrzebna weryfikacja )
DBD::mSQL Msqlperl Wypuszczona eksperymentalnie z
DBD::mSQL-0.61
Oddzielnym przypadkiem jest emulacja Msqlperl. Msqlperl jest sterownikiem
perl5 dla baz danych mSQL, ale nie spełnia specyfikacji DBI. Zamiast niej
lepiej jest używać DBD::mSQL. Msqlperl można sciągnąć z CPAN:
http://www.perl.com/cgi-bin/cpan_mod?module=Msqlperl
Specyfikacje DBI
Istnieje kilka źródeł informacji o DBI.
Specyfikacja DBI
http://www.hermetica.com/technologia/perl/DBI/doc/dbispec
Pod tym adresem dostępne są dwie specyfikacje: nowa DBI Draft
Specification, która jest dokumentem zmieniającym się jak tylko
zespół developerów wypuści stabilny interfejs, oraz stara, historyczna
DBPerl DBI Specification, z której wyewoluował obecny interfejs DBI.
Drugi z tych dokumentów powinien być rozważany tylko w celach analiz
historycznych i nie powinien służyć ani jako podręcznik programowania
ani jako źródło informacji, na które należałoby się powoływać.
Jest to jednakże ciągle użyteczne źródło informacji odniesieniowych.
Dokumentacja POD
POD-y są fragmentami dokumentacji zaszytymi w programach perla,
dokumentującymi poszczególne moduły, dostarczającymi użytecznych
wiadomości dla programistów i innych osób je wykorzystujących.
POD dla DBI i sterowniki zaczynają być coraz bardziej banalne, a
dokumentacja dla tych modułów może być odczytywana przy pomocy niżej
wymienionych poleceń.
Specyfikacja DBI
POD dla Specyfikacji DBI może być odczytany przy pomocy polecenia
perldoc DBI
Oraperl
Użytkownicy warstwy emulacyjnej Oraperl wbudowanej w DBD::Oracle,
mogą dowiedzieć się jak programować z wykorzystaniem interfejsu
Oraperl przez wykonanie:
perldoc Oraperl
Spowoduje to wygenerowanie zaktualizowanej kopii oryginalnych stron
man-a napisanych przez Kevina Stocka dla perl4. Oraperl API jest tam
w pełni opisana i wytłumaczona.
DBD::mSQL
Użytkownicy modułu DBD::mSQL mogą przeczytać co nieco o wewnętrznych
funkcjach i właściwościach tego sterownika przez:
perldoc DBD::mSQL
FAQ (Frequently Asked Questions - Często Zadawane Pytania)
Odpowiedzi na często zadawane pytania również są dostępne jako
dokumentacja POD. Przeczytaj je przez:
perldoc DBI::FAQ
Może to być sposób bardzo wygodny dla osób nie podłączonych na stałe
do Internetu.
Ogólnie o POD
Ogólne informacje na temat sposobu pisania POD, oraz ich filozofii
można przeczytać tak:
perldoc perlpod
Użytkownicy z zainstalowanym modułem Tk mogą być zainteresowani
informacją, że istnieje czytnik POD bazujący na Tk, nazwany tkpod,
który potrafi sformatować POD do wygodnej dla człowieka postaci.
Drobiazgi i spostrzeżenia:
Kilka drobnych wycieczek w krainę DBI odbytych przez ludzi z list
dyskusyjnych DBI.
http://www.hermetica.com/technologia/perl/DBI/tidbits
``DBI -- The perl5 Database Interface''
Artykuł napisany przez Alligatora Descartes i Tima Bunce na temat
struktury DBI. Został opublikowany w 5 wydaniu "The Perl Journal".
Jest niesamowity. Idź i kup ten magazyn. W zasadzie możesz kupić
wszystkie jego wydania. Adres witryny "The Perl Journal" to:
http://www.tpj.com
``DBperl''
Ten artykuł został opublikowany w Listopadzie 1996 w "Dr. Dobbs Journal"
poświęconym DBperl.
``The Perl5 Database Interface''
Ta pozycja to ksiązka napisana przez Alligatora Descartes-a
i opublikowana przez O'Reilly and Associates.
Listy dyskusyjne
Istnieją trzy listy poświęcone DBI prowadzone przez Teda Lemona.
Subskrypcję można zamówić przez WWW na stronie:
Listy dyskusyjne
http://www.fugue.com/dbi
Listy, z których można skorzystać to:
dbi-announce
Jest to lista przeznaczona tylko dla zawiadomień i komunikatów.
Jeśli z jakiegoś powodu nie możesz się na nią zapisać przez WWW,
Wyślij na adres:
dbi-announce-request@fugue.com
maila o treści 'subscribe'
dbi-dev
Ta lista jest przeznaczona dla developerów omawiających pomysły
i rozwiązania dotyczące interfejsu DBI, API i mechanizmów sterowników.
Tylko do użytku developerów, lub zainteresowanych grup.
Jeśli z jakiegoś powodu nie możesz się na nią zapisać przez WWW,
Wyślij na adres:
dbi-dev-request@fugue.com
maila o treści 'subscribe'
dbi-users
Ta lista jest główną listą dyskusyjną wykorzystywaną dla zgłaszania
błędów, omawiania problemów i innych spraw.
Jeśli z jakiegoś powodu nie możesz się na nią zapisać przez WWW,
Wyślij na adres:
dbi-users-request@fugue.com
maila o treści 'subscribe'
Archiwa list dyskusyjnych
Archiwa amerykańskich list dyskusyjnych
http://outside.organic.com/mail-archives/dbi-users/
Archiwa europejskich list dyskusyjnych
http://www.rosat.mpe-garching.mpg.de/mailing-lists/PerlDB-Interest
Problemy z kompilacją, lub "Test się nie powiódł" ("It fails the test")
Jeśli uzyskujesz zrzuty pamięci ("core dump"), spróbuj użyć modułu
Devel::CoreStack do wygenerowania historii tego, co działo się na stosie
(stack trace) na podstawie zrzutu pamięci.
Devel::CoreStack można znaleźć w CPAN pod adresem:
http://www.perl.com/cgi-bin/cpan_mod?module=Devel::CoreStack
Wyślij na listę dbi-users otrzymane dane, podaj wersję modułu, wersję perla,
kod zwracający błąd (test cases), wersję systemu operacyjnego i inne stosowne
informacje. Im więcej informacji podasz, tym szybciej developerzy zlokalizują
błąd. Jeśli nic nie wyślesz, nie oczekuj wyników.
Czy DBI jest obsługiwane na platformach Windows 95 / NT?
Wersje (ports) DBI i DBD::Oracle Win32 są już standardowym elementem DBI, toteż
sciągnięta z Sieci wersja wyższa niż 0.81 powinna działać.
Możesz uzyskać dostęp do baz MS Access i SQL-Server z DBI przez ODBC.
Z DBI-0.79 (i późniejszymi) dostarczana jest eksperymentalna "warstwa
emulacyjna" dla modułu Win32::ODBC. Jest nazywana DBI::W32ODBC. Aby z niej
skorzystać potrzebny jest również moduł Win32::ODBC.
Win32 DBI
http://www.hermetica.com/technologia/perl/DBI/win32
Win32 ODBC
http://www.roth.net
Czym jest DBM? I dlaczego zamiast niego używać DBI ?
UNIX na początku został "pobłogosławiony" prostymi "bazami danych" opartymi
na plikach, zwanymi systemem dbm. dbm pozwala przechowywać dane w plikach
i szybko uzyskiwać do nich dostęp. Ma to jedna poważne wady.
Blokowanie plików
System dbm nie pozwalał zbyt mocno wykorzystać możliwości, jakie
niesie ze sobą blokowanie plików, ani też możliwości korygowania problemów
wynikających z równoległego zapisywania danych [ do bazy ].
Wymuszone struktury danych
System dbm pozwala na zastosowanie tylko jednej ustalonej struktury danych:
pary klucz-wartość. Wartość może być co prawda złożonym obiektem,
ale klucz musi być unikatowy. Jest to duże ograniczenie funkcjonalności
systemów wykorzystujących dbm.
Z drugiej strony, systemy dbm spełniają wymagania użytkowników
wykorzystującychproste zbiory danych i ograniczone zasoby, gdyż są szybkie,
silne i szczególniedobrze przetestowane. Moduły perla umożliwiające dostęp
do systemów wykorzystujących dbm są już obecnie zintegrowane w podstawowej
dystrybucji Perlprzez moduł AnyDBM_File.
Podsumowując, DBM jest idealnym rozwiązaniem dla baz
tylko do odczytu, oraz dla małych lub prostych
zbiorów danych. Jednakże dla mocniejszych i skalowalnych zbiorów danych,
nie mówiąc już o mocnym transakcyjnym blokowaniu, zalecane jest stosowanie
DBI.
Czy < tu wstaw cechę > jest obsługiwana przez DBI?
Jeśli założymy, że cecha, o którą pytasz jest niestandardową cechą
specyficznądla konkretnej bazy, to odpowiedź brzmi "Nie".
DBI odzwierciedla podstawowy zbiór API działający z większością zbiorów
danych i nie ma żadnych cech specyficznych dla jakiejś konkretnej bazy.
Oczywiście, autorzy sterowników mogą, jeśli zapragną, dołączyć wywołania
funkcjispecyficznych dla jakiejś bazy przez metody func zdefiniowane
w DBI API.
Osoby piszące skrypty powinny brać jednak pod uwagę, że wykorzystanie
funkcji udostępnionych przez metody func prawdopodobnie nie będzie
przenaszalnemiędzy bazami danych.
Czy mozna wykorzystać DBI do pisania skryptów CGI?
Jednym słowem - tak! DBI jest bardzo użyteczne przy pisaniu skryptów CGI.
W zasadzie skrypty CGI stanowią jedno z dwóch głównych zastosowań DBI.
DBI umożliwia programistom CGI udostępnienie użytkownikom baz danych
dostępnych przez WWW. Daje im to niesamowitą ilość uporządkowanych danych
do zabawy.
DBI umożliwia również upgrade serwera bazodanowego w sytuacji, gdy ruch
w sieci jest zbyt duży, by stara wersja mogła sobie z nim poradzić.
Wszystko może się odbyć niezauważalnie dla użytkownika, bez potrzeby
modyfikowania skryptów CGI.
W jaki sposób uzyskać szybsze połączenia z DBD Oracle i CGI?
W celu obsłużenia żądań klientów, demon http Apache zarządza zestawem
procesów potomnych httpd.
Przy użyciu modułu Apache mod_perl napisanego przez Douga MacEacherna,
interpreter perl-a zostaje osadzony z potomkami httpd. CGI, DBD i inne
Twoje ulubione moduły mogą zostać załadowane przy starcie każdego procesu
potomnego. Nie zostaną przeładowane, dopóki nie zmienią się na dysku.
Jeśli chcesz uzyskać więcej informacji na temat Apache, zobacz strony Projektu Apache:
Strony Projektu Apache
http://www.apache.org
Moduł Mod_perl
http://www.perl.com/cgi-bin/cpan_mod?module=mod_perl
`Kiedy uruchamiam skrypt perla z linii poleceń, działa, ale gdy zrobię to samo pod kontrolą httpd, sypie się. Dlaczego?'
Zazwyczaj najczęstszą przyczyną takiego działania jest fakt, że użytkownik
(z którego id uruchamiasz skrypt w linii poleceń) ma poprawnie ustawione
zmienne środowiska, w przypadku DBD::Oracle są to np.$ORACLE_HOME,
$ORACLE_SID lub TWO_TASK.
Proces httpd zazwyczaj działa z id użytkownika nobody, co powoduje, że
zmienne środowiska nie są ustawione. Żaden skrypt uruchamiany w takiej
sytuacji nie ma szans na poprawne działanie.
Aby rozwiązać ten problem, ustawiaj zmienne środowiska Twojej bazy w bloku
BEGIN ( ) na początku skryptu. Powinno to załatwić sprawę.
Powinieneś również sprawdzić logi swojego serwera httpd (na wszelki
wypadek), a także ``Rozwiązywanie problemów z Perlem / CGI (dla opornych)''
(``Idiot's Guide To Solving Perl / CGI Problems'') i ``Programowanie CGI w
Perlu, FAQ'' (``Perl CGI Programming FAQ''). Jest bardzo mało prawdopodobne,
że błąd jest związany z DBI. Przeczytaj dokładnie OBA te dokumenty!
Rozwiązywanie problemów z Perl / CGI (dla opornych)
http://www.perl.com/perl/faq/index.html
Czy można wykorzystać wielowątkowość w DBI?
Jak na razie, nie. Perl nie udostępnia wielowątkowości. Jednakże ma być ona
częścią podstawowej dystrybucji Perla w wersji 5.005. Spowoduje to, że
DBI będzie zapewniała wielowątkowość wkróce potem.
Kilka przykładów kodu OCI dla Oracle, który posiada wielowątkowe instrukcje
SELECT, znajdziesz w:
http://www.hermetica.com/technologia/oracle/oci/orathreads.tar.gz
'W jaki sposób mogę wywoływać w DBI procedury przechowywane (stored procedure)?'
Zakładając, że stworzyłeś procedurę przechowywaną w docelowym systemie,
np. w bazie Oracle, możesz użyć $dbh->do aby od razu ją wywołać.
Na przykład:
$dbh->do( "BEGIN MojaProcedura END" );
Jak mogę w DBI pobrać wartości zwracane przez procedurę przechowywaną?
Pamiętaj o obsłudze błędów!
$sth = $dbh->prepare( "BEGIN foo(:1, :2, :3); END;" );
$sth->bind_param(1, $a);
$sth->bind_param_inout(2, \$path, 2000);
$sth->bind_param_inout(3, \$success, 2000);
$sth->execute;
W jaki sposób mogę w DBI utworzyć lub skasować bazę danych?
Tworzenie i usuwanie bazy danych to pojęcia zbyt abstrakcyjne, aby były
obsługiwane przez DBI. Na przykład Oracle w ogóle nie obsługuje idei
kasowania bazy danych! Również w Oracle'u serwer bazy danych w zasadzie
jest bazą danych, podczas gdy w mSQL serwer może spokojnie działać bez
stworzonej na nim bazy. Problemy te są zbyt nieporównywalne, aby je
próbować rozwiązać. Niektóre sterowniki mimo to obsługują tworzenie
i kasowanie bazy prywatnymi metodami func (private func method).
Powinieneś sprawdzić dokumentację sterowników, których używasz, aby
dowiedzieć się czy obsługują ten mechanizm.
W jaki sposób DBI obsługuje wartości NULL?
Standard DBI opisuje NULLe jako wartości niezdefiniowane (undef).
Wartości NULL ogą być wstawiane do bazy jako NULL, na przykład:
$rv = $dbh->do( "INSERT INTO table VALUES( NULL )" );
ale kiedy są zwracane przez zapytanie, muszą być testowane jako undef.
To jest standard dla wszystkich sterowników.
Czym są te metody func?
Metody func zostały zdefiniowane w DBI jako punkt wejściowy do
wykorzystywania specyficznych możliwości konkretnej bazy danych, np.
umożliwienia tworzenia lub kasowania baz danych. Wywoływanie tych
specyficznych dla danego sterownika funkcji jest proste, na przykład,
aby wywołać jednoargumentową metodę createDatabase, napisalibyśmy:
$rv = $dbh->func( 'argument', 'createDatabase' );
Powinniśmy jednak pamiętać, że metody func nie są przenaszalne między
bazami danych.
Komercyjne wsparcie i szkolenie
Interfejs bazodanowy Perl5 jest oprogramowaniem darmowym. Przychodzi
BEZ JAKIEJKOLWIEK GWARANCJI. Jednakże są organizacje udostępniające
zarówno wsparcie techniczne, jak i szkolenia programowania DBI.
PERL CLINIC :
Perl Clinic może udostępnić komercyjne wsparcie Perla, DBI, DBD::Oracle
oraz Oraperl. Wsparcie jest udostępniane przez firmę, w której pracuje
Tim Bunce, autor DBI. Więcej informacji znajdziesz na ich stronach:
http://www.perl.co.uk/tpc
Następna
Poprzednia
Spis treści