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