6. XML (2012)
A VIK Wikiből
(OotXMLkezeles2012 szócikkből átirányítva)
Á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)
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>
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()
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"/>
Simple API for XML (SAX)
A SAX XML parszolására, feldolgozására és validálására való. Eseményvezérelt (callback minta), sorosan és állapotfüggetlenül dolgozza fel a kódot. A parser a ContentHandler-t valósítja meg, de nem ez validál, azt a hibakezelésből kapjuk meg.
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)
Document Object Model (DOM)
DOM általánosan
A DOM a SAX-szal ellentétben nem sorosan dolgozza fel az XML-t, hanem a felépíti a dokumentum alapján a fa reprezentációját, mely módosítható.
Document
A Document a dokumentumot reprezentáló node, mely elemeket tud gyártani és lekérdezhetőek az alábbiak: doctype, verzió, kódolás, stb.
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)
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.
--Szabó Csaba (vita) 2012. december 17., 21:39 (CET)