7. XML
A VIK Wikiből
Ez az oldal a korábbi SCH wikiről lett áthozva.
Ha úgy érzed, hogy bármilyen formázási vagy tartalmi probléma van vele, akkor, kérlek, javíts rajta egy rövid szerkesztéssel!
Ha nem tudod, hogyan indulj el, olvasd el a migrálási útmutatót.
7.1. Általános
- jól formált
- opcionális fejléc, gyökérelem, nyitó-záró tag
- valid: megfelel a sémának (DTD/XSD)
7.2. XSD
gyökérelem
- <xs:schema>...</xs:schema>
- xmlns:xs="http://www.w3.org/2001/XMLSchema" adattípusok definíciójának névtere
- targetNamespace="http://www.w3schools.com" elemek névtere
- xmlns="http://www.w3schools.com" alapértelmezett névtér
- elementFormDefault="qualified" kötelező a névteret kiírni
általános szerkezet
<!-- beépített típusok --> xs:string, xs:decimal, xs:integer, xs:boolean, xs:date, xs:time <!-- egyszerű elem --> <xs:element name="xxx" type="xs:string" [default="zzz" | fix="qqq"]/> <!-- attribútum --> <xs:attribute name="xxx" type="xs:string" [default="zzz" | fix="qqq"] [use="required"]/> <!-- egyszerű típusdefiníció --> <xs:simpleType> <xs:restriction base="xs:string"> <xs:length value="8"/> </xs:restriction> </xs:simpleType> megkötések: totalDigits, fractionDigits, enumeration, length, minLength, maxLength, pattern... <!-- összetett típusdefiníció --> <xs:complexType name="personinfo"> <xs:sequence> <xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> </xs:sequence> </xs:complexType> <!-- öröklés --> <xs:complexType name="fullpersoninfo"> <xs:complexContent> <xs:extension base="personinfo"> <xs:sequence> ... <!-- új elemek --> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType>
Indikátorok
- Sorrend: all, choice, sequence
- Gyakoriság: maxOccurs, minOccurs
- Csoportosítás: <group>, <attributeGroup> (pár element/attribute összefogása, de nem típusként)
helyettesítés
- használhatjuk az eredeti és az új nevet is
<xs:element name="name" type="xs:string"/> <xs:element name="név" substitutionGroup="name"/>
hivatkozás XML-ből XSD-re
<note xmlns=http://www.w3schools.com xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xsi:schemaLocation="http://www.w3schools.com note.xsd"> <!-- XML adatok --> </note>
7.3. XPath
- adott nevű csomópont gyerekei: csomópontnév
- gyökérelem: /
- az aktuális elemtől választ, mindegy, hogy milyen mélyen: //node
- aktuális elem: .
- az aktuális elem szülője: ..
- attribútum: @attr
- bármely elem: *
- bármely attribútum: @*
- index, vagy feltétel elemre, attribútumra, vagy függvény: [feltétel]
- csomópont kiválasztás: node()
- szöveg csomópont kiválasztás: text()
ágak (hosszú név)
- self
- attribute
- parent
- child
- ancestor / ancestor-or-self - összes ős
- descendant / descendant-or-self - összes leszármazott
- following / preceding - minden utána/előtte lévő elem
- following-sibling / preceding-sibling - minden utána/előtte lévő testvérelem
- namespace - elem összes névtere
rövidítés (kettő megegyezik)
- child::A/descendant-orself::node()/child::B[position()=1]
- A//B/*[1]
operátorok
- aritmetikai: + - / * div mod
- logikai: and or
- relációs: = != < <= > >=
- únió: |
|}
függvények (csak pl)
- fn:round(num)
- fn:substring(string,start,len)
- fn:current-time()
7.4. XSLT sablon
<!-- XSLT hozzárendelése XML-hez --> <?xml-stylesheet type="text/xsl" href="test1.xsl"?> <!-- gyökérelemre illesztés --> <xsl:template match="/"> ... <!-- felsorolás --> <xsl:for-each select="neptun/student[average>'3.0']"> <!-- rendezés --> <xsl:sort select="name"/> ... <!-- elem érték --> <xsl:value-of select="name"/> <xsl:value-of select="id"/> </xsl:for-each> <!-- feltétel (nincs else ág)--> <xsl:if test="average<2.0">...</xsl:if> <!-- többszörös elágazás --> <xsl:choose> <xsl:when test="...">...</xsl:when> <xsl:when test="...">...</xsl:when> <xsl:otherwise>...</xsl:otherwise> </xsl:choose> </xsl:template> <!-- sablon alkalmazása (előzőleg definiálni kell!) --> <xsl:apply-templates select="id"/>
7.5. Simple API for XML (SAX)
- parser alapú, soros feldolgozással
- állapotfüggetlen
- eseményvezérelt (Callback pattern!)
org.xml.sax.ContentHandler interfész
- throws SAXException
- void startDocument() -> void endDocument()
- void startElement(String namespaceURI, String sName, String qName, Attributes attrs) -> void endElement()
- void startPrefixMapping(...) -> void endPrefixMapping(...)
- void characters(char[] ch, int start, int length)
- void ignorableWhiteSpace(...)
- void processingInstruction(...)
- void skippedEntity(...)
- void setDocumentLocator(...)
- üres megvalósítás: org.xml.sax.helpers.DefaultHandler
Locator
- lekérdezhető vele a parser aktuális pozíciója (sor/oszlop)
hibakezelés
- fatal error: nem jólformált XML (syntax error)
- error: nem valid (nem illeszkedik a sémára)
- warning: egyéb gányság (kétszeres típus)
7.6. Document Object Model (DOM)
7.6.1. DOM általánosan
Document
- dokumentumot reprezentáló node
- lekérdezhető adatok: doctype, verzió, kódolás, stb
- elemeket tud gyártani
Node
- egy elemet reprezentál
- lekérdezhető, módosítható adatok: érték, típus, attribútumok
- navigálás: lefelé (gyerekek), felfelé (szülők), oldalra (testvérek)
- gyerekeket módosíthatjuk, hozzáadhatunk, elvehetünk
* lekérdezéskor NodeList kollekcióban kapjuk vissza őket
NamedNodeMap
- Node elérésében segít
- NamedNodeMap Node.getAttributes()
- Node get/set/removeNamedItem(String name)
- Node get/set/removeNamedItemNS(String namespaceURI, String localName)
7.6.2. JDOM
- Java-s szemléletű DOM API
- List-et használ NamedNodeMap, NodeList helyett
- szűrők: org.jdom.filter.Filter
- XSL támogatás: org.jdom.transform.XSLTranformer
- XPath: org.jdom.xpath.XPath
- beolvasás külső segítséggel: DOMBuilder vagy SAXBuilder
-- MeszegetoBalazsIstvan - 2008.05.27.
-- Velias - 2009.05.27.