7. XML

A VIK Wikiből
A lap korábbi változatát látod, amilyen (vitalap) 2012. október 21., 20:44-kor történt szerkesztése után volt. (Új oldal, tartalma: „{{GlobalTemplate|Infoszak|OotXMLkezeles}} __TOC__ ==7.1. Általános== * jól formált * opcionális fejléc, gyökérelem, nyitó-záró tag * valid: megfelel a sém…”)
(eltér) ← Régebbi változat | Aktuális változat (eltér) | Újabb változat→ (eltér)
Ugrás a navigációhoz Ugrás a kereséshez

Ez az oldal a korábbi SCH wiki-ről lett áthozva. Az eredeti változata itt érhető el.

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

á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.