ROZŠIŘITELNÝ ZNAČKOVACÍ JAZYK XML Jaroslav Šmarda titl CZ Rozšiřitelný značkovací jazyk XML Jaroslav Šmarda zahlavi CZ Rozšiřitelný značkovací jazyk XML * XML jako standardní textový formát pro výměnu informací zahlavi CZ Značkovací jazyky * Standard Generalized Markup Language (SGML) * HTML (HyperText Markup Language) – jazyk webových stránek * XML (eXtensible Markup Language) – rozšiřitelný značkovací jazyk * Skupina jazyků pro komunikaci mezi aplikacemi čitelná pro člověka zahlavi CZ XML jako standardní textový formát pro výměnu informací * XML (eXtensible Markup Language): * výměna a sdílení informací * pro dokumenty obsahující strukturované nebo semistrukturované informace * internetové aplikace (XSL definice vzhledu XML dokumentu) * databázové technologie * standardizace datových struktur * XML je metajazyk, tedy souhrn pravidel pro tvorbu jednotlivých XML jazyků zahlavi CZ 1. příklad souboru v XML formátu Robert A+ Lenard A- zahlavi CZ 2. příklad souboru ve formátu XML VIDEO: Tři muži přepadli na pumpě cizince http://www.denik.cz/z_domova/video-tri-muzi-prepadli-na-pumpe- cizince20110212.html Karlovarsko /FOTOGALERIE/ - K loupežnému přepadení dvou cizinců ve věku dvacet a dvaadvacet let došlo v pátek ve večerních hodinách. Sat, 12 Feb 2011 17:40:00 GMT Z domova zahlavi CZ XML * Značky (tags): * počáteční: * koncové: </item> * počáteční i koncová: <item/> * Data * VIDEO: Tři muži přepadli na pumpě cizince * zahlavi CZ Je XML značkovací jazyk ? * Jazyk má: * slovník symbolů * gramatiku * * XML není značkovací jazyk (markup language) * XML definuje syntaxi pro celou třídu jazyků zahlavi CZ Správně strukturovaný XML dokument zahlavi CZ Platnost XML dokumentu * Jaké značky v jakém pořadí (struktuře) * 2 možnosti ověření platnosti: * DTD – Document Type Definition * Pravidla definující elementy a další značkovací objekty a jejich pořadí * Nedefinuje datový obsah * Značkovací objekt, který není v definici, je chybný * Schémata * Volnější definice, např. definuje, že dokument může obsahovat element datum a data jsou typu YYYY-MM-DD * zahlavi CZ XML editory * NotePad * Internet Explorer * Speciální editory: * Morphon XMLEditor (www.morphon.com) * Epic * XMLFox zahlavi CZ Značkovací objekty … Značkovací objekt Účel Příklad prázdný element Reprezentuje informaci v určitém místě dokumentu <xref linkend="abc"/> element-kontejner Spojuje elementy a znakové údaje <p>This is a paragraph.</p> deklarace Přidává nový parametr, entitu nebo gramatickou definici <!ENTITY author "Erik Ray"> Instrukce pro zpracování Poskytuje speciální instrukce softwaru <?print-formatter force-linebreak?> zahlavi CZ … Značkovací objekty Značkovací objekt Účel Příklad Poznámka Vložení poznámky, XML procesor ji ignoruje <!— here's where I left off —> Sekce CDATA Sekce textových údajů, která nebude zpracovávána procesorem XML – může obsahovat speciální znaky, které mají význam v syntaxi XML <![CDATA[Ampersands galore! &&&&&&]]> Odkaz na entitu Příkaz pro procesor XML, aby vložil text uložený jinde &company-name; zahlavi CZ Struktura XML dokumentu * Logická entita spíše než fyzická * v jednom souboru může být více XML dokumentů Prolog dokumentu Kořenový element dokumentu <channel> </channel> Například: <?xml version="1.0" encoding="utf-8" ?> <rss version="2.0" xmlns:media="http://search.yahoo.com/mrss"> zahlavi CZ Prolog XML dokumentu XML Popis <?xml version="1.0" standalone="no"?> Deklarace XML verze <!DOCTYPE reminder SYSTEM "/home/eray/reminder.dtd" [ <!ENTITY smile "<graphic smile="smile.eps"/>"> ]> Deklarace typu dokumentu Jméno kořenového elementu DTD identifikátor Oddělovač podmnožiny Deklarace entit zahlavi CZ Elementy XML * Element-kontejner * * * Prázdný element * * Atribut elementu * <jméno atribut1 atribut2 ….> … obsah… </jméno> <jméno atribut1 atribut2 …./> jméno = “hodnota“ zahlavi CZ Elementy XML * Jméno elementu (stejně jako jméno atributu) = XML jméno * XML jméno může obsahovat: * a-z, A-Z, a 0-9, znaky nelatinských abeced, * pomlčku (-), podtržítko (_), tečku (.) a dvojtečku pro zvláštní účel (:) * v XML jménech se rozlišují malá a velká písmena * XML jména začínají písmeny nebo podtržítkem zahlavi CZ Správně strukturovaný XML? •<to-do>Clean fish tank</to-do> •<street_address>1420 Sesame Street</street_address> •<notes+comments>Huh?</notes+commments> •<2nd-phone-number>785-555-1001</2nd-phone-number> •<MP3.name>Where my doggies at?</MP3.name> zahlavi CZ Element-kontejner * Základním prvkem XML dokumentu je element: * počáteční značka * obsah * ukončovací značka –<význam_elementu > obsah_elementu </význam_elementu > zahlavi CZ Prázdný element * Prázdný element: –<význam_elementu ></význam_elementu > –nebo zkráceně <význam_elementu /> zahlavi CZ Hierarchie XML elementů * Elementy lze vnořovat do jiných elementů, ale ne takto: –<a>Don't <b>do</a> this!</b> * Ale toto je v pořádku: –<a>No problem</a><b>here</b> * * Jméno značky na začátku a na konci musí být stejné: –<para>I like to ride my motorcycle <emphasis>really</emphasis> fast. –</para> zahlavi CZ Hierarchie XML elementů * Vkládáním vnořených elementů do obsahu kořenového elementu •<význam_elementuA> obsah_elementuA • <význam_elementuAA> obsah_elementuAA • </význam_elementuAA> •</význam_elementuA> zahlavi CZ Entity v XML •<?xml version="1.0"?> •<!DOCTYPE message SYSTEM "/xmlstuff/dtds/message.dtd" •[ <!ENTITY client "Mr. Rufus Xavier Sasperilla"> • <!ENTITY agent "Ms. Sally Tashuns"> • <!ENTITY phone "<number>617-555-1299</number>"> •]> •<message> • <opening>Dear &client;</opening> • <body>We have an exciting opportunity for you! A set of ocean-front cliff dwellings in Mexico, have been renovated as time-share vacation homes. They're going fast! To reserve a place for your holiday, call &agent; at ☎. Hurry, &client;. Time is running out!</body> •</message> zahlavi CZ Entity v XML * Definice entit: • <!ENTITY client "Mr. Rufus Xavier Sasperilla"> • <!ENTITY agent "Ms. Sally Tashuns"> • <!ENTITY phone "<number>617-555-1299</number>"> * Použití entit: • call &agent; at ☎. Hurry, &client;. Time is * Textová náhrada &agent za Ms. Sally Tashuns zahlavi CZ XML schéma * Schéma: * Generická reprezentace třídy objektů * Předpis, jak mají vypadat objekty stejné třídy * XML schéma * Test, zda dokument XML odpovídá předpisu * XML schémata * DTD (Document Type Definition) * XSD (XML Schema Definition) * zahlavi CZ DTD – příklad XML souboru •<?xml version="1.0" encoding="UTF-8"?> •<!DOCTYPE clovek SYSTEM "příklad.dtd"> •<clovek oscis=“174762”> • <jmeno>Tomáš</jmeno> • <adresa> • <ulice>Nesmrtelná</ulice> • <cislo>99</cislo> • <mesto>Brno</mesto> • </adresa> •</clovek> zahlavi CZ Příklad.dtd •<!ELEMENT clovek (jmeno, adresa*)> •<!ELEMENT jmeno (#PCDATA)> •<!ELEMENT adresa (ulice?, cislo?, mesto)> •<!ELEMENT ulice (#PCDATA)> •<!ELEMENT cislo (#PCDATA)> •<!ELEMENT mesto (#PCDATA)> •<!ATTLIST clovek • oscis #REQUIRED •> zahlavi CZ DTD syntaxe * #PCDATA * Znaková data, ale ne elementy * ( e1, e2, e3) * Posloupnost elementů * (e1| e2) * e1 nebo e2 * (…)* * 0 až N opakování * (…)+ * 1 až N opakování * (…)? * 0 až 1 krát * * * zahlavi CZ DTD * DTD deklaruje: * Slovník (elementy, které se mohou v XML dokumentu vyskytovat) * obsahový (content) model – jaké elementy může element-kontejner obsahovat * množinu atributů elementu zahlavi CZ Obsah jako element nebo atribut? * Textový obsah v XML může být umístěn uvnitř elementu-kontejneru nebo jako atribut, o umístění rozhoduje autor * Element-kontejner * Komplexnější text, který může být v budoucnosti dále strukturován * Nezáleží na přesném počtu mezer mezi slovy * Atribut * Textová položka, která nebude dále strukturována (např. Číslo zaměstnance) * Potřebujeme přenést přesný obsah včetně mezer zahlavi CZ XSD – příklad XML souboru •<?xml version="1.0" encoding="utf-8"?> •<Address • xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" • xsi:noNamespaceSchemaLocation="SimpleAddress.xsd"> • <Recipient>Mr. Walter C. Brown</Recipient> • <House>49</House> • <Street>Featherstone Street</Street> • <Town>LONDON</Town> • <PostCode>EC1Y 8SY</PostCode> • <Country>UK</Country> •</Address> zahlavi CZ XSD – SimpleAddress.xsd 1. část •<?xml version="1.0" encoding="utf-8"?> •<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> • <xs:element name="Address"> • <xs:complexType> • <xs:sequence> • <xs:element name="Recipient" type="xs:string" /> • <xs:element name="House" type="xs:string" /> • <xs:element name="Street" type="xs:string" /> • <xs:element name="Town" type="xs:string" /> • <xs:element name="County" type="xs:string" minOccurs="0" /> • <xs:element name="PostCode" type="xs:string" /> zahlavi CZ XSD – SimpleAddress.xsd 2.část • <xs:element name="Country"> • <xs:simpleType> • <xs:restriction base="xs:string"> • <xs:enumeration value="FR" /> • <xs:enumeration value="DE" /> • <xs:enumeration value="ES" /> • <xs:enumeration value="UK" /> • <xs:enumeration value="US" /> • </xs:restriction> • </xs:simpleType> • </xs:element> • </xs:sequence> • </xs:complexType> • </xs:element> •</xs:schema> zahlavi CZ XSD – element-kontejner… •<xs:element name="address"> • <xs:complexType> • <xs:all> • <xs:element ref="street"/> • <xs:element ref="city"/> • <xs:element ref="county"/> • <xs:element ref="country"/> • <xs:element ref="postalcode"/> • </xs:all> • </xs:complexType> • </xs:element> * * zahlavi CZ … XSD – element-kontejner •<xs:element name="street" type="xs:string"/> • <xs:element name="city" type="xs: string"/> • <xs:element name="county" type="xs: string"/> • <xs:element name="country" type="xs: string"/> • * * zahlavi CZ XSD – element-kontejner •<xs:element name="address"> • <xs:complexType> • <xs:all> • <xs:element ref="street"/> • <xs:element ref="city"/> • <xs:element ref="county"/> • <xs:element ref="country"/> • <xs:element ref="postalcode"/> • </xs:all> • </xs:complexType> • </xs:element> * * zahlavi CZ XSD - atribut •<xs:attribute name="taker"> • <xs:simpleType> • <xs:restriction base="xs:integer"> • <xs:minInclusive value="1"/> • <xs:maxInclusive value="9999"/> • </xs:restriction> • </xs:simpleType> • </xs:attribute> * * zahlavi CZ XSD – opakování elementů •<xs:element name="census-record"> • <xs:complexType> • <xs:sequence> • <xs:element ref="date"/> • <xs:element ref="address"/> • <xs:element ref="person" maxOccurs="unbounded"/> • </xs:sequence> • <xs:attribute ref="taker"/> • </xs:complexType> • </xs:element> * * zahlavi CZ XSD – povinný výskyt elementu •<xs:element name="name"> • <xs:complextype> • <xs:all> • <xs:element ref="first"/> • <xs:element ref="last"/> • </xs:all> • <xs:choice minOccurs="0"> • <xs:element ref="junior"/> • <xs:element ref="senior"/> • </xs:choice> • </xs:complextype> • </xs:element> * * zahlavi CZ Definice typů v XSD Typ Použití xs:string textová hodnota xs:token slova oddělená mezerami xs:decimal čísla např. 1.356 ; -20 xs:integer celá čísla 871; -13; +72 xs:float 32 bitové číslo s pohyblivou desetinnou tečkou Např. 123.456; +1234.456; -1.2344e56 ; -.45E-6; INF; –INF; NaN xs:boolean true;false; 0; 1 xs:time čas HH:MM:SS-Timezone jako např. 21:55:00-06:00 xs:date datum CCYY-MM-DD jako 2011-03-25 xs:dateTime datum a čas CCYY-MM-DDTHH:MM:SS-Timezone jako 2011-03-25T21:55:00-06:00