• Nie Znaleziono Wyników

OPIS ZASTOSOWANYCH TECHNOLOGII

N/A
N/A
Protected

Academic year: 2022

Share "OPIS ZASTOSOWANYCH TECHNOLOGII"

Copied!
23
0
0

Pełen tekst

(1)

OPIS ZASTOSOWANYCH TECHNOLOGII

REGIONALNY SYSTEM BIULETYNÓW INFORMACJI PUBLICZNEJ dla

URZĘDU MARSZAŁKOWSKIEGO WOJEWÓDZTWA MAŁOPOLSKIEGO

Gdynia, marzec 2013

(2)

Metryka

Nazwa projektu Dostarczenie licencji na oprogramowanie oraz wykonanie aplikacji wraz z jej wdrożeniem, szkolenie oraz przeniesienie określonych danych z obecnego Cyfrowego Urzędu oraz Biuletynu Informacji Publicznej

Zamawiający Województwo Małopolskie

Wykonawca MADKOM SA

Produkt Opis zastosowanych technologii

Opis Dokument opisujący technologie zastosowane w regionalnym systemie Biuletynów Informacji Publicznej

Autor Zespół analiz

Plik Liczba stron 11

Historia dokumentu

Edycja i rewizja

Data wydania

Opis Akcja (*) Rozdziały

(**)

Autorzy

1 12.03.2013 Stworzenie dokumentu N W Zespół analiz

2 27.03.2013 Aktualizacja dokumentu Z 2 Zespół analiz

* Akcje: W = Wstawienie, Z = Zmiana, We = Weryfikacja, N = Nowy

** Rozdziały: W = Wszystkie

Akceptacja Zatwierdził

……… ……….

(data i podpis) (data i podpis)

(3)

Spis treści

1. Cel dokumentu ... 4

2. Opis zastosowanych technologii... 4

2.1. SQL ... 4

2.2. NoSQL ... 5

2.3. JavaScript ... 6

2.4. Java ... 6

2.5. PHP ... 7

2.6. Perl... 7

2.7. LVS ... 7

2.8. HTML ... 7

2.9. XML ... 9

2.10. Ajax ... 11

(4)

1. Cel dokumentu

Niniejszy dokument opisuje zastosowane technologie oprogramowania Regionalnego Systemu Biuletynów Informacji Publicznej Województwa Małopolskiego.

Podstawą opracowania niniejszego dokumentu jest umowa nr IXA/424/RG/12 z dnia 26.06.2012 na

„Dostarczenie licencji na oprogramowanie oraz wykonanie aplikacji wraz z jej wdrożeniem, szkolenie oraz przeniesienie określonych danych z obecnego Cyfrowego Urzędu oraz Biuletynu Informacji Publicznej” zawarta pomiędzy Wykonawcą – firmą Madkom SA z siedzibą w Gdyni, Aleja Zwycięstwa 96/98, 84-451 Gdynia, a Zamawiającym – Województwem Małopolskim z siedzibą w Krakowie, ul.

Basztowa 22, 31-156 Kraków.

2. Opis zastosowanych technologii.

2.1. SQL

Strukturalny język zapytań używany do tworzenia, modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych.

Język SQL jest językiem deklaratywnym. Decyzję o sposobie przechowywania i pobrania danych pozostawia się systemowi zarządzania bazą danych (DBMS). Stał się standardem w komunikacji z serwerami relacyjnych baz danych. Wiele współczesnych systemów relacyjnych baz danych używa do komunikacji z użytkownikiem SQL, dlatego potocznie mówi się, że korzystanie z relacyjnych baz danych to korzystanie z SQL-a.

Produkty związane z relacyjnymi bazami danych to nie tylko serwery. Sam serwer określa się często takimi nazwami jak „back end”, „engine”, czy też „motor/silnik bazy danych”. Przechowuje on dane oraz zapewnia ich pobieranie i aktualizacje w odpowiedzi na pobierane instrukcje w SQL-u.

Uzupełnieniem serwera jest zazwyczaj „front end”, „oprogramowanie pośredniczące” czy też

„fronton” – narzędzia upraszczające komunikację z serwerem i wyposażone w mechanizmy pozwalające wykorzystać pobrane dane. Należą do nich mechanizmy generowania i obsługi formularzy oraz raportów, języki czwartej generacji (4GL), graficzne języki zapytań, narzędzia konstrukcyjne użytkownika, oprogramowanie do prezentacji multimedialnych, systemy tworzenia hipertekstu, systemy CAD/CAM, arkusze kalkulacyjne, jak również interfejsy dostępu bezpośredniego.

Wszystkie one wykorzystują do komunikacji z serwerem i wykonywania za jego pośrednictwem różnych operacji język SQL. Serwer odpowiada za przechowywanie, porządkowanie i pobieranie danych, zapewnia ich integralność, bezpieczeństwo oraz zabezpiecza przed ewentualnymi konfliktami między użytkownikami.

Użycie SQL, zgodnie z jego nazwą, polega na zadawaniu zapytań do bazy danych. Zapytania można zaliczyć do jednego z czterech głównych podzbiorów:

• SQL DML (ang. Data Manipulation Language – „język manipulacji danymi”),

• SQL DDL (ang. Data Definition Language – „język definicji danych”),

• SQL DCL (ang. Data Control Language – „język kontroli nad danymi”).

• SQL DQL (ang. Data Query Language – „język definiowania zapytań”).

Instrukcje SQL w obrębie zapytań tradycyjnie zapisywane są wielkimi literami, jednak nie jest to wymóg. Każde zapytanie w SQL-u musi kończyć się znakiem średnika (;).

(5)

Dodatkowo, niektóre programy do łączenia się z silnikiem bazy danych (np. psql w przypadku PostgreSQL), używają swoich własnych instrukcji, spoza standardu SQL, które służą np. do połączenia się z bazą, wyświetlenia dokumentacji itp.

• DML (Data Manipulation Language) służy do wykonywania operacji na danych – do ich umieszczania w bazie, kasowania, przeglądania oraz dokonywania zmian. Najważniejsze polecenia z tego zbioru to:

o INSERT – umieszczenie danych w bazie, o UPDATE – zmiana danych,

o DELETE – usunięcie danych z bazy.

Dane tekstowe muszą być zawsze ujęte w znaki pojedynczego cudzysłowu (').

• DDL - dzięki DDL (Data Definition Language) można operować na strukturach, w których dane są przechowywane – czyli np. dodawać, zmieniać i kasować tabele lub bazy. Najważniejsze polecenia tej grupy to:

o CREATE – utworzenie struktury (bazy, tabeli, indeksu itp.), o DROP – usunięcie struktury,

o ALTER – zmiana struktury (dodanie kolumny do tabeli, zmiana typu danych w kolumnie tabeli).

• DCL - (Data Control La nguage) ma zastosowanie do nadawania uprawnień do obiektów bazodanowych. Najważniejsze polecenia w tej grupie to:

o GRANT - służące do nadawania uprawnień do pojedynczych obiektów lub globalnie konkretnemu użytkownikowi,

o REVOKE – służące do odbierania wskazanych uprawnień konkretnemu użytkownikowi,

o DENY.

• DQL - (Data Query Language) to język formułowania zapytań do bazy danych. W zakres tego języka wchodzi jedno polecenie - SELECT. Często SELECT traktuje się jako część języka DML, ale to podejście nie wydaje się właściwe, ponieważ DML z definicji służy do manipulowania danymi - ich tworzenia, usuwania i uaktualniania.

2.2. NoSQL

Systemy zarządzania bazami danych, które nie opierają się na tradycyjnym modelu relacyjnym. Dane w nich przechowywane nie wymagają ściśle określonych schematów (tabel), zwykle nie używają operacji złączeń i umożliwiają łatwe skalowanie w poziomie. Ze względu na m. in. brak sztywnego schematu bazy danych, sporą elastyczność, mniej problemów z mapowaniem danych w bazie do obiektów zdefiniowanych w kodzie, taki model bazy danych jest niezwykle szybki (zarówno jeśli chodzi o zapis jak i o odczyt danych). Podejście NoSQL jest rozwiązaniem problemu dynamicznego wzrostu ilości danych, jest to główne przeznaczenie tego tzpu baz danych.

Główne założenia:

• rezygnacja z wielu elementów baz relacyjnych. Duża liczba złączen tabel powoduje zdecydowany spadek wydajności, a ścisły schemat bazy danych nie zawsze bywa zaletą, gdyż wiele danych nie ma określonej struktury. Postulaty ACID (Atomicity – atomowość, Consistency – spójność, Isolation – izolacja, Durability – trwałość). Uznano za zbyt restrykcyjne,

• zmniejszenie znaczenia schematów danych. Wg założeń NoSQL uwaga powinna być skupiona najpierw na danych, a dopiero potem na schematach,

• zmiana podejścia w kwestii awarii. W przypadku, gdy jeden z elementów systemów zostanie uszkodzony – reszta musi działać,

(6)

• łatwe do wprowadzenia i przezroczyste dla aplikacji (logiki biznesowej) skalowanie poziome.

Wszystkie problemy ze skalowaniem powinny być rozwiązywane na poziomie zasobów serwera.

2.3. JavaScript

Skryptowy język programowania, stworzony przez firmę Netscape. Najczęściej spotykanym zastosowaniem języka JavaScript są strony WWW. Skrypty służą najczęściej do zapewnienia interaktywności poprzez reagowanie na zdarzenia, sprawdzania poprawności formularzy lub budowania elementów nawigacyjnych. W języku JavaScript można także pisać pełnoprawne aplikacje. Fundacja Mozilla udostępnia środowisko złożone z technologii takich jak XUL, XBL, XPCOM oraz JSLib. Umożliwiają one tworzenie korzystających z zasobów systemowych aplikacji o graficznym interfejsie użytkownika dopasowującym się do danej platformy.

Wszystkie implementacje JavaScriptu dostępne w przeglądarkach internetowych dostarczają obiektów reprezentujących drzewo dokumentu. Mogą także umożliwiać tworzenie ciasteczek, manipulowanie oknami przeglądarki, wyświetlanie prostych okien dialogowych, pobieranie informacji o przeglądarce, zarządzanie jej pluginami oraz arkuszami stylów. Reagują także na zdarzenia wywoływane w interfejsie.

2.4. Java

Obiektowy język programowania stworzony przez grupę roboczą pod kierunkiem Jamesa Goslinga z firmy Sun Microsystems. Java jest językiem tworzenia programów źródłowych kompilowanych do kodu bajtowego, czyli postaci wykonywanej przez maszynę wirtualną. Jej podstawowe koncepcje zostały przejęte z języka Smalltalk (maszyna wirtualna, garbage collection) oraz z języka C++ (duża część składni i słów kluczowych). Wykorzystany do kontrolki podpisu elektronicznego.

Główne koncepcje:

• obiektowość - Java jest silnie ukierunkowana na obiektowość. Wszelkie dane i akcje na nich podejmowane są pogrupowane w klasy obiektów. O obiekcie można myśleć jako o samoistnej części programu, która może przyjmować określone stany i ma określone zachowania, które mogą zmieniać te stany bądź przesyłać dane do innych obiektów.

Wyjątkiem od całkowitej obiektowości (jak np. w Smalltalku) są typy proste (int, float itp.),

• dziedziczenie - w Javie wszystkie obiekty są pochodną obiektu nadrzędnego (jego klasa nazywa się po prostu Object), z którego dziedziczą podstawowe zachowania i właściwości.

Dzięki temu wszystkie mają wspólny podzbiór podstawowych możliwości, takich jak ich:

identyfikacja, porównywanie, kopiowanie, niszczenie czy wsparcie dla programowania współbieżnego. Java umożliwia jedynie dziedziczenie jednobazowe, a więc wyłącznie jedna klasa może przekazać swoje właściwości i operacje jako podstawę do rozszerzania ich o dodatkowe możliwości. Wielodziedziczenie zrealizowane zostało za pomocą interfejsów oraz podklas,

• niezależność od architektury - kod źródłowy programów pisanych w Javie kompiluje się do kodu pośredniego. Powstały kod jest niezależny od systemu operacyjnego i procesora, a wykonuje go tzw. wirtualna maszyna Javy, która (między innymi) tłumaczy kod uniwersalny na kod dostosowany do specyfiki konkretnego systemu operacyjnego i procesora.

• sieciowość i obsługa programowania rozproszonego - dzięki wykorzystaniu reguł obiektowości, Java nie widzi różnicy między danymi płynącymi z pliku lokalnego a danymi z pliku dostępnego przez HTTP czy FTP. Biblioteki Javy udostępniają wyspecjalizowane funkcje umożliwiające programowanie rozproszone – zarówno między aplikacjami Javy (RMI) jak i między aplikacją Javy a aplikacjami napisanymi w innych językach (CORBA, usługi sieciowe).

(7)

Inne biblioteki udostępniają możliwość pisania aplikacji uruchamianych w przeglądarkach internetowych (aplety Javy) oraz aplikacji działających ciągle po stronie serwera (serwlety).

2.5. PHP

PHP jest najczęściej stosowany do tworzenia skryptów po stronie serwera WWW, ale może być on również używany do przetwarzania danych z poziomu wiersza poleceń, a nawet do pisania programów pracujących w trybie graficznym (np. za pomocą biblioteki GTK+, używając rozszerzenia PHP-GTK). Implementacja PHP wraz z serwerem WWW Apache oraz serwerem baz danych MySQL określana jest jako platforma AMP (w środowisku Linux – LAMP, w Windows – WAMP). Ponadto PHP można uruchomić na serwerze IIS (Windows) oraz w chmurze Windows Azure.

Cała funkcjonalność PHP zawarta jest w czterech zbiorach modułów różniących się od siebie dostępnością dla programisty:

• moduły jądra

o część silnika PHP; zawsze aktywne.

• moduły oficjalne

o element każdej dystrybucji PHP; aktywowane ręcznie przez administratora serwera.

• repozytorium PECL

o darmowe moduły o otwartym źródle tworzone przez programistów z całego świata, przeznaczone do samodzielnej kompilacji. Począwszy od wydania PHP 5 do PECL przeniesionych zostało wiele wcześniejszych modułów oficjalnych, najczęściej tych niestabilnych lub rzadko używanych.

• repozytorium PEAR

o zbiór realizujący typowe zadania klas o ujednoliconej budowie.

2.6. Perl

Interpretowany język programowania autorstwa Larry'ego Walla początkowo przeznaczony głównie do pracy z danymi tekstowymi, obecnie używany do wielu innych zastosowań. Wzorowany na takich językach jak C, skryptowe: sed, awk i sh oraz na wielu innych. Perl jest dostępny dla wielu systemów operacyjnych, lecz jego naturalne środowisko to Unix i jego pochodne. Chociaż Perl posiada większość cech języka interpretowanego, nie wykonuje ściśle każdego wiersza kodu źródłowego po kolei. Program jest najpierw kompilowany do kodu pośredniego (podobnie jak Java); jednocześnie dokonywana jest jego optymalizacja. Możliwe jest skompilowanie programu do kodu pośredniego i używanie go zamiast postaci źródłowej, jednak nadal konieczny jest interpreter – program wykonujący.

2.7. LVS

Wysoko skalowalny serwer zbudowany na klastrze fizycznych serwerów, z usługą równoważenia obciążenia (load balancer) przeznaczony dla systemów Linux. Architektura klastru w pełni przezroczysta dla użytkownika końcowego.

2.8. HTML

Hipertekstowy język znaczników, obecnie szeroko wykorzystywany do tworzenia stron internetowych. HTML pozwala opisać strukturę informacji zawartych wewnątrz strony internetowej, nadając znaczenie poszczególnym fragmentom tekstu – formując hiperłącza, akapity, nagłówki, listy – oraz osadza w tekście dokumentu obiekty plikowe np. multimedia bądź elementy baz danych np.

interaktywne formularze danych.

(8)

HTML umożliwia określenie wyglądu dokumentu w przeglądarce internetowej. Do szczegółowego opisu formatowania akapitów, nagłówków, użytych czcionek i kolorów, zalecane jest wykorzystywanie kaskadowych arkuszy stylów.

W składni HTML wykorzystuje się pary znaczników umieszczone w nawiasach ostrokątnych, np.

<title> i </title> lub <h1> i </h1>.

HTML pozwala również na osadzanie ciągów instrukcji języków skryptowych, umieszczonych pomiędzy znacznikami <script> i </script>

Należy nadmienić, że HTML, będąc językiem znaczników, nie jest zaliczany do języków programowania – w jego składni nie przewidziano wyrażeń obliczeniowych, warunkowych czy iteracyjnych.

Ważną cechą HTML, która przyczyniła się do popularności systemu WWW oraz Internetu, jest niezależność od systemu operacyjnego i wykorzystywanego sprzętu komputerowego.

Komponenty języka HTML:

• znaczniki (tagi) - stanowią podstawowy komponent języka HTML. Charakteryzują je dwie cechy: atrybuty i zawartość. Każdy atrybut i zawartość musi spełniać określone wymagania, aby dokument został poprawnie zwalidowany pod kątem zgodności ze standardem. Znacznik zwykle rozpoczyna się znacznikiem otwierającym (np. <nazwa-znacznika>), a kończy znacznikiem zamykającym (np. </nazwa-znacznika>). Atrybuty elementu są zawarte w znaczniku otwierającym (po nazwie znacznika), natomiast zawartość umieszczana jest pomiędzy znacznikiem otwierającym i zamykającym. (np. <nazwa-znacznika atrybut="wartość">zawartość</nazwa-znacznika>). Niektóre elementy, np. <br>, nie

posiadają zawartości, a także znacznika zamykającego.

W nomenklaturze polskiej, dotyczącej języka HTML, słowa element używa się do określenia grupy:

o znacznik otwierający, o atrybuty,

o zawartość,

o znacznik zamykający,

• atrybuty - większość atrybutów elementów składa się z par nazwa-wartość, rozdzielonych znakiem "=", zawartych w znaczniku otwierającym elementu, po jego nazwie. Wartość może być zawarta w pojedynczych lub podwójnych cudzysłowach. Przy niektórych wartościach cudzysłowy mogą być pominięte (tylko w specyfikacji HTML, nie XHTML), jednak nie jest to zalecane, a wręcz praktyka taka uznana jest na niebezpieczną. W przeciwieństwie do atrybutów w postaci par nazwa-wartość istnieją atrybuty mające wpływ na element poprzez samo ich zawarcie w znaczniku otwierającym (np. ismap atrybut dla znacznika img).

Znaczna część elementów może posiadać standardowe dla znaczników atrybuty: id, class, style, title, a także atrybuty związane z językiem lang i dir.

Atrybut id nadaje elementowi unikatowy identyfikator. Może on zostać użyty przez arkusze stylów do sprecyzowania wyglądu tego elementu lub przez skrypty np. do zmiany jego zawartości. Atrybut class służy do sklasyfikowania elementów dla celów prezentacyjnych.

Dokument HTML lub zbiór takich dokumentów może używać klasy class="stopka", sugerując, że powinny być one wyświetlone na dole strony w postaci stopki. Elementy posiadające taką klasę mogą otrzymać styl, dzięki któremu zamiast wyświetlać się w miejscu występowania w kodzie HTML, będą zaprezentowane na dole strony w postaci stopki.

Autor może użyć znacznika style, aby nadać styl konkretnemu elementowi w kodzie HTML.

Dobrą praktyką jest jednak nadanie elementowi unikatowego identyfikatora id, odnosząc się prezentacji tego znacznika w arkuszu stylów. Czasem jest to jednak nieporęczne podczas

(9)

szybkiego testowania wyglądu elementów. Atrybutu title używa się w celu dodania do elementu informacji tekstowej. W wielu przypadkach zawartość atrybutu title wyświetlana jest w postaci podpowiedzi (tooltip), pojawiającej się na ekranie po najechaniu myszą na dany element,

• encje i referencje znakowe - począwszy od wersji 4.0, HTML definiuje listę 252 encji oraz 1114050 symboli znakowych, pozwalających na zapisanie określonych znaków za pomocą specjalnych stałych. Niektóre znaki można również zapisać dosłownie. Znak wprowadzony dosłownie i jego odpowiednik w postaci określonej stałej uznawane są za równoważne i są identycznie renderowane. Zdolność alternatywnego zapisu znaków specjalnych "<" i "&"

(zapisywanych odpowiednio jako &lt; i &amp;), umożliwia ich interpretację jako zwykłych znaków, zamiast traktowania ich jako istotnych elementów składni języka. Przykładowo, dosłownie zapisany znak "<" wskazuje na początek znacznika otwierającego, a "&" wskazuje na rozpoczęcie ciągu znaków, mającego być zinterpretowanym jako encja lub symbol (referencja znakowa). Zapisanie tego znaku jako "&amp;" lub "&#x26;" lub "&#38;" pozwala na użycie "&" w wartości elementu lub wartości atrybutu. Znak podwójnego cudzysłowu, ", użyty w wartości atrybutu, także musi zostać zapisany jako "&quot;" lub "&#x22;" lub

"&#34;", gdyż wartość atrybutu sama jest opatrzona z obu stron właśnie takimi cudzysłowami (wprowadzonymi do kodu dosłownie). Ponieważ autorzy stron często zapominają o używaniu stałych, przeglądarki stały się pod tym względem bardzo tolerancyjne, traktując znaki wprowadzone dosłownie jako kod, tylko w przypadkach, gdy dalszy ciąg kodu wskazuje na użycie tych znaków jako elementów składni języka.

Alternatywnego zapisu znaków (zwanego także ucieczką, ang. escaping) używa się do wprowadzania symboli, których nie da się łatwo wpisać dosłownie z klawiatury. Np. symbol

"é", wykorzystywany standardowo tylko w klawiaturach zachodnioeuropejskich, może być zapisany jako encja &eacute; lub jako referencja znakowa &#233; lub &#xE9;. Znaki zawarte w referencjach (czyli "&", ";", litery w słowie "eacute" itd.) są dostępne na wszystkich klawiaturach i we wszystkich kodowaniach znaków, podczas, gdy znak "é" – nie,

• typy danych - HTML definiuje kilka typów danych, wprowadzanych jako wartości elementów lub atrybutów. Są to m.in. skrypty (script data), dane arkuszy stylów (stylesheet data), identyfikatory, nazwy, adresy URI, liczby, jednostki miary długości, języki, deskryptory mediów, kolory, kodowania znaków, data i czas, itp.,

• deklaracja typu dokumentu - aby uaktywnić definicję typu dokumentu (DTD) do celów poprawnej walidacji utworzonej strony, a także w celu uniknięcia działania przeglądarek w trybie quirks, dokument powinien rozpoczynać się deklaracją typu dokumentu (nieformalnie DOCTYPE). DTD, do którego odwołuje się sekcja DOCTYPE, zawiera gramatykę i zasady wykorzystywania znaczników w dokumencie podporządkowanemu określonemu DTD.

Większość graficznych przeglądarek korzysta z sekcji DOCTYPE, a także innych dodatkowych informacji, warunkując tryb renderowania danej strony.

2.9. XML

Uniwersalny język formalny przeznaczony do reprezentowania różnych danych w strukturalizowany sposób.

XML jest niezależny od platformy, co umożliwia łatwą wymianę dokumentów pomiędzy heterogenicznymi (różnymi) systemami i znacząco przyczyniło się do popularności tego języka w dobie Internetu. XML jest standardem rekomendowanym oraz specyfikowanym przez organizację W3C.

(10)

Mówimy o dokumencie, że jest poprawny składniowo (ang. well-formed), jeżeli jest zgodny z regułami składni XML. Reguły te obejmują m.in. konieczność domykania wszystkich znaczników.

Dokument niepoprawny składniowo nie może być przetworzony przez parser XML.

Mówimy o dokumencie, że jest poprawny strukturalnie (ang. valid), jeżeli jest zgodny z definicją dokumentu, tzn. dodatkowymi regułami określonymi przez użytkownika. Do precyzowania tych reguł służą specjalne języki. Najpopularniejszymi są DTD, XML Schema.

Poprawny składniowo (ang. well-formed) dokument XML powinien być tworzony zgodnie z kilkoma zasadami:

• powinien zawierać deklarację XML, która musi być umieszczona na samym początku pliku (nie może być poprzedzona np. komentarzem) oraz musi posiadać atrybut version (dopuszczalne wartości to 1.0 albo 1.1) oraz opcjonalnie atrybuty:

o encoding – deklaruje zestaw znaków używanych w dokumencie XML, wartością domyślną jest kodowanie UTF-8 w systemie Unicode,

o standalone – określa tryb dokumentu XML, może przyjmować wartość yes lub no.

Jeśli ustawimy wartość na yes to będzie oznaczało, że dokument nie zawiera innych plików, które muszą zostać przetworzone wraz z dokumentem. Może to być np.

zewnętrzny arkusz stylów lub definicja DTD,

• musi zawierać dokładnie jeden element główny (zwany root element), w naszym przypadku elementem głównym jest element o nazwie ksiazka-telefoniczna,

• każdy element musi zaczynać się znacznikiem początku elementu, np. , oraz kończyć identycznym znacznikiem końca elementu np., wyjątek stanowią elementy puste (<element- pusty />), czyli takie, które nie zawierają żadnych danych, ani innych elementów, mogą zawierać atrybuty,

• nazwy elementów mogą zawierać znaki alfanumeryczne (litery a-z, A-Z oraz cyfry 0-9), znaki ideograficzne (ą, ó, ń, jednak należy unikać takich konstrukcji[potrzebne źródło]) oraz 3 znaki interpunkcyjne (podkreślenie _, łącznik -, kropka.). Znak dwukropka zarezerwowany jest dla identyfikacji przestrzeni nazw, której nazwa dopisywana jest przed nazwą elementu np.

<przestrzeń1:element>,

• nazwy elementów nie mogą zaczynać się od znaku łącznika -, kropki, czy cyfry. Dodatkowo nie mogą zaczynać się od xml, XML, xML itp. (wielkość liter bez znaczenia),

• elementy można zagnieżdżać w sobie i wtedy każdy element znajdujący się wewnątrz innego elementu jest nazywany "dzieckiem" tego elementu, a element, wewnątrz którego znajdują się inne elementy, zwany jest "rodzicem" tych elementów. W naszym przypadku element

<newsy> jest rodzicem elementu <news>, element <news> jest dzieckiem elementu

<newsy>, a zarazem rodzicem elementów , <autor>, <e-mail>, <tresc>. Nie można stosować konstrukcji takiego typu: <news><tresc></news></tresc>, ponieważ element <tresc> nie jest prawidłowo zagnieżdżony w elemencie <news>,

• każdy element może zawierać atrybuty, które definiuje się w znaczniku początku elementu, np. atrybutem elementu <news potw="yes"> jest atrybut o nazwie potw oraz wartości yes.

Wartości atrybutów podaje się w cudzysłowach albo apostrofach (pojedynczych cudzysłowach),

• informacje, które zawiera element, muszą być zapisane pomiędzy znacznikiem początku i końca elementu,

• w danych, atrybutach oraz nazwach elementów nie mogą pojawiać się niektóre znaki.

Przykładem może być znak mniejszości (<), lub ampersand (&). Znaków tych nie można używać, ponieważ parsery XML "widząc" np. znak mniejszości wewnątrz elementu stwierdzą, że jest to początek znacznika i dokument zostanie błędnie zinterpretowany. Specyfikacja XML daje możliwość używania takich znaków z wykorzystaniem predefiniowanych odniesień

(11)

jednostki. Jeśli np. chcemy wstawić znak mniejszości (<), wpisujemy zamiast niego sekwencję

&lt; znak ampersand – &amp;, znak większości (>) - &gt;,

• jeżeli nie chcemy używać predefiniowanych odniesień jednostek, możemy część danych, które zawierają np. kod html lub xml, zapisać w sekcji danych znakowych, która nie będzie przetwarzana przez analizator składni XML. Znacznik początku sekcji danych znakowych to:

<![CDATA[, a znacznik końca: ]]>,

• w dokumencie XML możemy wykorzystywać komentarze, które zaczynają się znakami: <!--,, a kończą: -->. Przykład: <!-- To jest komentarz -->,

• specyfikacja XML zezwala na wstawianie instrukcji przetwarzania, które są wykorzystywane do przeniesienia informacji do aplikacji. Instrukcje przetwarzania rozpoczynają się znakami:

<?, a kończą: ?>. Przykładem takiej instrukcji może być odniesienie do arkusza stylów, który jest powiązany z dokumentem XML: <?xml-stylesheet type="text/xsl" href="newsy.xsl"?>.

2.10. Ajax

Technika tworzenia aplikacji internetowych, w której interakcja użytkownika z serwerem odbywa się bez przeładowywania całego dokumentu, w sposób asynchroniczny. Ma to umożliwiać bardziej dynamiczną interakcję z użytkownikiem niż w tradycyjnym modelu, w którym każde żądanie nowych danych wiąże się z przesłaniem całej strony HTML. Na technikę tę składa się parę elementów:

• XMLHttpRequest - klasa umożliwiająca asynchroniczne przesyłanie danych; dzięki asynchroniczności w trakcie pobierania danych użytkownik może wykonywać inne czynności, można także pobierać dane jednocześnie z wielu miejsc,

• JavaScript

• XML

(12)

OPIS ZASTOSOWANYCH TECHNOLOGII

CYFROWY URZĄD dla

URZĘDU MARSZAŁKOWSKIEGO WOJEWÓDZTWA MAŁOPOLSKIEGO

Gdynia, marzec 2013

(13)

Metryka

Nazwa projektu Dostarczenie licencji na oprogramowanie oraz wykonanie aplikacji wraz z jej wdrożeniem, szkolenie oraz przeniesienie określonych danych z obecnego Cyfrowego Urzędu oraz Biuletynu Informacji Publicznej

Zamawiający Województwo Małopolskie

Wykonawca MADKOM SA

Produkt Opis zastosowanych technologii CU

Opis Dokument opisujący technologie zastosowane w systemie Cyfrowy Urząd

Autor Zespół analiz

Plik Liczba stron 12

Historia dokumentu

Edycja i rewizja

Data wydania

Opis Akcja (*) Rozdziały

(**)

Autorzy

1 12.03.2013 Stworzenie dokumentu N W Zespół analiz

2 27.03.2013 Aktualizacja dokumentu Z 2 Zespół analiz

* Akcje: W = Wstawienie, Z = Zmiana, We = Weryfikacja, N = Nowy

** Rozdziały: W = Wszystkie

Akceptacja Zatwierdził

……… ……….

(data i podpis) (data i podpis)

(14)

Spis treści

1. Cel dokumentu ... 4

2. Opis zastosowanych technologii... 4

2.1. SQL ... 4

2.2. NoSQL ... 5

2.3. XForms ... 6

2.4. JavaScript ... 6

2.5. Java ... 6

2.6. PHP ... 7

2.7. Perl... 8

2.8. WS-Security ... 8

2.9. LVS ... 9

2.10. HTML ... 9

2.11. XML ... 11

2.12. Ajax ... 12

(15)

1. Cel dokumentu

Niniejszy dokument opisuje zastosowane technologie oprogramowania systemu Cyfrowy Urząd.

Podstawą opracowania niniejszego dokumentu jest umowa nr IXA/424/RG/12 z dnia 26.06.2012 na

„Dostarczenie licencji na oprogramowanie oraz wykonanie aplikacji wraz z jej wdrożeniem, szkolenie oraz przeniesienie określonych danych z obecnego Cyfrowego Urzędu oraz Biuletynu Informacji Publicznej” zawarta pomiędzy Wykonawcą – firmą Madkom SA z siedzibą w Gdyni, Aleja Zwycięstwa 96/98, 84-451 Gdynia, a Zamawiającym – Województwem Małopolskim z siedzibą w Krakowie, ul.

Basztowa 22, 31-156 Kraków.

2. Opis zastosowanych technologii.

2.1. SQL

Strukturalny język zapytań używany do tworzenia, modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych.

Język SQL jest językiem deklaratywnym. Decyzję o sposobie przechowywania i pobrania danych pozostawia się systemowi zarządzania bazą danych (DBMS). Stał się standardem w komunikacji z serwerami relacyjnych baz danych. Wiele współczesnych systemów relacyjnych baz danych używa do komunikacji z użytkownikiem SQL, dlatego potocznie mówi się, że korzystanie z relacyjnych baz danych to korzystanie z SQL-a.

Produkty związane z relacyjnymi bazami danych to nie tylko serwery. Sam serwer określa się często takimi nazwami jak „back end”, „engine”, czy też „motor/silnik bazy danych”. Przechowuje on dane oraz zapewnia ich pobieranie i aktualizacje w odpowiedzi na pobierane instrukcje w SQL-u.

Uzupełnieniem serwera jest zazwyczaj „front end”, „oprogramowanie pośredniczące” czy też

„fronton” – narzędzia upraszczające komunikację z serwerem i wyposażone w mechanizmy pozwalające wykorzystać pobrane dane. Należą do nich mechanizmy generowania i obsługi formularzy oraz raportów, języki czwartej generacji (4GL), graficzne języki zapytań, narzędzia konstrukcyjne użytkownika, oprogramowanie do prezentacji multimedialnych, systemy tworzenia hipertekstu, systemy CAD/CAM, arkusze kalkulacyjne, jak również interfejsy dostępu bezpośredniego.

Wszystkie one wykorzystują do komunikacji z serwerem i wykonywania za jego pośrednictwem różnych operacji język SQL. Serwer odpowiada za przechowywanie, porządkowanie i pobieranie danych, zapewnia ich integralność, bezpieczeństwo oraz zabezpiecza przed ewentualnymi konfliktami między użytkownikami.

Użycie SQL, zgodnie z jego nazwą, polega na zadawaniu zapytań do bazy danych. Zapytania można zaliczyć do jednego z czterech głównych podzbiorów:

• SQL DML (ang. Data Manipulation Language – „język manipulacji danymi”),

• SQL DDL (ang. Data Definition Language – „język definicji danych”),

• SQL DCL (ang. Data Control Language – „język kontroli nad danymi”).

• SQL DQL (ang. Data Query Language – „język definiowania zapytań”).

Instrukcje SQL w obrębie zapytań tradycyjnie zapisywane są wielkimi literami, jednak nie jest to wymóg. Każde zapytanie w SQL-u musi kończyć się znakiem średnika (;).

(16)

Dodatkowo, niektóre programy do łączenia się z silnikiem bazy danych (np. psql w przypadku PostgreSQL), używają swoich własnych instrukcji, spoza standardu SQL, które służą np. do połączenia się z bazą, wyświetlenia dokumentacji itp.

• DML (Data Manipulation Language) służy do wykonywania operacji na danych – do ich umieszczania w bazie, kasowania, przeglądania oraz dokonywania zmian. Najważniejsze polecenia z tego zbioru to:

o INSERT – umieszczenie danych w bazie, o UPDATE – zmiana danych,

o DELETE – usunięcie danych z bazy.

Dane tekstowe muszą być zawsze ujęte w znaki pojedynczego cudzysłowu (').

• DDL - dzięki DDL (Data Definition Language) można operować na strukturach, w których dane są przechowywane – czyli np. dodawać, zmieniać i kasować tabele lub bazy. Najważniejsze polecenia tej grupy to:

o CREATE – utworzenie struktury (bazy, tabeli, indeksu itp.), o DROP – usunięcie struktury,

o ALTER – zmiana struktury (dodanie kolumny do tabeli, zmiana typu danych w kolumnie tabeli).

• DCL - (Data Control La nguage) ma zastosowanie do nadawania uprawnień do obiektów bazodanowych. Najważniejsze polecenia w tej grupie to:

o GRANT - służące do nadawania uprawnień do pojedynczych obiektów lub globalnie konkretnemu użytkownikowi,

o REVOKE – służące do odbierania wskazanych uprawnień konkretnemu użytkownikowi,

o DENY.

• DQL - (Data Query Language) to język formułowania zapytań do bazy danych. W zakres tego języka wchodzi jedno polecenie - SELECT. Często SELECT traktuje się jako część języka DML, ale to podejście nie wydaje się właściwe, ponieważ DML z definicji służy do manipulowania danymi - ich tworzenia, usuwania i uaktualniania.

2.2. NoSQL

Systemy zarządzania bazami danych, które nie opierają się na tradycyjnym modelu relacyjnym. Dane w nich przechowywane nie wymagają ściśle określonych schematów (tabel), zwykle nie używają operacji złączeń i umożliwiają łatwe skalowanie w poziomie. Ze względu na m. in. brak sztywnego schematu bazy danych, sporą elastyczność, mniej problemów z mapowaniem danych w bazie do obiektów zdefiniowanych w kodzie, taki model bazy danych jest niezwykle szybki (zarówno jeśli chodzi o zapis jak i o odczyt danych). Podejście NoSQL jest rozwiązaniem problemu dynamicznego wzrostu ilości danych, jest to główne przeznaczenie tego tzpu baz danych.

Główne założenia:

• rezygnacja z wielu elementów baz relacyjnych. Duża liczba złączen tabel powoduje zdecydowany spadek wydajności, a ścisły schemat bazy danych nie zawsze bywa zaletą, gdyż wiele danych nie ma określonej struktury. Postulaty ACID (Atomicity – atomowość, Consistency – spójność, Isolation – izolacja, Durability – trwałość). Uznano za zbyt restrykcyjne,

• zmniejszenie znaczenia schematów danych. Wg założeń NoSQL uwaga powinna być skupiona najpierw na danych, a dopiero potem na schematach,

• zmiana podejścia w kwestii awarii. W przypadku, gdy jeden z elementów systemów zostanie uszkodzony – reszta musi działać,

(17)

• łatwe do wprowadzenia i przezroczyste dla aplikacji (logiki biznesowej) skalowanie poziome.

Wszystkie problemy ze skalowaniem powinny być rozwiązywane na poziomie zasobów serwera.

2.3. XForms

Zaawansowany deklaratywny język opisu formularzy. Jest to dialekt XML, stworzony przez W3C (World Wide Web Consortium), przeznaczony do integracji z innymi językami internetowymi (np.

XHTML, SVG), a w intencji mający zastąpić niedoskonałe formularze HTML.

W stosunku do HTML nowy język opisu formularzy oferuje liczne przewagi:

• oddzielenie modelu danych i samych danych od prezentacji,

• możliwość operowania na złożonych danych zapisanych w XML oraz przechowywanie aktualnego stanu tych danych po stronie klienta,

• łatwe realizowanie złożonych formularzy, w tym także wieloliniowych, o strukturze masterdetail itp.,

• możliwość dynamicznego sterowania sposobem prezentacji: kolorami, wyświetlaniem i aktywnością pól itp.,

• rozbudowane możliwości walidacji danych, zarówno co do ich zgodności z zadeklarowanym typem danych jak i co do spełniania przez nie zadeklarowanych reguł (business rules),

• możliwość określenia sposobu reagowania na zdarzenia bez potrzeby dodatkowego programowania,

• możliwość wykonywania obliczeń i wyświetlania ich rezultatów oraz wstawiania tych rezultatów do wynikowych danych.

By opis formularzy był łatwy w interpretacji i odporny na błędy programowania, język jest w możliwie dużym stopniu deklaratywny. Zawiera jednak możliwości obsługi zdarzeń i wykonywania pewnych akcji. Opis formularza w XForms zanurza się w języku macierzystym opisującym stronę. Takim językiem najczęściej jest XHTML, ale może być to dowolny dialekt XML, np. SVG. Do odróżnienia elementów XForms stosuje się przestrzenie nazw.

2.4. JavaScript

Skryptowy język programowania, stworzony przez firmę Netscape. Najczęściej spotykanym zastosowaniem języka JavaScript są strony WWW. Skrypty służą najczęściej do zapewnienia interaktywności poprzez reagowanie na zdarzenia, sprawdzania poprawności formularzy lub budowania elementów nawigacyjnych. W języku JavaScript można także pisać pełnoprawne aplikacje. Fundacja Mozilla udostępnia środowisko złożone z technologii takich jak XUL, XBL, XPCOM oraz JSLib. Umożliwiają one tworzenie korzystających z zasobów systemowych aplikacji o graficznym interfejsie użytkownika dopasowującym się do danej platformy.

Wszystkie implementacje JavaScriptu dostępne w przeglądarkach internetowych dostarczają obiektów reprezentujących drzewo dokumentu. Mogą także umożliwiać tworzenie ciasteczek, manipulowanie oknami przeglądarki, wyświetlanie prostych okien dialogowych, pobieranie informacji o przeglądarce, zarządzanie jej pluginami oraz arkuszami stylów. Reagują także na zdarzenia wywoływane w interfejsie.

2.5. Java

Obiektowy język programowania stworzony przez grupę roboczą pod kierunkiem Jamesa Goslinga z firmy Sun Microsystems. Java jest językiem tworzenia programów źródłowych kompilowanych do

(18)

kodu bajtowego, czyli postaci wykonywanej przez maszynę wirtualną. Jej podstawowe koncepcje zostały przejęte z języka Smalltalk (maszyna wirtualna, garbage collection) oraz z języka C++ (duża część składni i słów kluczowych). Wykorzystany do kontrolki podpisu elektronicznego.

Główne koncepcje:

• obiektowość - Java jest silnie ukierunkowana na obiektowość. Wszelkie dane i akcje na nich podejmowane są pogrupowane w klasy obiektów. O obiekcie można myśleć jako o samoistnej części programu, która może przyjmować określone stany i ma określone zachowania, które mogą zmieniać te stany bądź przesyłać dane do innych obiektów.

Wyjątkiem od całkowitej obiektowości (jak np. w Smalltalku) są typy proste (int, float itp.),

• dziedziczenie - w Javie wszystkie obiekty są pochodną obiektu nadrzędnego (jego klasa nazywa się po prostu Object), z którego dziedziczą podstawowe zachowania i właściwości.

Dzięki temu wszystkie mają wspólny podzbiór podstawowych możliwości, takich jak ich:

identyfikacja, porównywanie, kopiowanie, niszczenie czy wsparcie dla programowania współbieżnego. Java umożliwia jedynie dziedziczenie jednobazowe, a więc wyłącznie jedna klasa może przekazać swoje właściwości i operacje jako podstawę do rozszerzania ich o dodatkowe możliwości. Wielodziedziczenie zrealizowane zostało za pomocą interfejsów oraz podklas,

• niezależność od architektury - kod źródłowy programów pisanych w Javie kompiluje się do kodu pośredniego. Powstały kod jest niezależny od systemu operacyjnego i procesora, a wykonuje go tzw. wirtualna maszyna Javy, która (między innymi) tłumaczy kod uniwersalny na kod dostosowany do specyfiki konkretnego systemu operacyjnego i procesora.

• sieciowość i obsługa programowania rozproszonego - dzięki wykorzystaniu reguł obiektowości, Java nie widzi różnicy między danymi płynącymi z pliku lokalnego a danymi z pliku dostępnego przez HTTP czy FTP. Biblioteki Javy udostępniają wyspecjalizowane funkcje umożliwiające programowanie rozproszone – zarówno między aplikacjami Javy (RMI) jak i między aplikacją Javy a aplikacjami napisanymi w innych językach (CORBA, usługi sieciowe).

Inne biblioteki udostępniają możliwość pisania aplikacji uruchamianych w przeglądarkach internetowych (aplety Javy) oraz aplikacji działających ciągle po stronie serwera (serwlety).

2.6. PHP

PHP jest najczęściej stosowany do tworzenia skryptów po stronie serwera WWW, ale może być on również używany do przetwarzania danych z poziomu wiersza poleceń, a nawet do pisania programów pracujących w trybie graficznym (np. za pomocą biblioteki GTK+, używając rozszerzenia PHP-GTK). Implementacja PHP wraz z serwerem WWW Apache oraz serwerem baz danych MySQL określana jest jako platforma AMP (w środowisku Linux – LAMP, w Windows – WAMP). Ponadto PHP można uruchomić na serwerze IIS (Windows) oraz w chmurze Windows Azure.

Cała funkcjonalność PHP zawarta jest w czterech zbiorach modułów różniących się od siebie dostępnością dla programisty:

• moduły jądra

o część silnika PHP; zawsze aktywne.

• moduły oficjalne

o element każdej dystrybucji PHP; aktywowane ręcznie przez administratora serwera.

• repozytorium PECL

o darmowe moduły o otwartym źródle tworzone przez programistów z całego świata, przeznaczone do samodzielnej kompilacji. Począwszy od wydania PHP 5 do PECL przeniesionych zostało wiele wcześniejszych modułów oficjalnych, najczęściej tych niestabilnych lub rzadko używanych.

(19)

• repozytorium PEAR

o zbiór realizujący typowe zadania klas o ujednoliconej budowie.

2.7. Perl

Interpretowany język programowania autorstwa Larry'ego Walla początkowo przeznaczony głównie do pracy z danymi tekstowymi, obecnie używany do wielu innych zastosowań. Wzorowany na takich językach jak C, skryptowe: sed, awk i sh oraz na wielu innych. Perl jest dostępny dla wielu systemów operacyjnych, lecz jego naturalne środowisko to Unix i jego pochodne. Chociaż Perl posiada większość cech języka interpretowanego, nie wykonuje ściśle każdego wiersza kodu źródłowego po kolei. Program jest najpierw kompilowany do kodu pośredniego (podobnie jak Java); jednocześnie dokonywana jest jego optymalizacja. Możliwe jest skompilowanie programu do kodu pośredniego i używanie go zamiast postaci źródłowej, jednak nadal konieczny jest interpreter – program wykonujący.

2.8. WS-Security

Specyfikacja wykorzystująca rekomendacje XML Encryption oraz XML Signature do rozszerzenia funkcjonalności WS o elementy bezpieczeństwa. Protokół początkowo był opracowywany przez Microsoft, IBM, oraz VeriSign – obecnie nad standardem pracuje jeden z komitetów Oasis-Open. WS- Security skupia się na wzbogaceniu komunikacji SOAP o zapewnienie integralności, poufności oraz dołączaniu żetonów bezpieczeństwa do komunikatów. WS-Security umożliwia na korzystanie z Kerberos oraz oczywiście kryptorgrafii publicznej opartej o standard X.509.

WS-Security definiuje bloki nagłówka, których zadaniem jest dostarczanie informacji związanej z bezpieczeństwem. W momencie gdy część komunikatu została podpisana nagłówek WS-Security będzie zawierał informację nt. metody podpisu, wykorzystywanego klucza, czy też właściwego podpisu. Identyfikacja odpowiedniego bloku jest realizowana za pomocą atrybutu wsu:Id unikalnego w ramach komunikatu. Podobnie będzie w przypadku, gdy wybrany element komunikatu zostanie zaszyfrowany – blok WS-Security będzie zawierał odpowiednią informację zgodną ze specyfikacją WS- Encryption. WS-Security nie zajmuje się sposobem podpisywania, czy szyfrowania, a jedynie zawiera informacje umożliwiające właściwe korzystanie dostępnych metod w tym zakresie w momencie zabezpieczania komunikatów SOAP.

Poza pełnieniem roli magazynu metadanych dla użytych metod zabezpieczania – dzięki czemu odbiorca wie, z czego skorzystał odbiorca, WS-Security zawiera również tzw. profile opisujące sposoby załączania żetonów bezpieczeństwa w nagłówku. Jest to mechanizm transmisji credentials wewnątrz bloku nagłówka SOAP. WS-Security udostępnia 2 metody załączania żetonów:

• UsernameToken służący do przekazywania credentials w sposób prosty – <nazwa użytkownika>/<hasło>,

• BinarySecurityToken – do przekazywania biletów Kerberos oraz certyfikatów X.509.

Komunikat SOAP może zawierać wiele bloków dot. bezpieczeństwa, z których każdy może być opatrzony specjalnym atrybutem Actor. Atrybut Actor umożliwia pośrednikom zidentyfikować, które bloki powinni przetwarzać. Wartością atrybutu Actor jest URI pod którym działa dany pośrednik - URI jest zawsze unikalne. De facto ten sam pośrednik może być uruchomiony pod więcej niż jednym URI, co oczywiście oznacza, że może przetwarzać więcej niż jeden blok. Zakłada się, że każdy pośrednik wie pod którym URI został uruchomiony. Specyfikacja dopuszcza, by co najwyżej jeden blok WS- Security nie był opatrzony atrybutem Actor, co oznacza, że odbiorcą tego bloku jest ultimate receiver.

WS-Security wprowadza też specjalny atrybut wsu:TimeStamp wprowadzający mechanizm wygaszania ważności komunikatu, co zabezpiecza usługę przed atakami typu replay – w momencie, kiedy intruz nie jest w stanie zmodyfikować komunikatu (komunikat podpisany).

(20)

2.9. LVS

Wysoko skalowalny serwer zbudowany na klastrze fizycznych serwerów, z usługą równoważenia obciążenia (load balancer) przeznaczony dla systemów Linux. Architektura klastru w pełni przezroczysta dla użytkownika końcowego.

2.10. HTML

Hipertekstowy język znaczników, obecnie szeroko wykorzystywany do tworzenia stron internetowych. HTML pozwala opisać strukturę informacji zawartych wewnątrz strony internetowej, nadając znaczenie poszczególnym fragmentom tekstu – formując hiperłącza, akapity, nagłówki, listy – oraz osadza w tekście dokumentu obiekty plikowe np. multimedia bądź elementy baz danych np.

interaktywne formularze danych.

HTML umożliwia określenie wyglądu dokumentu w przeglądarce internetowej. Do szczegółowego opisu formatowania akapitów, nagłówków, użytych czcionek i kolorów, zalecane jest wykorzystywanie kaskadowych arkuszy stylów.

W składni HTML wykorzystuje się pary znaczników umieszczone w nawiasach ostrokątnych, np.

<title> i </title> lub <h1> i </h1>.

HTML pozwala również na osadzanie ciągów instrukcji języków skryptowych, umieszczonych pomiędzy znacznikami <script> i </script>

Należy nadmienić, że HTML, będąc językiem znaczników, nie jest zaliczany do języków programowania – w jego składni nie przewidziano wyrażeń obliczeniowych, warunkowych czy iteracyjnych.

Ważną cechą HTML, która przyczyniła się do popularności systemu WWW oraz Internetu, jest niezależność od systemu operacyjnego i wykorzystywanego sprzętu komputerowego.

Komponenty języka HTML:

• znaczniki (tagi) - stanowią podstawowy komponent języka HTML. Charakteryzują je dwie cechy: atrybuty i zawartość. Każdy atrybut i zawartość musi spełniać określone wymagania, aby dokument został poprawnie zwalidowany pod kątem zgodności ze standardem. Znacznik zwykle rozpoczyna się znacznikiem otwierającym (np. <nazwa-znacznika>), a kończy znacznikiem zamykającym (np. </nazwa-znacznika>). Atrybuty elementu są zawarte w znaczniku otwierającym (po nazwie znacznika), natomiast zawartość umieszczana jest pomiędzy znacznikiem otwierającym i zamykającym. (np. <nazwa-znacznika atrybut="wartość">zawartość</nazwa-znacznika>). Niektóre elementy, np. <br>, nie

posiadają zawartości, a także znacznika zamykającego.

W nomenklaturze polskiej, dotyczącej języka HTML, słowa element używa się do określenia grupy:

o znacznik otwierający, o atrybuty,

o zawartość,

o znacznik zamykający,

• atrybuty - większość atrybutów elementów składa się z par nazwa-wartość, rozdzielonych znakiem "=", zawartych w znaczniku otwierającym elementu, po jego nazwie. Wartość może być zawarta w pojedynczych lub podwójnych cudzysłowach. Przy niektórych wartościach cudzysłowy mogą być pominięte (tylko w specyfikacji HTML, nie XHTML), jednak nie jest to zalecane, a wręcz praktyka taka uznana jest na niebezpieczną. W przeciwieństwie do

(21)

atrybutów w postaci par nazwa-wartość istnieją atrybuty mające wpływ na element poprzez samo ich zawarcie w znaczniku otwierającym (np. ismap atrybut dla znacznika img).

Znaczna część elementów może posiadać standardowe dla znaczników atrybuty: id, class, style, title, a także atrybuty związane z językiem lang i dir.

Atrybut id nadaje elementowi unikatowy identyfikator. Może on zostać użyty przez arkusze stylów do sprecyzowania wyglądu tego elementu lub przez skrypty np. do zmiany jego zawartości. Atrybut class służy do sklasyfikowania elementów dla celów prezentacyjnych.

Dokument HTML lub zbiór takich dokumentów może używać klasy class="stopka", sugerując, że powinny być one wyświetlone na dole strony w postaci stopki. Elementy posiadające taką klasę mogą otrzymać styl, dzięki któremu zamiast wyświetlać się w miejscu występowania w kodzie HTML, będą zaprezentowane na dole strony w postaci stopki.

Autor może użyć znacznika style, aby nadać styl konkretnemu elementowi w kodzie HTML.

Dobrą praktyką jest jednak nadanie elementowi unikatowego identyfikatora id, odnosząc się prezentacji tego znacznika w arkuszu stylów. Czasem jest to jednak nieporęczne podczas szybkiego testowania wyglądu elementów. Atrybutu title używa się w celu dodania do elementu informacji tekstowej. W wielu przypadkach zawartość atrybutu title wyświetlana jest w postaci podpowiedzi (tooltip), pojawiającej się na ekranie po najechaniu myszą na dany element,

• encje i referencje znakowe - począwszy od wersji 4.0, HTML definiuje listę 252 encji oraz 1114050 symboli znakowych, pozwalających na zapisanie określonych znaków za pomocą specjalnych stałych. Niektóre znaki można również zapisać dosłownie. Znak wprowadzony dosłownie i jego odpowiednik w postaci określonej stałej uznawane są za równoważne i są identycznie renderowane. Zdolność alternatywnego zapisu znaków specjalnych "<" i "&"

(zapisywanych odpowiednio jako &lt; i &amp;), umożliwia ich interpretację jako zwykłych znaków, zamiast traktowania ich jako istotnych elementów składni języka. Przykładowo, dosłownie zapisany znak "<" wskazuje na początek znacznika otwierającego, a "&" wskazuje na rozpoczęcie ciągu znaków, mającego być zinterpretowanym jako encja lub symbol (referencja znakowa). Zapisanie tego znaku jako "&amp;" lub "&#x26;" lub "&#38;" pozwala na użycie "&" w wartości elementu lub wartości atrybutu. Znak podwójnego cudzysłowu, ", użyty w wartości atrybutu, także musi zostać zapisany jako "&quot;" lub "&#x22;" lub

"&#34;", gdyż wartość atrybutu sama jest opatrzona z obu stron właśnie takimi cudzysłowami (wprowadzonymi do kodu dosłownie). Ponieważ autorzy stron często zapominają o używaniu stałych, przeglądarki stały się pod tym względem bardzo tolerancyjne, traktując znaki wprowadzone dosłownie jako kod, tylko w przypadkach, gdy dalszy ciąg kodu wskazuje na użycie tych znaków jako elementów składni języka.

Alternatywnego zapisu znaków (zwanego także ucieczką, ang. escaping) używa się do wprowadzania symboli, których nie da się łatwo wpisać dosłownie z klawiatury. Np. symbol

"é", wykorzystywany standardowo tylko w klawiaturach zachodnioeuropejskich, może być zapisany jako encja &eacute; lub jako referencja znakowa &#233; lub &#xE9;. Znaki zawarte w referencjach (czyli "&", ";", litery w słowie "eacute" itd.) są dostępne na wszystkich klawiaturach i we wszystkich kodowaniach znaków, podczas, gdy znak "é" – nie,

• typy danych - HTML definiuje kilka typów danych, wprowadzanych jako wartości elementów lub atrybutów. Są to m.in. skrypty (script data), dane arkuszy stylów (stylesheet data), identyfikatory, nazwy, adresy URI, liczby, jednostki miary długości, języki, deskryptory mediów, kolory, kodowania znaków, data i czas, itp.,

• deklaracja typu dokumentu - aby uaktywnić definicję typu dokumentu (DTD) do celów poprawnej walidacji utworzonej strony, a także w celu uniknięcia działania przeglądarek w trybie quirks, dokument powinien rozpoczynać się deklaracją typu dokumentu (nieformalnie DOCTYPE). DTD, do którego odwołuje się sekcja DOCTYPE, zawiera gramatykę i zasady wykorzystywania znaczników w dokumencie podporządkowanemu określonemu DTD.

(22)

Większość graficznych przeglądarek korzysta z sekcji DOCTYPE, a także innych dodatkowych informacji, warunkując tryb renderowania danej strony.

2.11. XML

Uniwersalny język formalny przeznaczony do reprezentowania różnych danych w strukturalizowany sposób.

XML jest niezależny od platformy, co umożliwia łatwą wymianę dokumentów pomiędzy heterogenicznymi (różnymi) systemami i znacząco przyczyniło się do popularności tego języka w dobie Internetu. XML jest standardem rekomendowanym oraz specyfikowanym przez organizację W3C.

Mówimy o dokumencie, że jest poprawny składniowo (ang. well-formed), jeżeli jest zgodny z regułami składni XML. Reguły te obejmują m.in. konieczność domykania wszystkich znaczników.

Dokument niepoprawny składniowo nie może być przetworzony przez parser XML.

Mówimy o dokumencie, że jest poprawny strukturalnie (ang. valid), jeżeli jest zgodny z definicją dokumentu, tzn. dodatkowymi regułami określonymi przez użytkownika. Do precyzowania tych reguł służą specjalne języki. Najpopularniejszymi są DTD, XML Schema.

Poprawny składniowo (ang. well-formed) dokument XML powinien być tworzony zgodnie z kilkoma zasadami:

• powinien zawierać deklarację XML, która musi być umieszczona na samym początku pliku (nie może być poprzedzona np. komentarzem) oraz musi posiadać atrybut version (dopuszczalne wartości to 1.0 albo 1.1) oraz opcjonalnie atrybuty:

o encoding – deklaruje zestaw znaków używanych w dokumencie XML, wartością domyślną jest kodowanie UTF-8 w systemie Unicode,

o standalone – określa tryb dokumentu XML, może przyjmować wartość yes lub no.

Jeśli ustawimy wartość na yes to będzie oznaczało, że dokument nie zawiera innych plików, które muszą zostać przetworzone wraz z dokumentem. Może to być np.

zewnętrzny arkusz stylów lub definicja DTD,

• musi zawierać dokładnie jeden element główny (zwany root element), w naszym przypadku elementem głównym jest element o nazwie ksiazka-telefoniczna,

• każdy element musi zaczynać się znacznikiem początku elementu, np. , oraz kończyć identycznym znacznikiem końca elementu np., wyjątek stanowią elementy puste (<element- pusty />), czyli takie, które nie zawierają żadnych danych, ani innych elementów, mogą zawierać atrybuty,

• nazwy elementów mogą zawierać znaki alfanumeryczne (litery a-z, A-Z oraz cyfry 0-9), znaki ideograficzne (ą, ó, ń, jednak należy unikać takich konstrukcji[potrzebne źródło]) oraz 3 znaki interpunkcyjne (podkreślenie _, łącznik -, kropka.). Znak dwukropka zarezerwowany jest dla identyfikacji przestrzeni nazw, której nazwa dopisywana jest przed nazwą elementu np.

<przestrzeń1:element>,

• nazwy elementów nie mogą zaczynać się od znaku łącznika -, kropki, czy cyfry. Dodatkowo nie mogą zaczynać się od xml, XML, xML itp. (wielkość liter bez znaczenia),

• elementy można zagnieżdżać w sobie i wtedy każdy element znajdujący się wewnątrz innego elementu jest nazywany "dzieckiem" tego elementu, a element, wewnątrz którego znajdują się inne elementy, zwany jest "rodzicem" tych elementów. W naszym przypadku element

<newsy> jest rodzicem elementu <news>, element <news> jest dzieckiem elementu

<newsy>, a zarazem rodzicem elementów , <autor>, <e-mail>, <tresc>. Nie można stosować konstrukcji takiego typu: <news><tresc></news></tresc>, ponieważ element <tresc> nie jest prawidłowo zagnieżdżony w elemencie <news>,

(23)

• każdy element może zawierać atrybuty, które definiuje się w znaczniku początku elementu, np. atrybutem elementu <news potw="yes"> jest atrybut o nazwie potw oraz wartości yes.

Wartości atrybutów podaje się w cudzysłowach albo apostrofach (pojedynczych cudzysłowach),

• informacje, które zawiera element, muszą być zapisane pomiędzy znacznikiem początku i końca elementu,

• w danych, atrybutach oraz nazwach elementów nie mogą pojawiać się niektóre znaki.

Przykładem może być znak mniejszości (<), lub ampersand (&). Znaków tych nie można używać, ponieważ parsery XML "widząc" np. znak mniejszości wewnątrz elementu stwierdzą, że jest to początek znacznika i dokument zostanie błędnie zinterpretowany. Specyfikacja XML daje możliwość używania takich znaków z wykorzystaniem predefiniowanych odniesień jednostki. Jeśli np. chcemy wstawić znak mniejszości (<), wpisujemy zamiast niego sekwencję

&lt; znak ampersand – &amp;, znak większości (>) - &gt;,

• jeżeli nie chcemy używać predefiniowanych odniesień jednostek, możemy część danych, które zawierają np. kod html lub xml, zapisać w sekcji danych znakowych, która nie będzie przetwarzana przez analizator składni XML. Znacznik początku sekcji danych znakowych to:

<![CDATA[, a znacznik końca: ]]>,

• w dokumencie XML możemy wykorzystywać komentarze, które zaczynają się znakami: <!--,, a kończą: -->. Przykład: <!-- To jest komentarz -->,

• specyfikacja XML zezwala na wstawianie instrukcji przetwarzania, które są wykorzystywane do przeniesienia informacji do aplikacji. Instrukcje przetwarzania rozpoczynają się znakami:

<?, a kończą: ?>. Przykładem takiej instrukcji może być odniesienie do arkusza stylów, który jest powiązany z dokumentem XML: <?xml-stylesheet type="text/xsl" href="newsy.xsl"?>.

2.12. Ajax

Technika tworzenia aplikacji internetowych, w której interakcja użytkownika z serwerem odbywa się bez przeładowywania całego dokumentu, w sposób asynchroniczny. Ma to umożliwiać bardziej dynamiczną interakcję z użytkownikiem niż w tradycyjnym modelu, w którym każde żądanie nowych danych wiąże się z przesłaniem całej strony HTML. Na technikę tę składa się parę elementów:

• XMLHttpRequest - klasa umożliwiająca asynchroniczne przesyłanie danych; dzięki asynchroniczności w trakcie pobierania danych użytkownik może wykonywać inne czynności, można także pobierać dane jednocześnie z wielu miejsc,

• JavaScript

• XML

Cytaty