.NET web szolgáltatások ASP.NET harmadik rész XML, XPATH Bilicki Vilmos bilickiv@inf.u-szeged.hu www.inf.u-szeged.hu/~bilickiv
Az előző előadás tartalma ASP.NET Saját vezérlők gyártása Állapot kezelés Alkalmazás állapot Viszony állapot Állapot mentés Süti URL Gyorstár kezelés Cache objektum Kimeneti gyorstár Web alkalmazás telepítése
A mai előadás tartalma ASP.NET felasználó azonosítás XML kezelés IIS Név nélküli Alap Kivonatolt Windows beágyazott Űrlap alapú Microsoft Passport XML kezelés XML dokumentum XPATH kifejezések Bevezető XPath adat modell Navigálás a dokumentumban elérési utak segítségével Operátorok és Függvények használata elérési utakban
Források Microsoft 2310B official curriculum Microsoft 1913A official curriculum http://www.gotdotnet.com/ Eszköz http://www.xmlcooktop.com/
ASP.NET azonosítási megoldások Windows-alapú azonosítás Az operációs rendszertől és az IIS-től függ Űrlap alapú hitelesítés Az azonosítatlan kérések egy HTML űrlapra lesznek átirányítva A felhasználó itt bizonyítja azonosságát Egy sütit kap ajándékba Microsoft Passport hitelesítés Központosított, egyszeri belépés A Microsoft Passport egy XML Web szolgáltatás
Összehasonlítás Módszer Előnyök Hátrányok Windows alapú A meglévő infrastruktúrát használja Érzékeny adatokhoz megfelelő Nem alkalmas internetre Űrlap alapú Alkalmas internetre Minden klienst támogat Süti alapú Microsoft Passport Sok helyre egyszeri belépés Nem kell foglalkozni a felhasználói adatbázissal A regisztrációs oldal testreszabható Nem ingyenes
IIS azonosítási megoldások Módszer Biztonsági szint Leírás Anonymous Nincs (IUSR_gepnev ) Nincs azonosítás Alap Alacsony (közepes ha SSL-t haszáluk) A név és jelszó titkosítítlan Titkosítható SSL-lel A HTTP specifikáció része Kivonatolt Közepes Az információt kivonatolva küldi el Szügséges legalább Internet Explorer 5 Szükség van Active Directory-ra Windows integrált Magas NTLM-et vagy Kerberos-t használ Intranetre jó, Internetre nem A tűzfalak nem engedik át
DEMÓ IIS IIS azonosítási eljárások
Secure Sockets Layer SSL titkosítási réteg: Adat titkosítás -Csak a címzett érti meg Kölcsönös azonosítás -Digitális tanúsítvány segítségével Adat integritás -Ne írhasson bele észrevétlenül harmadik fél Fölötte tipikusan a HTTP protokoll használatos
Windows alapú azonosítás(1) IIS: Alap Kivonat Integrált Windows azonosítás A Web.config-ban is be kell álítani 1 2 <system.web> <authentication mode="Windows" /> </system.web>
Windows alapú azonosítás(2) Jogosultság beállítás Web.config IIS infromáció kérés 3 <location path="ShoppingCart.aspx"> <system.web> <authorization> <deny users="?"/> </authorization> </system.web> </location> 4
Felhasználói infó olvasása Azonosítás után olvashatjuk a felhasználói információkat lblAuthUser.Text = User.Identity.Name; lblAuthType.Text = User.Identity.AuthenticationType; lblIsAuth.Text = User.Identity.IsAuthenticated;
Űrlap alapú azonosítás IIS 1 2 ASP.NET Űrlap azonosítás Nincs Azonosítva Azonosítva A kliens lekér egy oldalt Username 6 Someone 4 Jogosultságok Hozzáférés megtagadva Password Logon Page (Users enter their credentials) *********** Nincs Azonosítva Submit 3 Azonosítva Azonosítási süti Jogosultságok 7 Requested Secure Page 5
Engedélyezése IIS név nélküli bejelentkezés Web.config Jogosultságok 1 IIS név nélküli bejelentkezés Web.config Jogosultságok Belépő űrlap létrehozása 2 <authentication mode="Forms" > <forms name=".namesuffix" loginUrl="login.aspx" /> </authentication> 3 4
Belépő űrlap System.Web.Security Felhasználó ellenőrzése Sütiből olvasás User.Identity.Name FormsAuthentication.RedirectFromLoginPage private void cmdLogin_Click(object sender, EventArgs e) { if (login(txtEmail.Text, txtPassword.Text)) FormsAuthentication.RedirectFromLoginPage(txtEmail.Text, false); }
Microsoft Passport A kliens lekér egy oldalt 1 Website.msft Az oldal átirányítja a Passport.com-ra 2 A kliens bejelentkezik a Passport.com-ra 3 4 Süti, jeggyel Kliens csatlakozik a weboldalunkhoz 5 6 A host visszaad egy Web űrlapot és egy sütit Client Passport.com
XML Adat reprezentáció XML-ben XML dokumentumok transzformációja XSLT-vel
XML dokumentum struktúra XML deklaráció <?xml version="1.0"?> <employees> </employees> xmlns="urn:nwtraders"> Dokumentum elem <employee> <name>…</name> <salary>…</salary> </employee> id="123" start="1997"> Carol Philips</name> 145000</salary> Elemek Tulajdonságok <employee> <name>…</name> <salary>…</salary> </employee> id="456" start="2000"> Szöveg tartalom Mike Reid</name> 91000</salary> Névterek
Névterek Alapértelmezett névtér xmlns=“egy-névtér-URI” A névterek URI-t, tipikusan URL-t használnak "http://www.nwtraders.msft" "urn:nwtraders" Alapértelmezett névtér xmlns=“egy-névtér-URI” <employees xmlns="urn:nwtraders"> Nem alapértelmezett névtér xmlns:a-prefix=“a-namespace-URI” <lit:employees xmlns:lit="urn:nwtraders">
XSLT Segítségével egy XML dokumentumot egy másik formátumra transzformálhatunk Sok kimenete lehet: Egy HTML dokumentum Másik XML dokumentum Egyszerű szöveg (EDI üzenet) PDF WML …
XSLT képességek Sok különböző transzformációra képes Példák: Egy XML szintaxis másikra cserélése Adat szűrés Adat rendezés XML átstruktúrálás Számítások elvégzése
XML HTML-é transzformálás XSLT XML dokumentum HTML dokumentum + XSLT processor XSLT stílus lap <employees> <employee> <name>Reid</name> <salary>91000</salary> </employee> … </employees> <HTML><TABLE> <TR> <TD>Reid</TD> <TD>91000</TD> </TR> … </TABLE></HTML>
XML más XML szintakszissá Más szintakszis XML dokumentum Más XML nyelvtan + XSLT processor XSLT stílus lap <employees> <employee> <name>Reid</name> <salary>91000</salary> </employee> … </employees> <staff> <staff-member name="Reid" pay="91000"/> … </staff>
XPath Bevezető XPath adat modell Navigálás a dokumentumban elérési utak segítségével Operátorok és Függvények használata elérési utakban
XPath W3C szabvány Az XML dokumentumot faként kezeli Gyökér Elem Tulajdonság Szöveg Megjegyzés Feldolgozási információ Névterek Segítségével csomópontokat, vagy csomópontok csoportjait jelölhetjük ki Elérési útvonalak csomópontok kijelölésére XPath operátorok és függvények
XPath Miért használjuk Az XSLT stílus lapokban, minta illesztésre A DOM-ban,csomópontok kiválasztására XML XPath XPath XML XPointer-ben, a dokumentumok csatolására SQL Server-nél, XML-t is tud generálni
Csomópontok kiválasztása DOM Metódusok az XML fa kezelésére MSXML selectSingelNode selectNodes Set document = CreateObject("MSXML2.DOMDocument.3.0") document.setProperty "SelectionLanguage", "XPath" Document.async = False document.load("MyCatalog.xml") Set catalogNode = document.selectSingleNode("//catalog") Set productNodes = catalog.selectNodes("product")
XML DEMÓ(1)
Csomópont információk XPath fa struktúra és csomópont típusok A csomópontokbó kinyerhető információk DOM használata
XPath fa struktúra XML dokumentum XPath faként <catalog xmlns="urn:litwareinc"> <?proc instr?> <!--comment--> <product code="123"> Blue jeans </product> </catalog> "123" "Blue jeans" Root "urn:litware" "comment " "proc-instr" <product> "urn:litwareinc" <catalog>
A csomópontokbó kinyerhető információk Minden csomópont rendelkezik tulajdonságokkal Csomópont típusok Gyökér Egyed Tulajdonság Szöveg Névtér Feld. utasítások Megjegyzés Tulajdonságok Érték Név Szülő csomóp. Gyerek csomóp.
Csomópontok használata DOM-ban A csomópontko tulajdonságaihoz hozzáférhetünk a DOM tulajdonságokon keresztül Set node = document.selectSingleNode("//product") MsgBox "Text value: " & node.text MsgBox "Node base-name: " & node.baseName MsgBox "Namespace prefix: " & node.prefix MsgBox "Namespace URI: " & node.namespaceURI Set parent = node.parentNode MsgBox "Name of parent: " & parent.baseName Set children = node.childNodes For Each child In children …
Elérési útvonalak használata Mi az elérési útvonal? Elérési útvanalak szerkezete Tengelyek (Axes) Tengelyek használata elérési útvonalban Csomópont kritériumok Predikátumok használata
Elérési útvonalak Elérési útvonal egy olyan XPath kifejezés mely XML dokumentumban egy vagy több elemet jelöl ki Lehet: Relatív A jelenlegi csomóponthoz viszonyítva Abszolút ”/” karakterrel kezdődik A gyökérhez viszonyítja
Elérési útvonalak Útvonalat ábrázol Balról jobbra vannak kiértékelve Relatív útvonal Abszolút útvonal Balról jobbra vannak kiértékelve Útvonal az XML dokumentumban Minden lépés három részből áll Példa lépés product/price /catalog/product/price axis::node-test[predicate]… child::product[price > 35.95][3]
Tengelyek self following child following-sibling parent preceding <catalog> <product code="123"> <price>35.99</price> </product> <product code="456"> <price>22.95</price> <discount> <amount>25</amount> </discount> <product code="789"> <price>185.00</price> </catalog> <catalog> <product code="123"> <price>35.99</price> </product> <product code="456"> <price>22.95</price> <discount> <amount>25</amount> </discount> <product code="789"> <price>185.00</price> </catalog> self following child following-sibling parent preceding attribute preceding-sibling descendant descendant-or-self ancestor ancestor-or-self Root node <catalog> <product> <product> <product> code=123 <price> code=456 <price> <discount> code=789 <price> 35.99 22.95 <amount> 185.00 25
Tengelyek használata A gyakori XPath tengelyeknek van rövidített alakja is A többinek nincs Példa – ancestor::node() Tengely Példa teljes Példa rövidített child child::price price attribute attribute::code @code self self::node() . parent parent::node() .. descendant-or-self /descendant-or-self()/price //price
Csomópont kritériumok Név alapján Egy adott név Minden csomóp. Név és névtér Minden csomóp. a név.térben Típus alapján axis::node-type-function() Például a gyermek tengelyen: Child examples Attribute examples price @code * @* aprefix:price @aprefix:code aprefix:* @aprefix:* text() processing-instruction() node() comment()
Predikátumok használata Egy lépés egy vagy több predikátumot használhat Csomópont gyűjtemény szűrése Pozíció Partalom Létezés alapján Több predikátumot is használhatunk Balról jobbra vannak kiértékelve axis::node-test[predicate]… product[last()] product[@code="123"] product[@code] product[3][@discount]
DEMÓ XML COOKTOP
Operátorok és függvények használata Csomópont gyűjtemény kifejezések és függvények Logikai kifejezések és függvények Szám kifejezések és függvények Karakterlánc kifejezések és függvények
Csomópont gyűjtemény Az elérési útvonalak csomópont gyűjteményt adnak vissza Csomópont gyűjteményeket (“ | ”) jellel tudunk összefűzni Gyűjtemény függvények is használhatóak cd | dvd /*/(cd | dvd) (cd | dvd)/@capacity cd[position() = last()] count(cd[@capacity > 5.8])
Logikai kifejezések Logikai operátorok = != > >= < <= Logikai függvények Példa: product[(price > 25 and price < 35) or price > 50] true() false() boolean() not() lang() product[not(@code) and not(discount-policy)]
Szám kifejezések Egyenlőtlenség Bináris operátorok, + - * div mod Függvények Példa account[balance >= - overdraft-limit] account[(balance mod 100) > 0] number() floor() ceiling() round() sum() account[sum(transaction-amount) > 0]
Karakterláncok Kerekterlánc szűrő Karakterlánc módosító string-length(customer/@last-name) customer[ starts-with(@last-name, "Mac") ] customer[ contains(@last-name, "Mac") ] concat(@last-name, "[", @first-name, "]") substring(@middle-name, 1, 1) substring-before("12/3/1964", "/") or substring-after normalize-space(" To be or not to be ") translate(str, "aeiou", "AEIOU")
Tanácsok Rövidített szintakszist használjuk ha van Egyszerűbb karbantartani Kerüljük a túl általános kifejezéseket: // Ha tudjuk akkor szűkítsük le: /*/product Ne használjuk a count() –ot arra hogy megnáézzük van-e eleme Használjuk a last()-ot Ne használjuk a name() a név vizsgálatra Használjuk a namespace-URI() és local-name() függvényeket helyette
A mai előadás tartalma ASP.NET felasználó azonosítás XML kezelés IIS Név nélküli Alap Kivonatolt Windows beágyazott Űrlap alapú Microsoft Passport XML kezelés XML dokumentum XPATH kifejezések Bevezető XPath adat modell Navigálás a dokumentumban elérési utak segítségével Operátorok és Függvények használata elérési utakban
A következő előadás tartalma XML XSLT