Ugrás a fő tartalomra

XML alapok 1


 







XML (eXtensible Markup Language) : Kiterjeszthető jelölőnyelv

  •   Jelölő nyelv
  •  Általában szöveges fájlban tároljuk
  •  Címkékből (tag), attribútumokból és magából a tartalomból áll
  •  Hierarchikus szerkezetű

Jellemzői:

  •  Kis és nagybetűk különbözőek.
  •  Kötelező meg g adni a záró tag-eket.
  •  Fontos az egymásba ágyazás, így a zárás sorrendje.
  •  Mindig van egy gyökérelem, annak lehet egy gyermeke, mely tartalmazhat további leszármazottakat
  •  Bővíthető
  • Elem vagy attribútum használata Nincs rá szabály!

 

 

Elem

Az XML dokumentumok elemeket tartalmaznak.
Minden elemnek van neve és tartalma. Ez utóbbi lehet üres is. Egy elem tetszőleges számban és mélységben tartalmazhat további elemeket.
Az elemet meg kell nyitni és le kell zárni. Minden elemnek van lezárása!

<nev>Buga Jakab</nev>   

/* Ebben a példában definiáltunk egy nev nevű elemet, a ’Buga Jakab’ tartalommal. */


<dolgozo>
    <nev>Buga Jakab</nev>
     <eletkor>20</eletkor>
</dolgozo>
/*Ebben a példában a dolgozo elem további két elemet tartalmaz. Mindkettőnek van neve és tartalma, és le is vannak zárva.
Amennyiben elemeket egymásba ágyazunk, úgy az nem lehet átfedő! */

Az üres tartalmú elemet kétféleképpen lehet jelölni:
<dvd></dvd>
vagy
<dvd />

 

 

Attribútum


Az XML dokumentumok attribútumokat tartalmaznak. Minden attribútumnak van neve és tartalma. 

Ez utóbbit aposztrófok közé kell zárni:
<dolgozo neme=”Ferfi” eletkor=”20”>Buga Jakab</nev>
/*Ebben a példában definiáltunk egy nev nevű elemet, a ’Buga Jakab’ tartalommal. Két attribútumunk van, a neme és az eletkor.*/

Gyakori eset, amikor az attribútumokkal mindent leírunk, és az elem tartalma már üres:
<dvd film=”Micimacko” ara=”2500” />

 

Speciális karakterek

Az XML -ben van néhány karakter, melynek speciális jelentése van.

Ezek a karakterek nem kerülhetnek be elem és attribútum tartalomba, helyettesítőket kell alkalmazni:
&     &amp;
<      &lt;
>      &gt;
"       &quot;


Vagyis pl.:
<bank>K&H</bank> helyett <bank>K&amp;H</bank> -ot kell írni.

 

UTF- 8-as vagy ISO-8859-2-es kódtáblában szereplő karakterek használatosak.

 

Komment lehetőség

< !-- Ez egy értelmező szöveges magyarázat,

amely beilleszthető az XML file-be is →

 

CDATA-kijelölés (CDATA section)

A karakterentitások használata mellett az XML definiál egy ún. CDATA (Character DATA) részt, amelyben minden problémás karakter egyszerű, közönséges karakterként lesz értelmezve.

Ez különösen akkor tesz jó szolgálatot, ha valaki XML-dokumentumként szeretne elkészíteni egy XML kézikönyvet.

A CDATA részben elhelyezett szövegre egyetlen előírás van: nem fordulhat benne elő a CDATA részt lezáró ]]> (erre gyakran a CDEnd XML-zsargonnal hivatkoznak) karaktersorozat. Ez nem túl nagy megszorítás, hiszen az előre definiált karakterentitás használatával ez elkerülhető (még egy XML kézikönyvet tartalmazó dokumentum esetén is).

CDATA-kijelölés ::= <![CDATA[ Unicode megjegyzés beső parancs amely nem kerül értelmezésre és nem okoz hibát ]]>

 

 

 

 

DTD (Document Type Definition) :Dokumentumtípus definíció

  • Használható elemek meghatározása,
  •  elemek struktúrájának,
  •  adattartalom típusának megadására
  •  Gyakorlatban: tervrajzként funkcionál
  •  Megadható az XML fájlban vagy külön állományban is.
  •  Ellenőrzése az érvényesítés

 

Minta

## XML file
<?xml version="1 0" encoding="UTF <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE cikk SYSTEM "cikk2.dtd">
<cikk>
<datum>2003/05/01</datum>
<szerzo>LAci</szerzo>
<tartalom>tananyag</tartalom>
</cikk>
 
## A külső DTD fájl:
<!ELEMENT cikk (, , ) datum, szerzo, tartalom)>
<!ELEMENT datum (#PCDATA)>
<!ELEMENT szerzo (#PCDATA)>
13
<!ELEMENT tartalom (#PCDATA)>

 

XSD (Xml Schema Definition) : XML séma definíció

  • XML dokumentumok tartalmát és szerkezetét meghatározza.
    •  Elemeket, jellemzőket
    •  Adat típusokat Adat típusokat
    •  Elemek számára adhatunk előírást
    •  Elrendezést ~ DTD, de több annál (XML alapú, de további lehetőséget rejt magában)

Példa:

<xsd:element name="NEV" type="xsd:string"/>

<xsd:element name="DATUMIDO" type="xsd:dateTime"/>

 

Minta

#### --------------- Példa 1.
 
## Xml file
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="konyv">
<xs:complexType>
<xs:sequence>
<xs:element name="szerzo" type="xs:string"/>
<xs:element name="cim" type="xs:string"/>
<lt " xs:element name="ar"t " ype= xs:i tn eger"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
 
## Az XML dokumentumban így kell megadni:
<?xml version <?xml version 1 =" 0. " encoding encoding UTF =" -8 ?> "
<konyv xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="konyv.xsd">
<szerzo>XY</szerzo>
15
<cim>XML tananyag</cim>
<ar>1000</ar>
</konyv>
 
### ------------------ Példa 2.
 
## egyszeru.xsd file
<?xml version="1.0" encoding="ISO-8859-2"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="F1VILAGBAJNOK" type="xsd:string">
</xsd:schema>
egyszeru.xml
 
## XML file
<?xml version="1.0" encoding="ISO-8859-2"?>
<F1VILAGBAJNOK>Jacques Villeneuve</F1VILAGBAJNOK>
 

 

XPath

  •  XML dokumentumokban történő keresésekre
  •  Navigációra, környezetfüggő kijelölésekre, formázásokra
  •  ~ SQL SELECT

 

Minta

 
child::cim                                              az aktuális elem ‘cim' gyereke(i)
attribute::nyelv                                        az aktuális elem nyelv' attribútuma
/                                                       a gyökér-elem
/leltar/child::konyv/child::cim[position() = 2]         a második cim
child::cim[attribute::nyelv=en'][child::gyermek=Szöveg']   az aktuális elem azon ‘cim' gyereke,amelynek a ‘nyelv' attribútumának tartalma ‘en' és van egy
                                                           ‘gyermek gyermek' gyereke amelynek tartalma gyereke, amelynek tartalma ‘szoveg'
descendant::cim                                         a dokumentum összes ‘cim' eleme
child::*[self::cim or self::szerzo] child::*[self::cim or self::szerzo]      az aktuális az aktuális elem cim' vagy 'szerzo' elemei
 

 

 

 

XQuery

  •  XML dokumentumokban történő keresésekre
  •  XPath kifejezéseken alapul
  •  ~ SQL
  •  Adatbázis-rendszerek: Oracle IBM Microsoft által rendszerek: Oracle, IBM, Microsoft által támogatott

 

 

NXD (Native XML Databases) : natív XML adatbázis

      Oracle, MS SQL Server, DB2 is fel tud dolgozni XML-t

 

XML validállás

Szintaktikai feltételek megfelelésének ellenőrzése

 

  • Minden megnyitott tagnak legyen záró párja
  • Minden tag a nyitás hierarchia szintjén záródjon be
  • A elem és attribútumban a XML különleges karakterek csak feloldva szerepeljenek

 

SQL használatával

 

Parse validállás

 
--- CLOB tartalom eletén
Select xmlparse(Document x.DOC1 WELLFORMED)                      ---- Ellenőrzés 
From KL_XML_DEMO x 
 
----
Select xmlparse(Document x.DOC1 )                                 ---- Ellenőrzés ( WELLFORMED attribútum kivétele után a konkrét hiba)
From KL_XML_DEMO x 
 
---- XMLType esetén
Select xmlparse(Document x.DOC1.getClobVal() WELLFORMED)          ---- Ellenőrzés
From KL_XML_DEMO x 
 
---
Select xmlparse(Document x.DOC1 ).getClobVal() DOC                 ---- pasolás után konverzió vissza CLOB-ba
From KL_XML_DEMO x 
 
---
Select xmlparse(Document x.DOC1).existsnode('//PRODUCT_TYPE') as letezik
From KL_XML_DEMO x
 
 
---
Select xmlparse(Document x.DOC1).extract('//PRODUCT_TYPE/@v').getStringVal() as erteke
From KL_XML_DEMO x
 

 

 

java alkalmazással

 

Java validációs minta

 
   private bool ValidateXmlWithXsd(string xmlData)
        {
            try
            {
                XmlReader schemaReader = XmlReader.Create(new StringReader(Properties.Resources.sample));
                XmlSchema schema = System.Xml.Schema.XmlSchema.Read(schemaReader, null);
                XmlReaderSettings xmlSettings = new XmlReaderSettings();
                xmlSettings.Schemas.Add(schema);
                xmlSettings.ValidationType = ValidationType.Schema;
                XmlReader xmlReader = XmlReader.Create(new StringReader(xmlData), xmlSettings);
                // Parse the file.
                while (xmlReader.Read()) ;
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
 

 

Validállás Python programmal

 

Python validálási minta

### Hibakezelés minta
 
try:  
   root = ET.parse(r'c:\Users\User\Documents\data\xml\kl2.xml').getroot() 
   ....
except:
 
 
 
### feldolgozásimport 
 
xml.etree.ElementTree as ET
 
root = ET.parse(r'c:\Users\u23442\kl\xml2db\lhfe_sample.xml').getroot()
 
indent = 0
ignoreElems = ['displayNameKey', 'displayName']      ## Kihagyásra jelölt tagok listája
 
def printRecurKl(root):
   """Rekurziv (önmagát meghívó) XML fa bejárás és elem listázás."""
   global indent 
 
   if root.tag in ignoreElems:                        ## Kihagyásra jelölt tagok vizsgálata
       return
   print (' '*indent + '%s: %s' % (root.tag.title(), root.attrib.get('v', root.text)))
 
   indent += 4
   for elem in root.getchildren():
       printRecurKl(elem)                             ## rekurziós hívás
   indent -= 4
 
 
printRecurKl(root)

Megjegyzések