SlideShare una empresa de Scribd logo
1 de 100
Descargar para leer sin conexión
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Tehnologii Web
procesarea datelor
XML/HTML (II)
SAX, procesări simplificate,
prelucrarea datelor HTML
Dr. Sabin Corneliu Buraga – profs.info.uaic.ro/~busaco/
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
„Înainte de a pune noi întrebări,
gândește-te dacă într-adevăr vrei
să cunoști răspunsul la ele.”
Gene Wolfe
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Există maniere alternative
pentru procesarea documentelor XML?
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
sax: intro
Scop:
consultarea documentelor XML/HTML
fără ca în prealabil să fie construit
arborele de noduri-obiect
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
sax: intro
Scop:
consultarea documentelor XML/HTML
fără ca în prealabil să fie construit
arborele de noduri-obiect
în contrast cu DOM, documentul nu trebuie stocat complet
în memorie înainte de a fi efectiv prelucrat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
sax: caracterizare
Oferă o procesare XML secvențială (liniară),
bazată pe evenimente – event-oriented
inițiator: David Megginson
www.megginson.com/downloads/SAX/
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
sax: caracterizare
Oferă o procesare XML secvențială (liniară),
bazată pe evenimente – event-oriented
flux continuu de evenimente privind date XML
oferindu-se suport doar pentru citire
“SAX is a streaming interface – applications receive
information from XML documents in a continuous stream,
with no backtracking or navigation allowed”
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
sax: caracterizare
Efort independent – de cel al Consorțiului Web –
de standardizare a procesării XML
condusă de evenimente
www.saxproject.org
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
sax: caracterizare
Larg acceptat ca standard industrial
SAX 1.0 (1998)
implementare de referință în limbajul Java
org.xml.sax
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
sax: caracterizare
Larg acceptat ca standard industrial
SAX 2.0 (2004)
suport pentru spații de nume,
diverse configurări + extensii
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
sax: procesare
Pentru fiecare tip de construcție XML
– început de tag, sfârșit de tag, date (conținut),
instrucțiune de procesare, comentariu,... –
va fi emis un eveniment care va fi tratat
de o funcție/metodă (handler)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
sax: procesare
Funcțiile/metodele de tratare se specifică
de către programator, pentru fiecare tip
de construcție XML în parte
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
sax: procesare
Minimal, trebuie definite funcțiile/metodele:
trateaza_tag_inceput (procesor, tag, atrib)
trateaza_tag_sfarsit (procesor, tag)
trateaza_date_caracter (procesor, date)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
sax: procesare
Minimal, trebuie definite funcțiile/metodele:
trateaza_tag_inceput (procesor, tag, atrib)
trateaza_tag_sfarsit (procesor, tag)
trateaza_date_caracter (procesor, date)
conține lista atributelor
atașate tag-ului de început
instanța
procesorului XML
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
sax: procesare
PHP: pentru fiecare eveniment de apariție a tag-ului de
început, a tag-ului de sfârșit și a datelor-conținut,
se atașează una din funcțiile de tratare, respectiv:
set_element_handler
(trateaza_tag_inceput, trateaza_tag_sfarsit)
set_character_data_handler
(trateaza_date_caracter) funcții sau
metode definite
de programator
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/

Aplicație
client
Procesor (parser)
SAX
Instanțierea
handler-elor
notificare
apariție eveniment
început de tag
Procesare
trimite
evenimente
SAX
apelare handler

inițiere procesare: parse ( )
<projects>
<project class="M">
…
</project>
</projects>
apariție eveniment
final de tag
apelare handler
etc.
programul consumă și tratează evenimente
produse de procesorul SAX
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
sax: procesare
Implementarea de referință (Java): org.xml.sax
detalii la
www.saxproject.org/apidoc/org/xml/sax/package-summary.html
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
sax: procesare
Interfețe ce pot fi implementate de aplicația noastră:
ContentHandler
rezolvă notificări de evenimente
vizând tipul construcțiilor XML:
început de document, tag de început, date textuale,
tag de sfârșit, sfârșit de document etc.
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
sax: procesare
Interfețe ce pot fi implementate de aplicația noastră:
Attributes
conține lista atributelor
specificate în cadrul unui tag de început
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
sax: procesare
Interfețe ce pot fi implementate de aplicația noastră:
XMLReader
specifică maniera de citire a datelor XML folosind
metode de tratare a evenimentelor (callback-uri)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
sax: procesare
Interfețe ce pot fi implementate de aplicația noastră:
ErrorHandler
specifică maniera de tratare
a erorilor (fatale) și avertismentelor
pot fi emise excepții precum
SAXException și SAXParseException
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
sax: procesare
Clasa SAX oferită:
InputSource
încapsulează informații despre o sursă de intrare
de unde se preiau datele XML (e.g., flux de caractere)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
// prelucrare XML via evenimente (consultarea datelor)
public interface XMLReader {
// furnizarea de informații despre document
public ContentHandler getContentHandler ();
public DTDHandler getDTDHandler ();
public EntityResolver getEntityResolver ();
public ErrorHandler getErrorHandler ();
// stabilirea diverselor funcționalități
public void setContentHandler (ContentHandler contentHandler);
public void setDTDHandler (DTDHandler dtdHandler);
public void setEntityResolver (EntityResolver resolver);
public void setErrorHandler (ErrorHandler errHandler);
// procesarea propriu-zisă via un obiect InputSource sau un URI
public void parse (InputSource in)
throws java.io.IOException, SAXException;
public void parse (String uri)
throws java.io.IOException, SAXException;
}
Exemplificare: interfața XMLReader
oferită de Apache Xerces – xerces.apache.org
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
// utilizată pentru procesarea construcțiilor XML
public interface ContentHandler {
public void setDocumentLocator (Locator locator);
public void startDocument () throws SAXException;
public void endDocument () throws SAXException;
// evenimente – minimal, vor fi implementate aceste 3 metode:
public void startElement (String uri, String localName, String qName,
Attributes attributes) throws SAXException;
public void endElement (String uri, String localName, String qName)
throws SAXException;
public void characters (char buf[], int offset, int length)
throws SAXException;
// informații suplimentare ce pot fi preluate din documentul procesat
public void ignorableWhitespace (char buf[], int offset, int length)
throws SAXException;
public void startPrefixMapping (String prefix, String uri)
throws SAXException;
public void endPrefixMapping (String prefix)
throws SAXException;
}
Exemplificare: interfața ContentHandler (Apache Xerces)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
// specifică atributele asociate unui element XML
public interface Attributes {
public int getLength (); // lungimea listei atributelor unui element
public String getType (int index); // tipul atributului
public String getValue (int index); // valoarea atributului
// acces la informațiile privitoare la numele atributului
public String getQName (int index); // prefix spațiu de nume + nume atrib.
public String getLocalName (int index); // numele propriu-zis al atributului
public String getURI (int index); // URI-ul spațiului de nume
// acces via spații de nume XML
public int getIndex (String uri, String localName);
public String getType (String uri, String localName);
public String getValue (String uri, String localName);
// acces via nume calificate (prefix:nume)
public int getIndex (String qName);
public String getType (String qName);
public String getValue (String qName);
}
Exemplificare: interfața Attributes (Apache Xerces)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
sax: implementări
Expat – procesor XML cu suport pentru diverse metode
de prelucrare (DOM, SAX etc.): libexpat.github.io
(C, C++, Lua, .NET, Objective-C, Perl, Python, Ruby, Tcl)
libxml – bibliotecă open source: C, C++, Haskell, Scala,…
lxml – bibliotecă Python: launchpad.net/lxml
MSSAX – procesări SAX în C, C++, JavaScript;
inclus în MSXML SDK (Software Development Kit)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
sax: implementări
NSXMLParser – implementare Objective-C + Swift (Apple)
developer.apple.com/documentation/foundation/xmlparser
org.xml.sax – API de referință pentru Java
REXML – procesor XML pentru Ruby
QSAX – parte a mediului de dezvoltare Qt (C++)
saxophonist, sax-js, xml-artist – module Node.js
sax-wasm – procesor scris în WebAssembly
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
sax: implementări
Xerces SAX API – platformă XML pentru C++ și Java:
xml.apache.org
erlsom, xmerl_eventp – module Erlang
xml – pachet Go: golang.org/pkg/encoding/xml/
XML::Parser – modul Perl bazat pe procesorul Expat
xml_*( ) – funcții PHP: php.net/manual/en/book.xml.php
xml.sax – Python: docs.python.org/3/library/xml.sax.html
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
sax: implementări – exemplificare
Procesarea în PHP unui document XML via SAX
pentru a genera o reprezentare HTML a datelor
web-test.xml – document XML modelând date de intrare
parseXML.php – clasa pentru prelucrarea documentelor XML
subiecte-test.php – program afișând subiectele unor teste
de studiat exemplele
din arhivă
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
<!-- document XML colectând subiecte de teste scrise -->
<subiecte materie="Tehnologii Web" data="2020-04-09">
<subiect>Ce este Web-ul?</subiect>
<subiect>Unde e stocat un cookie?</subiect>
<subiect>La ce este util limbajul XPath?</subiect>
…
</subiecte>
subiecte-test.php parseXML.php
require()
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
class parseXML {
private $xml_parser; // instanța analizorului XML
private $xml_file; // numele fișierului XML citit
private $html_code; // codul HTML generat
private $open_tags; // mulțimea subtituțiilor tag-urilor de început
private $close_tags; // mulțimea subtituțiilor tag-urilor de sfârșit
public function set_open_tags($tags) {
$this->open_tags = $tags;
}
public function set_close_tags($tags) {
$this->close_tags = $tags;
}
// stabilește numele fișierului XML procesat
public function set_xml_file($file) {
$this->xml_file = $file;
}
// furnizează codul HTML generat
public function get_html_code() {
return $this->html_code;
}
clasa oferind
prelucrarea
documentelor XML
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
// tratarea evenimentului de apariție a unui tag de început
private function start_element($parser, $name, $attrs) {
// dacă există în tabloul de substituții, va fi înlocuit cu conținutul precizat
if ($format = $this->open_tags[$name])
$this->html_code .= $format;
}
// tratarea evenimentului de apariție a unui tag de sfârșit
private function end_element($parser, $name) {
if ($format = $this->close_tags[$name])
$this->html_code .= $format;
}
// tratarea evenimentului de aparitie a unor date de tip caracter
private function character_data($parser, $data) {
$this->html_code .= $data;
}
clasa oferind
prelucrarea
documentelor XML
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
public function parse() { // analiza propriu-zisă condusă de evenimente
$this->xml_parser = xml_parser_create(); // instanțiază procesorul XML
// înregistrează funcțiile de analiză ca fiind metode ale obiectului curent
xml_set_object($this->xml_parser, $this);
// setează opțiuni (tag-urile nu sunt rescrise cu caractere mari)
xml_parser_set_option($this->xml_parser,
XML_OPTION_CASE_FOLDING, false);
// stabilește funcțiile de procesare a elementelor XML
xml_set_element_handler($this->xml_parser,
"start_element", "end_element");
xml_set_character_data_handler($this->xml_parser, "character_data");
if (!($fp = fopen($this->xml_file, "r"))) // deschide fișierul XML
die("could not open XML source");
while ($data = fread($fp, 4096)) { // citește date în „calupuri” de 4KB
if (!xml_parse($this->xml_parser, $data, feof($fp))) {
die(sprintf("XML error: %s at line %d", // eroare de procesare
xml_error_string(xml_get_error_code($this->xml_parser)),
xml_get_current_line_number($this->xml_parser))); } }
} // parse
} // class
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
// programul PHP ce afișează propunerile de subiecte de teste scrise
require("parseXML.php");
// substituția via două tablouri asociative a elementelor XML cu cod HTML
// (cheia = element XML de intrare, valoarea cheii = marcaj HTML rezultat)
$open_tags = [
'subiecte' => "<section><ol>",
'subiect' => "<li>"
];
$close_tags = [
'subiecte' => "</ol></section>",
'subiect' => "</li>"
];
// instanțiază și inițializează analizorul
$parser = new parseXML();
$parser->set_xml_file('web-test.xml');
$parser->set_open_tags($open_tags);
$parser->set_close_tags($close_tags);
// rulează analizorul XML
$parser->parse();
echo $parser->get_html_code(); // redarea codului HTML generat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
// programul PHP ce afișează propunerile de subiecte de teste scrise
require("parseXML.php");
// substituția via două tablouri asociative a elementelor XML cu cod HTML
// (cheia = element XML de intrare, valoarea cheii = marcaj HTML rezultat)
$open_tags = [
'subiecte' => "<section><ol>",
'subiect' => "<li>"
];
$close_tags = [
'subiecte' => "</ol></section>",
'subiect' => "</li>"
];
// instanțiază și inițializează analizorul
$parser = new parseXML();
$parser->set_xml_file('web-test.xml');
$parser->set_open_tags($open_tags);
$parser->set_close_tags($close_tags);
// rulează analizorul XML
$parser->parse();
echo $parser->get_html_code(); // redarea codului HTML generat
arborele DOM al
reprezentării obținute
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
(în loc de) pauză
When HTML is life…
www.reddit.com/r/ProgrammerHumor/
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
sax vs. dom
Când poate fi folosit SAX?
procesarea unor documente de mari dimensiuni
necesitatea abandonării procesării
(procesorul SAX poate fi oprit oricând)
extragerea unor informații de mici dimensiuni
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
sax vs. dom
Când poate fi folosit SAX?
crearea unei structuri noi de document XML
utilizarea în contextul unor resurse de calcul reduse
(memorie scăzută, lărgime de bandă îngustă,...)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
sax vs. dom
Când poate fi folosit SAX?
crearea unei structuri noi de document XML
utilizarea în contextul unor resurse de calcul reduse
(memorie scăzută, lărgime de bandă îngustă,...)
exemplificare pentru Android:
developer.android.com/reference/javax/xml/parsers/SAXParser.html
cod demonstrativ pentru iOS – SeismicXML:
developer.apple.com/library/archive/samplecode/SeismicXML/
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
sax vs. dom
Când poate fi utilizat DOM?
accesul direct la datele dintr-un document XML
procesări sofisticate
filtrarea complexă a datelor via XPath
efectuarea de transformări XSL
validarea datelor XML prin DTD, XML Schema etc.
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
sax vs. dom
Când poate fi utilizat DOM?
necesitatea modificării și/sau salvării documentelor XML
în contextul procesării datelor XML/HTML direct
în cadrul navigatorului Web, date obținute eventual
via transferuri asincrone prin Ajax
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
sax vs. dom
DOM necesită încărcarea
completă în memorie
a documentului XML
în vederea procesării
ca arbore
HTML
HtmlElement
HTML
BodyElement
HTML
AsideElement
Text
HTML
DivElement
HTML
ImageElement
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
sax vs. dom
SAX preia fragmente reduse din document,
efectuându-se o prelucrare liniară
(șir de evenimente)
start tag
start tag
characters
end tag
end tag
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
sax vs. dom
SAX poate fi utilizat
pentru generarea de arbori DOM
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
sax vs. dom
SAX poate fi utilizat
pentru generarea de arbori DOM
Invers, arborii DOM pot fi traversați
pentru a se emite evenimente SAX
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
sax vs. dom
SAX poate fi utilizat
pentru generarea de arbori DOM
Invers, arborii DOM pot fi traversați
pentru a se emite evenimente SAX
exemplificări:
modulul dom-js (Node.js), biblioteca lxml (Python)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
sax vs. dom
În cazul unor structuri XML sofisticate,
maniera de procesare SAX poate fi inadecvată
procesările SAX ignoră
contextul apariției unui anumit element
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
sax vs. dom: exemplificare
Fie structura de document XML,
specificată prin următorul DTD:
<!DOCTYPE catalog [
<!ELEMENT catalog (categ+)>
<!ELEMENT categ (#PCDATA | categ)*>
]>
Ce metodă de procesare s-ar preta, dacă numărul de
elemente <categ> ar fi foarte mare?
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
sax vs. dom
Unele implementări SAX oferă suport
pentru validări de date, expresii XPath
și transformări
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
sax vs. dom
Uzual, în funcție de necesități,
se folosesc și DOM și SAX
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Există și alte metode de procesare XML?
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Procesarea documentelor XML
alternative:
XPP – XML Pull Parsing
„legarea” datelor XML
procesare simplificată
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
alternative: xml pull parsing
Stiluri de procesări XML conduse de evenimente:
push versus pull
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
alternative: xml pull parsing
Stiluri de procesări XML conduse de evenimente:
push = procesorul XML citește date XML și notifică
aplicația asupra evenimentelor survenite
(parsing events) – SAX
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
alternative: xml pull parsing
Stiluri de procesări XML conduse de evenimente:
push = procesorul XML citește date XML și notifică
aplicația asupra evenimentelor survenite
(parsing events) – SAX
programul nu poate face cereri de evenimente
ele apar așa cum sunt trimise (push) de procesor
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
alternative: xml pull parsing
Stiluri de procesări XML conduse de evenimente:
pull = aplicația controlează maniera de procesare și poate
solicita (pull) procesorului următorul eveniment XML
XPP – XML Pull Parsing
www.xmlpull.org
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
alternative: xml pull parsing
Stiluri de procesări XML conduse de evenimente:
pull = aplicația controlează maniera de procesare și poate
solicita (pull) procesorului următorul eveniment XML
XPP – XML Pull Parsing
structura codului-sursă al programului
reflectă structura documentului XML prelucrat
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
xml pull parsing – implementări
StAX – Streaming API for XML (Java) – JSR 173
exemple de implementări:
Aalto – github.com/FasterXML/aalto-xml
Javolution – axat asupra performanței: javolution.org
Oracle StAX – inclus în XDK (XML Developer’s Kit)
docs.oracle.com/javase/tutorial/jaxp/stax/
Woodstox – github.com/FasterXML/woodstox
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
xml pull parsing – implementări
irrXML – inițial, parte din Irrlicht 3D Engine (C++)
pull – pachet Scala de procesare XPP
QXmlStreamReader, QXmlStreamWriter din mediul Qt (C++)
saxpath – modul Node.js permițând evaluarea
de expresii XPath pentru un flux de evenimente SAX
xml.dom.pulldom – soluție Python
XmlPullParser – interfață Java pentru Android
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
alternative
Clasificare a manierelor de procesare XML
mod de accesare: secvențial vs. direct (random)
controlul fluxului de evenimente: pull vs. push
managementul arborelui: ierarhic vs. imbricat
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
alternative
DOM
acces direct, în stilul pull
SAX
acces secvențial, în stilul push
XPP și .NET XmlTextReader
acces secvențial, în stilul pull
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
alternative
„Legarea” datelor XML de alte surse de date
(XML binding)
baze de date: XML infoset  dataset

<doc>
<xml />
<!-- … -->
</doc>
Id P A S
1 … … …
2 … … …
3 … … …
<doc>
<xml />
<!-- … -->
</doc>
data sets
(tables)
arbore DOM
(în memorie)
fișier
XML
DBMS
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
alternative
XML binding
baze de date: XML infoset  dataset
specificația SQL/XML – vezi standardul SQL:2016-14
aspecte de interes:
tipul XML pentru valori ale câmpurilor tabelelor
recurgerea la predicate + funcții specifice XML
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
baze de date: XML infoset  dataset
implementări concrete:
Oracle XML DB
docs.oracle.com/cd/B28359_01/appdev.111/b28369/xdb01int.htm
a se consulta și SQLXML (J2SE 8+)
docs.oracle.com/javase/tutorial/jdbc/basics/sqlxml.html
pureXML (IBM DB2)
www.ibm.com/developerworks/data/library/techarticle/dm-0603saracco2/
XML Data (Microsoft SQL Server)
docs.microsoft.com/en-us/sql/relational-databases/xml/xml-data-sql-server
a se studia și clasa SqlXml (.NET Framework)
docs.microsoft.com/en-us/dotnet/api/system.data.sqltypes.sqlxml
XML Functions (PostgreSQL)
www.postgresql.org/docs/current/static/functions-xml.html
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
alternative
XML binding
abordare obiectuală:
date XML  clase create „din zbor”
(serialization, marshalling)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
abordare obiectuală:
date XML  clase create „din zbor”
exemple:
C++ – cereal: uscilab.github.io/cereal/
C++, C#, Go, Java, Ruby, Python,… – Protocol Buffers
developers.google.com/protocol-buffers/
JS – node-xml2js: github.com/Leonidas-from-XIV/node-xml2js
.NET (C# et al.) – clasa XmlSerializer
docs.microsoft.com/en-us/dotnet/standard/serialization/introducing-xml-serialization
PHP – extensia SimpleXML
Python – Untangle: github.com/stchris/untangle
Scala – scalaxb: scalaxb.org
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
alternative
XML binding
interogări asupra datelor XML
direct în limbajul de programare
LINQ (Language INtegrated Query) – .NET Framework
docs.microsoft.com/dotnet/articles/csharp/programming-guide/concepts/linq/linq-to-xml
resurse de interes:
github.com/aloisdg/awesome-linq
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
XDocument proiecte; // XDocument e o clasă .NET
proiecte = XDocument.Load ("projects.xml");
var proiecteM =
// via o expresie LINQ, preluăm toate proiectele
from p in proiecte.Descendants ("project")
// din care le alegem pe cele de clasa 'M'
where (String) p.Attribute ("class") == "M"
// ordonate după numărul de studenți
orderby (String) p.Element ("stud")
// selectând doar titlul acestora
select (String) p.Element ("title");
// afișăm titlul proiectelor de clasa 'M'
foreach (var proiect in proiecteM) {
Console.WriteLine (proiect);
}
// același rezultat, recurgând la XPath
var proiecteM2 = (IEnumerable)
proiecte.XPathEvaluate ("//project[@class='M']/title");
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
alternative
XML binding
JAXB – Java Architecture for XML Binding (JSR-222)
jcp.org/en/jsr/detail?id=222
tutorial: docs.oracle.com/javase/tutorial/jaxb/
implementarea de referință: github.com/eclipse-ee4j/jaxb-ri
de experimentat și EclipseLink: www.eclipse.org/eclipselink/
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
alternative
XML binding
interoperabilitate cu alte formate: XML  JSON
nu există o metodă standardizată
exemplificări de instrumente și biblioteci:
Apache Camel (Java), js2xmlparser (Node.js),
JSON-lib (Java), ruby-xml-to-json, x2js (JavaScript),
xml2json (Node.js), xml-to-json (Haskell), xmlutils.py
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
alternative
Procesarea XML simplificată
scop:
procesarea unui document XML (de mici dimensiuni)
direct în memorie,
în manieră obiectuală,
diferită de DOM
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
alternative
Procesarea XML simplificată
uzual, adoptă maniera de prelucrare XPP
(XML Pull Parsing)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
alternative
Procesarea XML simplificată
fiecărui element XML îi poate corespunde
o proprietate a unui obiect
atributele asociate elementelor XML pot fi modelate
via o structură de date – e.g., tablou asociativ
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
alternative
Procesarea XML simplificată
extensii PHP:
SimpleXML
php.net/manual/en/book.simplexml.php
XMLReader
www.php.net/manual/en/book.xmlreader.php
XMLWriter
www.php.net/manual/en/book.xmlwriter.php
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
// încărcăm documentul XML
$xml = simplexml_load_file('http://web.info/projects.xml');
// afișăm descrierile proiectelor de clasă M
foreach ($xml->project as $proj) {
if ($proj['class'] == 'M') {
echo '<p>' . $proj->desc . '</p>';
}
}
// similar, dar utilizând XPath
foreach ($xml->xpath("//project[@class='M']") as $proj) {
echo '<p>' . $proj->desc . '</p>';
}
de consultat
exemplele din arhivă
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
simple xml: exemplificare
Preluarea unei știri dintr-un flux RSS
(document XML) pentru a genera prin program
o reprezentare JSON a datelor de interes
feed.rss.xml – document XML modelând știri oferite de un sit
rss2json.php – programul PHP de conversie a datelor
de studiat exemplele
din arhivă
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
<rss version="2.0" xml:base="https://www.programmableweb.com/rss_blog">
<channel>
<title>ProgrammableWeb</title>
<link>https://www.programmableweb.com/rss_blog</link>
</channel>
<!-- date despre o știre -->
<item>
<title>10 Top APIs for the Internet of Things</title>
<link>
http://feedproxy.google.com/~r/ProgrammableWeb/~3/h3VsGYmzNxg/29
</link>
<description>…</description>
<pubDate>Sun, 29 Mar 2020 14:46:24 -0400</pubDate>
<guid isPermaLink="false">77881259158</guid>
<!-- alte marcaje -->
</item>
<!-- alte elemente item… -->
</rss>
datele intrare modelate de documentul RSS
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
define('FLUX', 'feed.rss.xml'); // poate fi folosit un URI real
// (e.g., https://feeds.feedburner.com/ProgrammableWeb)
$json = ''; // va conține datele JSON generate prin program
$xml = @simplexml_load_file(FLUX);
// folosim o expresie XPath pentru a prelua prima știre din fluxul RSS
$stire = $xml->xpath("//item")[0];
// obiectul JSON va include proprietățile 'title' (titlul știrii),
// 'link' (adresa Web) și 'date' (data publicării) preluate din documentul RSS
$json .= "{ "title" : "" . $stire->title . "",";
$json .= " "link" : "" . $stire->link . "",";
$json .= " "date" : "" . $stire->pubDate . "" }";
// trimitem datele spre client folosind câmpul MIME (Media Type) adecvat
header("Content-type: application/json; charset=utf-8");
echo $json;
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
{
"title" : "10 Top APIs for the Internet of Things ",
"link" : "http://feedproxy.google.com/…/h3VsGYmzNxg/29",
"date" : "Sun, 29 Mar 2020 14:46:24 -0400"
}
datele JSON generate pe server și trimise clientului Web
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
alternative
Procesarea XML simplificată
alte exemplificări:
libxml (C, C++ și alte limbaje)
XML::Simple + XML::Writer (Perl)
XmlSimple (Ruby)
XmlTextReader + XmlTextWriter (.NET)
avansat
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
alternative
Procesarea XML simplificată
pentru consultare, se poate folosit
un „cititor” (reader): XMLReader
exemple:
modulul xmlreader pentru Node.js
xmlReader oferit de biblioteca libxml (C et al.)
XMLReader (PHP)
clasa XmlReader oferită de .NET (C# et al.)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
alternative
Procesarea XML simplificată
pentru generare, se poate utiliza
un „scriitor” (writer): XMLWriter
exemplificări:
clasa XmlWriter pentru .NET
xmlWriter din cadrul bibliotecii libxml (C et al.)
XMLWriter (PHP)
modulul xml-writer pentru Node.js
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
Cum pot fi procesate documentele HTML?
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
procesare html
Aspect de interes:
ignorarea erorilor de sintaxă
documente bine formatate (well formed)
respectarea regulilor minimale privind marcajele
versus
documente valide
conform unei scheme de validare – e.g., DTD
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
procesare html
Aspect de interes:
ignorarea erorilor de sintaxă
malformed markup
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
procesare html
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
procesare html
Aspect de interes:
ignorarea erorilor de sintaxă
malformed markup
sunt relativ rare cazurile în care documentele HTML
sunt scrise/generate corect
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
procesare html
Tehnica folosită uzual – nerecomandată
Web scraping
extragerea datelor de interes
prin prelucrarea – de obicei, empirică –
a marcajelor HTML
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
procesare html
Tehnica folosită uzual – nerecomandată
Web scraping
extragerea datelor de interes
prin prelucrarea – de obicei, empirică –
a marcajelor HTML
un exemplu recurgând la expresii regulate 😰
scraping.pro/scraping-in-php-with-curl/
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
procesare html
Recurgerea la un procesor HTML/XML specific
scopuri importante:
traversarea (procesarea) unei pagini Web – e.g., via DOM
+
detectarea și repararea erorilor sintactice (HTML clean)
vezi și cursurile
anterioare
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
procesare html: instrumente
Beautiful Soup – bibliotecă Python
www.crummy.com/software/BeautifulSoup/
goquery și soup – biblioteci Go
github.com/PuerkitoBio/goquery
github.com/anaskhan96/soup
html5lib – procesare + serializare HTML pentru Python
github.com/html5lib
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
procesare html: instrumente
HTML-Parser – modul Perl
github.com/gisle/html-parser
HAP (Html Agility Pack) – bibliotecă .NET (C#)
html-agility-pack.net
Jericho HTML Parser – bibliotecă Java de procesare HTML
jericho.htmlparser.net
jsoup – bibliotecă Java pentru HTML5
jsoup.org
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
procesare html: instrumente
Masterminds HTML5-PHP – procesor HTML5 în PHP
github.com/Masterminds/html5-php
Parse5 – modul Node.js
github.com/inikulin/parse5
Simple HTML DOM Parser – bibliotecă PHP
simplehtmldom.sourceforge.io
SwiftSoup – bibliotecă Swift (macOS, iOS, tvOS + Linux)
github.com/scinfu/SwiftSoup
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
procesare html: instrumente
HtmlCleaner – instrument implementat în Java pentru
corectarea marcajelor HTML eronate
HTML Purifier – verificare + filtrare a marcajelor HTML
(inclusiv vizând atacuri de tip XSS – Cross Site Scripting)
cu implementări în PHP și Objective-C
NekoHTML – procesor Java pentru HTML bazat pe Xerces
cu suport pentru rezolvarea erorilor sintactice
Validator.nu – procesor Java folosind DOM ori SAX
cu semnalarea erorilor de sintaxă HTML5
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
procesare html: instrumente – exemplu
Preluarea datelor despre produse (albume musicale)
– denumire, cod de bare și preț – din documente HTML
(invalide) oferite de un sit Web de profil
se recurge la biblioteca Simple HTML DOM Parser
pentru PHP, disponibilă sub licență deschisă (open source)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
procesare html: instrumenteincorect!
(malformed markup)
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
require_once('simple_html_dom.php');
define('URL', 'https://www.nicherecords.ro/catalog/'); // URL-ul sitului sursă
$cai_produse = [ // căile spre produse (i.e. documentele HTML procesate)
"pop-rock/rock-psihedelic/pink-floyd-the-wall-dvd.html",
"jazz/jazz-1/nina-simone-silk-soul-vinyl.html",
"clasica/clasica-1/bach-simply-bach-cd.html",
"metal/heavy-metal/king-diamond-graveyard-vinyl-1.html" ];
foreach ($cai_produse as $cale) { // preluăm date despre fiecare produs
$html = file_get_html(URL . $cale);
$prod = $html->find("span.alb", 0)->plaintext;
$cod_bare = explode(": ", $html->find("span.barcode", 0)->plaintext)[1];
$pret = (int) explode(" ", $html->find("span.price", 0)->plaintext)[0];
printf("<p><a title='Detalii' href='%s'>%s</a> &ndash;
cod de bare: <code>%s</code>, preț: %d RON.</p>",
URL . $cale, $prod, $cod_bare, $pret);
}
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
procesare html: instrumente
reprezentarea HTML a datelor preluate de pe situl Web
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
rezumat
⦑ ⦒
procesări XML: de la SAX la XPP și Simple XML
instrumente de prelucrare a documentelor HTML
mulțumiri lui Andrei Panu, PhD
Dr.SabinBuragaprofs.info.uaic.ro/~busaco/
episodul viitor: servicii Web prin SOAP
sistem SOAP
codificare XML
✉
împachetare date
sistem SOAP
decodificare XML
✉
despachetare date
protocol de
transport
protocol de
transport→ →
mesaj SOAP
legare (binding)
expeditor (sender) destinatar (receiver)orice tip de date
Internet
(intermediari)

Más contenido relacionado

La actualidad más candente

Web 2016 (02/13) Programare Web – Protocolul HTTP. Cookie-uri. Sesiuni Web
Web 2016 (02/13) Programare Web – Protocolul HTTP. Cookie-uri. Sesiuni WebWeb 2016 (02/13) Programare Web – Protocolul HTTP. Cookie-uri. Sesiuni Web
Web 2016 (02/13) Programare Web – Protocolul HTTP. Cookie-uri. Sesiuni WebSabin Buraga
 
Web 2016 (06/13) Modelarea datelor. Familia XML + spații de nume
Web 2016 (06/13) Modelarea datelor. Familia XML + spații de numeWeb 2016 (06/13) Modelarea datelor. Familia XML + spații de nume
Web 2016 (06/13) Modelarea datelor. Familia XML + spații de numeSabin Buraga
 
CLIW 2015-2016 (10/13) Programare Web. Suita de tehnologii HTML5
CLIW 2015-2016 (10/13) Programare Web. Suita de tehnologii HTML5CLIW 2015-2016 (10/13) Programare Web. Suita de tehnologii HTML5
CLIW 2015-2016 (10/13) Programare Web. Suita de tehnologii HTML5Sabin Buraga
 
Web 2016 (05/13) Programare Web – Dezvoltarea aplicațiilor Web via Node.js
Web 2016 (05/13) Programare Web – Dezvoltarea aplicațiilor Web via Node.jsWeb 2016 (05/13) Programare Web – Dezvoltarea aplicațiilor Web via Node.js
Web 2016 (05/13) Programare Web – Dezvoltarea aplicațiilor Web via Node.jsSabin Buraga
 
CLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de client
CLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de clientCLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de client
CLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de clientSabin Buraga
 
Web 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie Web
Web 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie WebWeb 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie Web
Web 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie WebSabin Buraga
 
CLIW 2015-2016 (8/13) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...
CLIW 2015-2016 (8/13) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...CLIW 2015-2016 (8/13) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...
CLIW 2015-2016 (8/13) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...Sabin Buraga
 
CLIW 2015-2016 (9/13) Ingineria dezvoltării aplicațiilor JavaScript
CLIW 2015-2016 (9/13) Ingineria dezvoltării aplicațiilor JavaScriptCLIW 2015-2016 (9/13) Ingineria dezvoltării aplicațiilor JavaScript
CLIW 2015-2016 (9/13) Ingineria dezvoltării aplicațiilor JavaScriptSabin Buraga
 
CLIW 2015-2016 (7/13) Limbajul de programare JavaScript
CLIW 2015-2016 (7/13) Limbajul de programare JavaScriptCLIW 2015-2016 (7/13) Limbajul de programare JavaScript
CLIW 2015-2016 (7/13) Limbajul de programare JavaScriptSabin Buraga
 
Căutarea resurselor Web
Căutarea resurselor WebCăutarea resurselor Web
Căutarea resurselor WebSabin Buraga
 
Node.js: aspecte esențiale
Node.js: aspecte esențialeNode.js: aspecte esențiale
Node.js: aspecte esențialeSabin Buraga
 
CLIW 2015-2016 (6/13) (Re)găsirea resurselor Web. De la motoare de căutare și...
CLIW 2015-2016 (6/13) (Re)găsirea resurselor Web. De la motoare de căutare și...CLIW 2015-2016 (6/13) (Re)găsirea resurselor Web. De la motoare de căutare și...
CLIW 2015-2016 (6/13) (Re)găsirea resurselor Web. De la motoare de căutare și...Sabin Buraga
 
Web 2016 (01/13) Spațiul World Wide Web – aspecte arhitecturale
Web 2016 (01/13) Spațiul World Wide Web – aspecte arhitecturaleWeb 2016 (01/13) Spațiul World Wide Web – aspecte arhitecturale
Web 2016 (01/13) Spațiul World Wide Web – aspecte arhitecturaleSabin Buraga
 
CLIW 2015-2016 (11/13) Programare Web. API-uri JavaScript în contextul HTML5
CLIW 2015-2016 (11/13) Programare Web. API-uri JavaScript în contextul HTML5CLIW 2015-2016 (11/13) Programare Web. API-uri JavaScript în contextul HTML5
CLIW 2015-2016 (11/13) Programare Web. API-uri JavaScript în contextul HTML5Sabin Buraga
 
HTML5 în XXX de minute
HTML5 în XXX de minuteHTML5 în XXX de minute
HTML5 în XXX de minuteSabin Buraga
 
CLIW 2017-2018 (7/12) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...
CLIW 2017-2018 (7/12) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...CLIW 2017-2018 (7/12) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...
CLIW 2017-2018 (7/12) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...Sabin Buraga
 
CLIW 2017-2018 (5/12) Limbajul de programare JavaScript. Aspecte esenţiale
CLIW 2017-2018 (5/12) Limbajul de programare JavaScript. Aspecte esenţialeCLIW 2017-2018 (5/12) Limbajul de programare JavaScript. Aspecte esenţiale
CLIW 2017-2018 (5/12) Limbajul de programare JavaScript. Aspecte esenţialeSabin Buraga
 
CLIW 2015-2016 (13/13) Perspective Web la nivel de client. Limbajul ES6
CLIW 2015-2016 (13/13) Perspective Web la nivel de client. Limbajul ES6CLIW 2015-2016 (13/13) Perspective Web la nivel de client. Limbajul ES6
CLIW 2015-2016 (13/13) Perspective Web la nivel de client. Limbajul ES6Sabin Buraga
 
Limbajul JavaScript: o prezentare generală
Limbajul JavaScript: o prezentare generalăLimbajul JavaScript: o prezentare generală
Limbajul JavaScript: o prezentare generalăSabin Buraga
 
CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...
CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...
CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...Sabin Buraga
 

La actualidad más candente (20)

Web 2016 (02/13) Programare Web – Protocolul HTTP. Cookie-uri. Sesiuni Web
Web 2016 (02/13) Programare Web – Protocolul HTTP. Cookie-uri. Sesiuni WebWeb 2016 (02/13) Programare Web – Protocolul HTTP. Cookie-uri. Sesiuni Web
Web 2016 (02/13) Programare Web – Protocolul HTTP. Cookie-uri. Sesiuni Web
 
Web 2016 (06/13) Modelarea datelor. Familia XML + spații de nume
Web 2016 (06/13) Modelarea datelor. Familia XML + spații de numeWeb 2016 (06/13) Modelarea datelor. Familia XML + spații de nume
Web 2016 (06/13) Modelarea datelor. Familia XML + spații de nume
 
CLIW 2015-2016 (10/13) Programare Web. Suita de tehnologii HTML5
CLIW 2015-2016 (10/13) Programare Web. Suita de tehnologii HTML5CLIW 2015-2016 (10/13) Programare Web. Suita de tehnologii HTML5
CLIW 2015-2016 (10/13) Programare Web. Suita de tehnologii HTML5
 
Web 2016 (05/13) Programare Web – Dezvoltarea aplicațiilor Web via Node.js
Web 2016 (05/13) Programare Web – Dezvoltarea aplicațiilor Web via Node.jsWeb 2016 (05/13) Programare Web – Dezvoltarea aplicațiilor Web via Node.js
Web 2016 (05/13) Programare Web – Dezvoltarea aplicațiilor Web via Node.js
 
CLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de client
CLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de clientCLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de client
CLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de client
 
Web 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie Web
Web 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie WebWeb 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie Web
Web 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie Web
 
CLIW 2015-2016 (8/13) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...
CLIW 2015-2016 (8/13) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...CLIW 2015-2016 (8/13) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...
CLIW 2015-2016 (8/13) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...
 
CLIW 2015-2016 (9/13) Ingineria dezvoltării aplicațiilor JavaScript
CLIW 2015-2016 (9/13) Ingineria dezvoltării aplicațiilor JavaScriptCLIW 2015-2016 (9/13) Ingineria dezvoltării aplicațiilor JavaScript
CLIW 2015-2016 (9/13) Ingineria dezvoltării aplicațiilor JavaScript
 
CLIW 2015-2016 (7/13) Limbajul de programare JavaScript
CLIW 2015-2016 (7/13) Limbajul de programare JavaScriptCLIW 2015-2016 (7/13) Limbajul de programare JavaScript
CLIW 2015-2016 (7/13) Limbajul de programare JavaScript
 
Căutarea resurselor Web
Căutarea resurselor WebCăutarea resurselor Web
Căutarea resurselor Web
 
Node.js: aspecte esențiale
Node.js: aspecte esențialeNode.js: aspecte esențiale
Node.js: aspecte esențiale
 
CLIW 2015-2016 (6/13) (Re)găsirea resurselor Web. De la motoare de căutare și...
CLIW 2015-2016 (6/13) (Re)găsirea resurselor Web. De la motoare de căutare și...CLIW 2015-2016 (6/13) (Re)găsirea resurselor Web. De la motoare de căutare și...
CLIW 2015-2016 (6/13) (Re)găsirea resurselor Web. De la motoare de căutare și...
 
Web 2016 (01/13) Spațiul World Wide Web – aspecte arhitecturale
Web 2016 (01/13) Spațiul World Wide Web – aspecte arhitecturaleWeb 2016 (01/13) Spațiul World Wide Web – aspecte arhitecturale
Web 2016 (01/13) Spațiul World Wide Web – aspecte arhitecturale
 
CLIW 2015-2016 (11/13) Programare Web. API-uri JavaScript în contextul HTML5
CLIW 2015-2016 (11/13) Programare Web. API-uri JavaScript în contextul HTML5CLIW 2015-2016 (11/13) Programare Web. API-uri JavaScript în contextul HTML5
CLIW 2015-2016 (11/13) Programare Web. API-uri JavaScript în contextul HTML5
 
HTML5 în XXX de minute
HTML5 în XXX de minuteHTML5 în XXX de minute
HTML5 în XXX de minute
 
CLIW 2017-2018 (7/12) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...
CLIW 2017-2018 (7/12) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...CLIW 2017-2018 (7/12) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...
CLIW 2017-2018 (7/12) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...
 
CLIW 2017-2018 (5/12) Limbajul de programare JavaScript. Aspecte esenţiale
CLIW 2017-2018 (5/12) Limbajul de programare JavaScript. Aspecte esenţialeCLIW 2017-2018 (5/12) Limbajul de programare JavaScript. Aspecte esenţiale
CLIW 2017-2018 (5/12) Limbajul de programare JavaScript. Aspecte esenţiale
 
CLIW 2015-2016 (13/13) Perspective Web la nivel de client. Limbajul ES6
CLIW 2015-2016 (13/13) Perspective Web la nivel de client. Limbajul ES6CLIW 2015-2016 (13/13) Perspective Web la nivel de client. Limbajul ES6
CLIW 2015-2016 (13/13) Perspective Web la nivel de client. Limbajul ES6
 
Limbajul JavaScript: o prezentare generală
Limbajul JavaScript: o prezentare generalăLimbajul JavaScript: o prezentare generală
Limbajul JavaScript: o prezentare generală
 
CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...
CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...
CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...
 

Similar a Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări simplificate

Web 2016 (09/13) Procesarea datelor XML & HTML. Simple API for XML. Procesări...
Web 2016 (09/13) Procesarea datelor XML & HTML. Simple API for XML. Procesări...Web 2016 (09/13) Procesarea datelor XML & HTML. Simple API for XML. Procesări...
Web 2016 (09/13) Procesarea datelor XML & HTML. Simple API for XML. Procesări...Sabin Buraga
 
Web 2016 (07/13) Modelarea datelor. Extragerea datelor cu XPath. Validări XML...
Web 2016 (07/13) Modelarea datelor. Extragerea datelor cu XPath. Validări XML...Web 2016 (07/13) Modelarea datelor. Extragerea datelor cu XPath. Validări XML...
Web 2016 (07/13) Modelarea datelor. Extragerea datelor cu XPath. Validări XML...Sabin Buraga
 
WADe 2014—2015 (supliment): Dezvoltare Web via node.js
WADe 2014—2015 (supliment): Dezvoltare Web via node.jsWADe 2014—2015 (supliment): Dezvoltare Web via node.js
WADe 2014—2015 (supliment): Dezvoltare Web via node.jsSabin Buraga
 
O lectie de anatomie Web. Disectia unui document HTML
O lectie de anatomie Web. Disectia unui document HTMLO lectie de anatomie Web. Disectia unui document HTML
O lectie de anatomie Web. Disectia unui document HTMLSabin Buraga
 
CLIW 2014—2015 (8/12): JavaScript în navigatorul Web
CLIW 2014—2015 (8/12): JavaScript în navigatorul WebCLIW 2014—2015 (8/12): JavaScript în navigatorul Web
CLIW 2014—2015 (8/12): JavaScript în navigatorul WebSabin Buraga
 
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #12): Programare Web....
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #12): Programare Web....Dezvoltarea aplicaţiilor Web la nivel de client (cursul #12): Programare Web....
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #12): Programare Web....Sabin Buraga
 
WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An ...
WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An ...WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An ...
WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An ...Sabin Buraga
 
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #2): Arhitectura navi...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #2): Arhitectura navi...Dezvoltarea aplicaţiilor Web la nivel de client (cursul #2): Arhitectura navi...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #2): Arhitectura navi...Sabin Buraga
 
Web 2016 (08/13) Procesarea datelor XML & HTML. Document Object Model
Web 2016 (08/13) Procesarea datelor XML & HTML. Document Object ModelWeb 2016 (08/13) Procesarea datelor XML & HTML. Document Object Model
Web 2016 (08/13) Procesarea datelor XML & HTML. Document Object ModelSabin Buraga
 
WADe 2014—2015 (06/12): Semantic Web—Managementul datelor RDF. Interogarea da...
WADe 2014—2015 (06/12): Semantic Web—Managementul datelor RDF. Interogarea da...WADe 2014—2015 (06/12): Semantic Web—Managementul datelor RDF. Interogarea da...
WADe 2014—2015 (06/12): Semantic Web—Managementul datelor RDF. Interogarea da...Sabin Buraga
 
CLIW 2014—2015 (7/12): Programare în limbajul JavaScript
CLIW 2014—2015 (7/12): Programare în limbajul JavaScriptCLIW 2014—2015 (7/12): Programare în limbajul JavaScript
CLIW 2014—2015 (7/12): Programare în limbajul JavaScriptSabin Buraga
 
CLIW 2017-2018 (8/12) Ingineria dezvoltării aplicaţiilor JavaScript
CLIW 2017-2018 (8/12) Ingineria dezvoltării aplicaţiilor JavaScriptCLIW 2017-2018 (8/12) Ingineria dezvoltării aplicaţiilor JavaScript
CLIW 2017-2018 (8/12) Ingineria dezvoltării aplicaţiilor JavaScriptSabin Buraga
 
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #9): JavaScript în na...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #9): JavaScript în na...Dezvoltarea aplicaţiilor Web la nivel de client (cursul #9): JavaScript în na...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #9): JavaScript în na...Sabin Buraga
 
CLIW 2014—2015 (2/12): Arhitectura navigatorului Web
CLIW 2014—2015 (2/12): Arhitectura navigatorului WebCLIW 2014—2015 (2/12): Arhitectura navigatorului Web
CLIW 2014—2015 (2/12): Arhitectura navigatorului WebSabin Buraga
 
CLIW 2015-2016 (2/13) Arhitectura navigatorului Web
CLIW 2015-2016 (2/13) Arhitectura navigatorului WebCLIW 2015-2016 (2/13) Arhitectura navigatorului Web
CLIW 2015-2016 (2/13) Arhitectura navigatorului WebSabin Buraga
 
CLIW 2017-2018 (2/12) Arhitectura navigatorului Web
CLIW 2017-2018 (2/12) Arhitectura navigatorului WebCLIW 2017-2018 (2/12) Arhitectura navigatorului Web
CLIW 2017-2018 (2/12) Arhitectura navigatorului WebSabin Buraga
 
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.Sabin Buraga
 
STAW 05/12: Arhitectura navigatorului Web
STAW 05/12: Arhitectura navigatorului WebSTAW 05/12: Arhitectura navigatorului Web
STAW 05/12: Arhitectura navigatorului WebSabin Buraga
 
Web 2016 (12/13) Interacțiune Web cu Ajax. Aplicații Web hibride (mash-up-uri)
Web 2016 (12/13) Interacțiune Web cu Ajax. Aplicații Web hibride (mash-up-uri)Web 2016 (12/13) Interacțiune Web cu Ajax. Aplicații Web hibride (mash-up-uri)
Web 2016 (12/13) Interacțiune Web cu Ajax. Aplicații Web hibride (mash-up-uri)Sabin Buraga
 
Programare Web - PHP (o prezentare generala)
Programare Web - PHP (o prezentare generala)Programare Web - PHP (o prezentare generala)
Programare Web - PHP (o prezentare generala)Sabin Buraga
 

Similar a Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări simplificate (20)

Web 2016 (09/13) Procesarea datelor XML & HTML. Simple API for XML. Procesări...
Web 2016 (09/13) Procesarea datelor XML & HTML. Simple API for XML. Procesări...Web 2016 (09/13) Procesarea datelor XML & HTML. Simple API for XML. Procesări...
Web 2016 (09/13) Procesarea datelor XML & HTML. Simple API for XML. Procesări...
 
Web 2016 (07/13) Modelarea datelor. Extragerea datelor cu XPath. Validări XML...
Web 2016 (07/13) Modelarea datelor. Extragerea datelor cu XPath. Validări XML...Web 2016 (07/13) Modelarea datelor. Extragerea datelor cu XPath. Validări XML...
Web 2016 (07/13) Modelarea datelor. Extragerea datelor cu XPath. Validări XML...
 
WADe 2014—2015 (supliment): Dezvoltare Web via node.js
WADe 2014—2015 (supliment): Dezvoltare Web via node.jsWADe 2014—2015 (supliment): Dezvoltare Web via node.js
WADe 2014—2015 (supliment): Dezvoltare Web via node.js
 
O lectie de anatomie Web. Disectia unui document HTML
O lectie de anatomie Web. Disectia unui document HTMLO lectie de anatomie Web. Disectia unui document HTML
O lectie de anatomie Web. Disectia unui document HTML
 
CLIW 2014—2015 (8/12): JavaScript în navigatorul Web
CLIW 2014—2015 (8/12): JavaScript în navigatorul WebCLIW 2014—2015 (8/12): JavaScript în navigatorul Web
CLIW 2014—2015 (8/12): JavaScript în navigatorul Web
 
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #12): Programare Web....
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #12): Programare Web....Dezvoltarea aplicaţiilor Web la nivel de client (cursul #12): Programare Web....
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #12): Programare Web....
 
WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An ...
WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An ...WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An ...
WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An ...
 
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #2): Arhitectura navi...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #2): Arhitectura navi...Dezvoltarea aplicaţiilor Web la nivel de client (cursul #2): Arhitectura navi...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #2): Arhitectura navi...
 
Web 2016 (08/13) Procesarea datelor XML & HTML. Document Object Model
Web 2016 (08/13) Procesarea datelor XML & HTML. Document Object ModelWeb 2016 (08/13) Procesarea datelor XML & HTML. Document Object Model
Web 2016 (08/13) Procesarea datelor XML & HTML. Document Object Model
 
WADe 2014—2015 (06/12): Semantic Web—Managementul datelor RDF. Interogarea da...
WADe 2014—2015 (06/12): Semantic Web—Managementul datelor RDF. Interogarea da...WADe 2014—2015 (06/12): Semantic Web—Managementul datelor RDF. Interogarea da...
WADe 2014—2015 (06/12): Semantic Web—Managementul datelor RDF. Interogarea da...
 
CLIW 2014—2015 (7/12): Programare în limbajul JavaScript
CLIW 2014—2015 (7/12): Programare în limbajul JavaScriptCLIW 2014—2015 (7/12): Programare în limbajul JavaScript
CLIW 2014—2015 (7/12): Programare în limbajul JavaScript
 
CLIW 2017-2018 (8/12) Ingineria dezvoltării aplicaţiilor JavaScript
CLIW 2017-2018 (8/12) Ingineria dezvoltării aplicaţiilor JavaScriptCLIW 2017-2018 (8/12) Ingineria dezvoltării aplicaţiilor JavaScript
CLIW 2017-2018 (8/12) Ingineria dezvoltării aplicaţiilor JavaScript
 
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #9): JavaScript în na...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #9): JavaScript în na...Dezvoltarea aplicaţiilor Web la nivel de client (cursul #9): JavaScript în na...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #9): JavaScript în na...
 
CLIW 2014—2015 (2/12): Arhitectura navigatorului Web
CLIW 2014—2015 (2/12): Arhitectura navigatorului WebCLIW 2014—2015 (2/12): Arhitectura navigatorului Web
CLIW 2014—2015 (2/12): Arhitectura navigatorului Web
 
CLIW 2015-2016 (2/13) Arhitectura navigatorului Web
CLIW 2015-2016 (2/13) Arhitectura navigatorului WebCLIW 2015-2016 (2/13) Arhitectura navigatorului Web
CLIW 2015-2016 (2/13) Arhitectura navigatorului Web
 
CLIW 2017-2018 (2/12) Arhitectura navigatorului Web
CLIW 2017-2018 (2/12) Arhitectura navigatorului WebCLIW 2017-2018 (2/12) Arhitectura navigatorului Web
CLIW 2017-2018 (2/12) Arhitectura navigatorului Web
 
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.
 
STAW 05/12: Arhitectura navigatorului Web
STAW 05/12: Arhitectura navigatorului WebSTAW 05/12: Arhitectura navigatorului Web
STAW 05/12: Arhitectura navigatorului Web
 
Web 2016 (12/13) Interacțiune Web cu Ajax. Aplicații Web hibride (mash-up-uri)
Web 2016 (12/13) Interacțiune Web cu Ajax. Aplicații Web hibride (mash-up-uri)Web 2016 (12/13) Interacțiune Web cu Ajax. Aplicații Web hibride (mash-up-uri)
Web 2016 (12/13) Interacțiune Web cu Ajax. Aplicații Web hibride (mash-up-uri)
 
Programare Web - PHP (o prezentare generala)
Programare Web - PHP (o prezentare generala)Programare Web - PHP (o prezentare generala)
Programare Web - PHP (o prezentare generala)
 

Más de Sabin Buraga

Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...Sabin Buraga
 
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...Sabin Buraga
 
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţiale
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţialeWeb 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţiale
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţialeSabin Buraga
 
STAW 01/12: Arhitectura aplicaţiilor Web
STAW 01/12: Arhitectura aplicaţiilor WebSTAW 01/12: Arhitectura aplicaţiilor Web
STAW 01/12: Arhitectura aplicaţiilor WebSabin Buraga
 
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţiale
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţialeSTAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţiale
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţialeSabin Buraga
 
STAW 04/12: Programare Web: Node.js
STAW 04/12: Programare Web: Node.jsSTAW 04/12: Programare Web: Node.js
STAW 04/12: Programare Web: Node.jsSabin Buraga
 
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uri
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uriSTAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uri
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uriSabin Buraga
 
STAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScript
STAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScriptSTAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScript
STAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScriptSabin Buraga
 
STAW 08/12: Programare Web. Suita de tehnologii HTML5
STAW 08/12: Programare Web. Suita de tehnologii HTML5STAW 08/12: Programare Web. Suita de tehnologii HTML5
STAW 08/12: Programare Web. Suita de tehnologii HTML5Sabin Buraga
 
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)Sabin Buraga
 
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)Sabin Buraga
 
STAW 11/12: Performanţa aplicaţiilor Web la nivel de client
STAW 11/12: Performanţa aplicaţiilor Web la nivel de clientSTAW 11/12: Performanţa aplicaţiilor Web la nivel de client
STAW 11/12: Performanţa aplicaţiilor Web la nivel de clientSabin Buraga
 
STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...
STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...
STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...Sabin Buraga
 
Sabin Buraga: Dezvoltator Web?! (2019)
Sabin Buraga: Dezvoltator Web?! (2019)Sabin Buraga: Dezvoltator Web?! (2019)
Sabin Buraga: Dezvoltator Web?! (2019)Sabin Buraga
 
HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...
HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...
HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...Sabin Buraga
 
HCI 2018 (3/10) Design Models, Methodologies and Guidelines
HCI 2018 (3/10) Design Models, Methodologies and GuidelinesHCI 2018 (3/10) Design Models, Methodologies and Guidelines
HCI 2018 (3/10) Design Models, Methodologies and GuidelinesSabin Buraga
 
HCI 2018 (4/10) Information Architecture. From Design Patterns to Visual Design
HCI 2018 (4/10) Information Architecture. From Design Patterns to Visual DesignHCI 2018 (4/10) Information Architecture. From Design Patterns to Visual Design
HCI 2018 (4/10) Information Architecture. From Design Patterns to Visual DesignSabin Buraga
 
HCI 2018 (5/10) Information Architecture. From Design Patterns to Flow
HCI 2018 (5/10) Information Architecture. From Design Patterns to FlowHCI 2018 (5/10) Information Architecture. From Design Patterns to Flow
HCI 2018 (5/10) Information Architecture. From Design Patterns to FlowSabin Buraga
 
HCI 2018 (6/10) Design Patterns for Social (Web/mobile) Interactions
HCI 2018 (6/10) Design Patterns for Social (Web/mobile) InteractionsHCI 2018 (6/10) Design Patterns for Social (Web/mobile) Interactions
HCI 2018 (6/10) Design Patterns for Social (Web/mobile) InteractionsSabin Buraga
 
HCI 2018 (7/10) HCI Engineering. UI Evaluation. Models
HCI 2018 (7/10) HCI Engineering. UI Evaluation. ModelsHCI 2018 (7/10) HCI Engineering. UI Evaluation. Models
HCI 2018 (7/10) HCI Engineering. UI Evaluation. ModelsSabin Buraga
 

Más de Sabin Buraga (20)

Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
 
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
 
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţiale
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţialeWeb 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţiale
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţiale
 
STAW 01/12: Arhitectura aplicaţiilor Web
STAW 01/12: Arhitectura aplicaţiilor WebSTAW 01/12: Arhitectura aplicaţiilor Web
STAW 01/12: Arhitectura aplicaţiilor Web
 
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţiale
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţialeSTAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţiale
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţiale
 
STAW 04/12: Programare Web: Node.js
STAW 04/12: Programare Web: Node.jsSTAW 04/12: Programare Web: Node.js
STAW 04/12: Programare Web: Node.js
 
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uri
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uriSTAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uri
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uri
 
STAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScript
STAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScriptSTAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScript
STAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScript
 
STAW 08/12: Programare Web. Suita de tehnologii HTML5
STAW 08/12: Programare Web. Suita de tehnologii HTML5STAW 08/12: Programare Web. Suita de tehnologii HTML5
STAW 08/12: Programare Web. Suita de tehnologii HTML5
 
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)
 
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)
 
STAW 11/12: Performanţa aplicaţiilor Web la nivel de client
STAW 11/12: Performanţa aplicaţiilor Web la nivel de clientSTAW 11/12: Performanţa aplicaţiilor Web la nivel de client
STAW 11/12: Performanţa aplicaţiilor Web la nivel de client
 
STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...
STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...
STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...
 
Sabin Buraga: Dezvoltator Web?! (2019)
Sabin Buraga: Dezvoltator Web?! (2019)Sabin Buraga: Dezvoltator Web?! (2019)
Sabin Buraga: Dezvoltator Web?! (2019)
 
HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...
HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...
HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...
 
HCI 2018 (3/10) Design Models, Methodologies and Guidelines
HCI 2018 (3/10) Design Models, Methodologies and GuidelinesHCI 2018 (3/10) Design Models, Methodologies and Guidelines
HCI 2018 (3/10) Design Models, Methodologies and Guidelines
 
HCI 2018 (4/10) Information Architecture. From Design Patterns to Visual Design
HCI 2018 (4/10) Information Architecture. From Design Patterns to Visual DesignHCI 2018 (4/10) Information Architecture. From Design Patterns to Visual Design
HCI 2018 (4/10) Information Architecture. From Design Patterns to Visual Design
 
HCI 2018 (5/10) Information Architecture. From Design Patterns to Flow
HCI 2018 (5/10) Information Architecture. From Design Patterns to FlowHCI 2018 (5/10) Information Architecture. From Design Patterns to Flow
HCI 2018 (5/10) Information Architecture. From Design Patterns to Flow
 
HCI 2018 (6/10) Design Patterns for Social (Web/mobile) Interactions
HCI 2018 (6/10) Design Patterns for Social (Web/mobile) InteractionsHCI 2018 (6/10) Design Patterns for Social (Web/mobile) Interactions
HCI 2018 (6/10) Design Patterns for Social (Web/mobile) Interactions
 
HCI 2018 (7/10) HCI Engineering. UI Evaluation. Models
HCI 2018 (7/10) HCI Engineering. UI Evaluation. ModelsHCI 2018 (7/10) HCI Engineering. UI Evaluation. Models
HCI 2018 (7/10) HCI Engineering. UI Evaluation. Models
 

Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări simplificate