XLink i XPointer
Transkrypt
XLink i XPointer
XLink i XPointer środa, 4 stycznia 12 XLink - XML Linking Language • XLink jest wykorzystywany do tworzenia linków w dokumentach XML • Każdy element XML może zachowywać się jako link • XLink wspiera linki proste (np. w dokumentach HTML) oraz linki rozszerzone (ang. extended) pozwalające na połączenie wielu zasobów • Za pomocą XLink możliwe jest tworzenie linków definiowanych poza plikiem do którego się odnoszą. • XLink jest rekomendacją W3C środa, 4 stycznia 12 XPointer XML Pointer Language • XPointer pozwalają linkom wskazywać na określoną część dokumentu XML • XPointer wykorzystuje wyrażenia XPath do nawigacji po dokumentach XML • XPointer jest rekomendacją W3C środa, 4 stycznia 12 Przykład wykorzystania XLink <?xml version="1.0"?> <homepages xmlns:xlink="http://www.w3.org/1999/xlink"> <homepage xlink:type="simple" xlink:href="http://www.w3schools.com"> Visit W3Schools </homepage> <homepage xlink:type="simple" xlink:href="http://www.w3.org"> Visit W3C </homepage> </homepages> środa, 4 stycznia 12 XLink • Aby uzyskać dostęp do atrybutów XLink konieczne jest zdefiniowanie przestrzeni nazw XLink "http://www.w3.org/1999/xlink". • Z przestrzeni nazw XLink pochodzą atrybuty xlink:type oraz xlink:href wykorzystane w znaczniku homepage. • Typ linku „simple” (xlink:type="simple") tworzy prosty link o dwóch zakończeniach (ang. two-ended link), którego działanie można opisać jako „kliknij tu, aby pójść tam” (ang. "click from here to go there"). środa, 4 stycznia 12 XPointer • Hiperłącza (ang. hyperlink) w HTML wskazują na stronę HTML lub zakładkę wewnątrz dokumentu HTML (wykorzystując #). • W niektórych sytuacjach konieczne jest utworzenie łączą wskazującego na konkretny element dokumentu, np. na trzeci element listy, albo drugie zdanie piątego paragrafu. • Jeśli łącze ma wskazywać na konkretny element dokument XML możliwe jest dodanie wskaźnika XPointer po adresie URL wewnątrz atrybutu xlink:href. Wskaźnik Xpointer za pomocą wyrażenia XPath wskazuje na określone miejsce w dokumencie XML. • Wykorzystanie wskaźnika XPointer do wskazania piątego elementu listy o id „osoby”: href="http://www.example.com/cdlist.xml#id('osoby').child(5,item)" środa, 4 stycznia 12 XLink - przykład <?xml version="1.0" encoding="ISO-8859-1"?> <bookstore xmlns:xlink="http://www.w3.org/1999/xlink"> <book title="Harry Potter"> <description xlink:type="simple" xlink:href="http://book.com/images/HPotter.gif" xlink:show="new"> As his fifth year at Hogwarts School of Witchcraft and Wizardry approaches, 15-year-old Harry Potter is....... </description> </book> </bookstore> środa, 4 stycznia 12 XLink - atrybuty • xlink:type="simple" - definiuje typ łącza. Typ „simple” tworzy prosty link w stylu linków HTML. Możliwe jest również tworzenie złożonych linków wielokierunkowych. • xlink:href - definiuje adres URL łącza • xlink:show - określa gdzie otworzyć łącze. ‣ xlink:show="new" oznacza, że link zostanie otworzony w nowym oknie. ‣ xlink:show="embed" oznacza, że zasób, na który wskazuje powinien zostać przetworzony jako „inline” wewnątrz dokumentu. • xlink:actuate - atrybut określający, kiedy zasób wskazywany przez link ma zostać załadowany. ‣ xlink:actuate="onLoad" oznacza, że zasób powinien zostać załadowany i pokazany w momencie załadowania dokumentu. ‣ xlink:actuate="onRequest" oznacza, że zasób nie powinien zostać odczytany i załadowany zanim link zostanie kliknięty. środa, 4 stycznia 12 XPointer • Łącza XLink pozwalają na utworzenie łącza do całego dokumentu. XPointer pozwala na wskazanie określonej części dokumentu. W tym celu do linku URL po znaku # należy dołączyć wyrażenie XPointer. • #xpointer(id("Rottweiler")) - wskazuje na element, którego id jest równe "Rottweiler" <?xml version="1.0" encoding="ISO-8859-1"?> <dogbreeds> <dog breed="Rottweiler" id="Rottweiler"> <picture url="http://dog.com/rottweiler.gif" /> <history>The Rottweiler's ancestors were probably Roman drover dogs.....</history> <temperament>Confident, bold, alert and imposing, the Rottweiler is a popular choice for its ability to protect....</temperament> </dog> <dog breed="FCRetriever" id="FCRetriever"> <picture url="http://dog.com/fcretriever.gif" /> <history>One of the earliest uses of retrieving dogs was to help fishermen retrieve fish from the water....</history> <temperament>The flat-coated retriever is a sweet, exuberant, lively dog that loves to play and retrieve </temperament> </dog> </dogbreeds> • atrybut xlink:href wskazujący na ten element wygląda następująco: xlink:href="http://dog.com/dogbreeds.xml#xpointer(id('Rottweiler'))" środa, 4 stycznia 12 Skrócone łącza XLink • Podczas tworzenia łączy do elementów o konkretnym id XLink pozwala na tworzenie skrótów. • Łącze: xlink:href="http://dog.com/dogbreeds.xml#Rottweiler" jest równoznaczne z poprzednio wykorzystywanym: xlink:href="http://dog.com/dogbreeds.xml#xpointer(id('Rottweiler'))" środa, 4 stycznia 12 XLink - kompletny przykład <?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="ISO-8859-1"?> <dogbreeds> <mydogs xmlns:xlink="http://www.w3.org/1999/xlink"> <dog breed="Rottweiler" id="Rottweiler"> <picture url="http://dog.com/rottweiler.gif" /> <history>The Rottweiler's ancestors were probably Roman drover dogs.....</history> <temperament>Confident, bold, alert and imposing, the Rottweiler is a popular choice for its ability to protect....</temperament> </dog> <mydog xlink:type="simple" xlink:href="http://dog.com/dogbreeds.xml#Rottweiler"> <description xlink:type="simple" xlink:href="http://myweb.com/mydogs/anton.gif"> Anton is my favorite dog. He has won a lot of..... </description> </mydog> <dog breed="FCRetriever" id="FCRetriever"> <picture url="http://dog.com/fcretriever.gif" /> <history>One of the earliest uses of retrieving dogs was to help fishermen retrieve fish from the water....</history> <temperament>The flat-coated retriever is a sweet, exuberant, lively dog that loves to play and retrieve </temperament> </dog> </dogbreeds> środa, 4 stycznia 12 <mydog xlink:type="simple" xlink:href="http://dog.com/dogbreeds.xml#FCRetriever"> <description xlink:type="simple" xlink:href="http://myweb.com/mydogs/pluto.gif"> Pluto is the sweetest dog on earth...... </description> </mydog> </mydogs> JSON środa, 4 stycznia 12 JSON • JSON - JavaScript Object Notation. • „Lekki”, tekstowy format wymiany danych. • Niezależny od języka programowania i systemu operacyjnego. JSON wykorzystuje składnię JavaScript do opisu obiektów, ale mimo to nadal zachowuje niezależność od języka i platformy. • Biblioteki parsujące format JSON są dostępne dla większości języków programowania. • JSON to format samoopisujący się i łatwy do zrozumienia. środa, 4 stycznia 12 JSON - przykład { "employees": [ { "firstName":"John" , "lastName":"Doe" }, { "firstName":"Anna" , "lastName":"Smith" }, { "firstName":"Peter" , "lastName":"Jones" } ] } środa, 4 stycznia 12 JSON vs. XML • Podobieństwa: ‣ format tekstowy (plain text) ‣ samoopisujący się i czytelny dla użytkownika ‣ hierarchiczny (obiekty wewnątrz innych obiektów) • Różnice: ‣ brak znaczników zamykających ‣ krótszy ‣ szybszy zapis i odczyt ‣ wykorzystuje tablice ‣ brak zastrzeżonych słów kluczowych środa, 4 stycznia 12 Składnia JSONa • Dane w JSONie są przechowywane jako pary klucz/wartość: "firstName" : "John" • Wartości JSON mogą być typu: ‣ liczbowego (integer lub float) ‣ ciąg znakowy (string w podwójnych cudzysłowach) ‣ wartości logiczne (true lub false) ‣ tablice (w nawiasach kwadratowych) ‣ obiekt (w nawiasach klamrowych) ‣ null środa, 4 stycznia 12 Obiekty JSON • Obiekty JSON są umieszczane w nawiasach klamrowych i mogą zawierać wiele par nazwa/wartość. { "firstName":"John" , "lastName":"Doe" } środa, 4 stycznia 12 Tablice JSON • Tablice JSON są umieszczane w nawiasach kwadratowych. Tablica mże zawierać wiele obiektów. { "employees": [ { "firstName":"John" , "lastName":"Doe" }, { "firstName":"Anna" , "lastName":"Smith" }, { "firstName":"Peter" , "lastName":"Jones" } ] } środa, 4 stycznia 12 Ciąg znaków • String jest sekwencją zero lub więcej znaków Unicode zamkniętych w podwójne cudzysłowy. Możliwe jest wykorzystanie sekwencji unikowych zaczynających się od „/” (ang. backslash escapes). Pojedynczy znak jest traktowany jako ciąg znaków składających się z jednego znaku. środa, 4 stycznia 12 JSON i obiekty JavaScript • Składnia obiektów JSON jest identyczna jak składnia kodu wykorzystywanego do tworzenia obiektów w JavaScript. Dostęp do obiektów utworzonych za pomocą JSONa jest identyczny jak do natywnych obiektów JavaScript: <html> <body> <p> Name: <span id="jname"></span><br /> Age: <span id="jage"></span><br /> Address: <span id="jstreet"></span><br /> Phone: <span id="jphone"></span><br /> </p> <script type="text/javascript"> var JSONObject= { "name":"John Johnson", "street":"Oslo West 555", "age":33, "phone":"555 1234567"}; document.getElementById("jname").innerHTML=JSONObject.name document.getElementById("jage").innerHTML=JSONObject.age document.getElementById("jstreet").innerHTML=JSONObject.street document.getElementById("jphone").innerHTML=JSONObject.phone </script> </body> </html> środa, 4 stycznia 12 JSON, JavaScript i funkcja eval • Funkcja eval() traktuje ciąg tekstowy przekazany jako argument jako fragment kodu, wykonuje go lub interpretuje, np. <html> <body> Suma_txt: <span id="stxt"></span><br /> Suma_eval: <span id="seval"></span> <script type="text/javascript"> var suma_txt = "1+2"; var suma_eval = eval("1+2"); document.getElementById("stxt").innerHTML=suma_txt document.getElementById("seval").innerHTML=suma_eval </script> </body> Suma_txt: 1+2 </html> Suma_eval: 3 środa, 4 stycznia 12 JSON, JavaScript i funkcja eval • W języku JavaScript nie ma potrzeby używania parserów. • W celu przekształcenia dokumentu tekstowego do obiektu wystarczy użyć metody eval() i przekazać do niej tekst zawierający dane w formacie JSON. • Funkcja eval zwróci obiekt, który może być wykorzystywany tak samo jak natywne obiekty JavaScript. • Dane tekstowe w formacie JSON przekazane do funkcji eval powinny zostać zamknięte w nawiasy okrągłe. • Np JSON: { "imie": "Ala" } var JSONobject = eval( "( { \"imie\": \"Ala\" } )" ); środa, 4 stycznia 12 JSON, JavaScript i funkcja eval <html> <body> Imie: <span id="imie_label"></span><br /> ( {"osoby": [ {"imie": "Jan", "wiek":23}, {"imie": "Jan", "wiek":23} ] } ) Wiek: <span id="wiek_label"></span> <script type="text/javascript"> var jsonO = eval("( {\"osoby\": [{\"imie\": \"Jan\", \"wiek\":23}, {\"imie\": \"Ala\", \"wiek\":25} ] } )"); document.getElementById("imie_label").innerHTML= jsonO.osoby[1].imie document.getElementById("wiek_label").innerHTML= jsonO.osoby[1].wiek </script> </body> </html> Imie: Ala Wiek: 25 środa, 4 stycznia 12 JSON w Java (www.json.org) • Dostępne obiekty: ‣ JSONObject ‣ JSONArray ‣ JSONStringer ‣ JSONWriter ‣ JSONTokener • Konstrukcja obiektu - parsowanie dokumentu tekstowego: ‣ JSONObject(java.lang.String source) środa, 4 stycznia 12 JSONObject • Nieuporządkowana kolekcja par nazwa/wartość. • „Zewnętrzną” reprezentacją jest ciąg znakowy zamknięty w nawiasach klamrowych z przecinkami pomiędzy parami nazwa/wartość i dwukropkiem pomiędzy nazwą i wartością. • „Wewnętrzna” struktura to obiekt udostępniający metody get() i opt() umożliwiające dostęp do elementów. • Dodawanie/zastępowanie elementów za pomocą metody put(). • Wartości mogą być typu: ‣ Boolean, ‣ JSONArray, ‣ JSONObject, ‣ Number, ‣ String, ‣ JSONObject.NULL. • Metoda toString() pozwala na zapis obiektu do ciągu znakowego w formacie JSON. środa, 4 stycznia 12 JSONObject • Odczyt wartości bez kontroli typu: ‣ java.lang.Object get(java.lang.String key) • Odczyt wartości z kontrolą typu: ‣ boolean getBoolean(java.lang.String key) ‣ double getDouble(java.lang.String key) ‣ int getInt(java.lang.String key) ‣ JSONArray getJSONArray(java.lang.String key) ‣ JSONObject getJSONObject(java.lang.String key) • Jeśli wartość dla danego klucza nie istnieje, lub w przypadku metod z kontrolą typu, jeśli wartość jest innego typu niż oczekiwany wyrzucany jest wyjątek JSONException. środa, 4 stycznia 12 JSONArray • JSONArray - uporządkowana sekwencja obiektów. • „Zewnętrzną” reprezentacją jest ciąg znaków pomiędzy nawiasami kwadratowymi, elementy tablicy rozdzielone są przecinkami. • „Wewnętrzna” struktura to obiekt udostępniający metody get() i opt() umożliwiające na dostęp do elementów za pomocą indeksu. • Metoda put pozwalająca na dodawanie lub zastępowanie elementów. Metoda put przyjmująca jeden parametr dołącza element na końcu tablicy, natomiast metoda przyjmująca dwa elementy pozwala na wstawienie elementu dla konkretnego indeksu tablicy. • Wartości mogą być typu: ‣ Boolean, ‣ JSONArray, ‣ JSONObject, ‣ Number, ‣ String, ‣ JSONObject.NULL. środa, 4 stycznia 12 JSONWriter • JSONWriter to obiekt pozwalający na szybkie tworzenie dokumentów w formacie JSON. • JSONWriter array() rozpoczyna dołączanie elementów do tablicy • JSONWriter endArray() zakończenie tablicy • JSONWriter object() rozpoczęcie tworzenia obiektu • JSONWriter endObject() koniec obiektu • JSONWriter key(java.lang.String string) dołącza klucz • JSONWriter value(boolean b) JSONWriter value(double d) JSONWriter value(long l) JSONWriter value(java.lang.Object object) dołącza wartość dla klucza środa, 4 stycznia 12 JSONWriter - przykład new JSONWriter(myWriter).object().key("JSON").value("Hello, World!").endObject(); spowoduje utworzenie ciągu znakowego {"JSON":"Hello, World!"} środa, 4 stycznia 12