XMLBeans

XMLBeans
VývojářApache Software Foundation
Aktuální verze5.2.0 (16. listopadu 2023)
PlatformaJava Virtual Machine
Vyvíjeno vJava
Typ softwarusvobodný software
Licencelicence Apache
Webxmlbeans.apache.org
Některá data mohou pocházet z datové položky.

XMLBeans je framework, který umožňuje zpracovávat XML soubory v Javě. Jedná se o součást Apache Software Foundation XML project.

XMLBeans nabízí poměrně jednoduchou práci s XML soubory v Javě. Např. pro základní operace nastavení a získání hodnoty elementu používá metody set a get. Nabízí podporu pro většinu konstrukcí v schématu XML Schema. Nejprve je třeba zkompilovat XML schéma do .jar archivu, na základě kterého lze načítat a vytvářet XML soubory odpovídající danému schématu. Výsledný archiv obsahuje mimo jiné package s názvem odpovídajícím jmennému prostoru použitému v XML schématu. Package obsahuje rozhraní, které odpovídají globálním elementům z XML schématu. Kompilace se provádí z příkazové řádky příkazem:

$ scomp –out vysledny_archiv.jar kompilované_schéma.xsd 

Lze kompilovat pouze soubory .xsd a .wsdl.

Příklady použití

[editovat | editovat zdroj]

Vytvoření XML souboru

[editovat | editovat zdroj]

Zde je ukázka vytvoření XML dokumentu, který odpovídá schématu album.xsd. Schéma obsahuje popis hudebního alba. Je tvořeno elementem album, který obsahuje elementy obsahující jméno interpreta, název alba, typ nosiče a elementy popisující jednotlivé skladby. Element skladba je tvořen elementy obsahujícími název skladby, délku skladby a text skladby.

<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="album" type="album"></xsd:element>          <!-- globální element album obsahující podelementy interpret, nazev_alba,      neomezené množství elementů skladba a element typ_nosice-->     <xsd:complexType name="album">         <xsd:sequence>             <xsd:element name="interpret" type="xsd:string"/>             <xsd:element name="nazev_alba" type="xsd:string"/>             <xsd:element name="skladba" type="skladba" maxOccurs="unbounded"/>             <xsd:element name="typ_nosice" type="nosicTyp"/>         </xsd:sequence>     </xsd:complexType>          <!-- popis elementu skladba s atributem cislo_skladby a podelementy nazev,     delka a nepovinným elementem text-->     <xsd:complexType name="skladba">         <xsd:sequence>             <xsd:element name="nazev" type="xsd:string"/>             <xsd:element name="delka" type="delkaTyp"/>             <xsd:element name="text" type="xsd:string" minOccurs="0"/>         </xsd:sequence>         <xsd:attribute name="cislo_skladby" type="xsd:int" use="required"/>     </xsd:complexType>          <!-- délka skladby musí odpovídat danému regulárnímu výrazu -->     <xsd:simpleType name="delkaTyp">         <xsd:restriction base="xsd:string">             <xsd:pattern value="[0-5]\d{1}:[0-5]\d{1}"></xsd:pattern>         </xsd:restriction>     </xsd:simpleType>          <!-- typ nosiče musí nabývat jedné z hodnot výčtového typu -->     <xsd:simpleType name="nosicTyp">         <xsd:restriction base="xsd:string">             <xsd:enumeration value="CD"/>             <xsd:enumeration value="LP"/>             <xsd:enumeration value="MC"/>         </xsd:restriction>     </xsd:simpleType> </xsd:schema> 

Po zkompilování schématu je třeba vzniklý .jar archiv načíst jako knihovnu k projektu. Také je třeba přidat knihovny XMLBeans, konkrétně xbean.jar z adresáře lib. Pomocí následujícího kódu se vytvoří a zvaliduje XML soubor odpovídající tomuto schématu.

import java.io.File; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; import noNamespace.Album; import noNamespace.Skladba;  public class Vytvoreni {     private Album album;      @SuppressWarnings("static-access")     public Vytvoreni() {         try {             //vytvoření instance odpovídající elementu album             album = Album.Factory.newInstance();             //nastavení hodnot elementů             album.setInterpret("Interpret 1");             album.setNazevAlba("Album 1");             album.setTypNosice(album.getTypNosice().forString("MC"));             //přidání skladby             Skladba skladba = album.addNewSkladba();             skladba.setCisloSkladby(01);             skladba.setNazev("Song 1");             skladba.setDelka("05:12");             //pokud je výsledek validní, uloží s do souboru hudba.xml             if(album.validate()){             album.save(new File("hudba.xml"));             }             else{                 System.out.println("Dokument není validní");             }         } catch (IOException ex) {             Logger.getLogger(Vytvoreni.class.getName()).log(Level.SEVERE, null, ex);}}} 

Načtení XML dokumentu

[editovat | editovat zdroj]

XML soubor odpovídající danému schématu lze načíst a upravovat. Následující kód načte vytvořený soubor hudba.xml, rozdělí na jednotlivé elementy, vypíše jejich obsah a následně změní jméno interpreta. Pokud bude i nadále dokument validní tak ho uloží.

import java.io.File; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; import noNamespace.Album; import noNamespace.Skladba; import org.apache.xmlbeans.XmlException;  public class Vypis {      public Vypis() {         try {             File file = new File("hudba.xml");             //parsování XML souboru             Album album = Album.Factory.parse(file);             //výpis hodnot elementů             System.out.println(album.getInterpret());             System.out.println(album.getNazevAlba());             System.out.println(album.getTypNosice());             for (Skladba skladba : album.getSkladbaArray()) {                 System.out.println(skladba.getCisloSkladby());                 System.out.println(skladba.getNazev());                 System.out.println(skladba.getDelka());                 System.out.println(skladba.getText());             }             //změna jména interpreta             album.setInterpret("Novy interpret");             //validace a uložení souboru             if (album.validate()) {                 album.save(new File("hudba.xml"));             } else {                 System.out.println("Dokument není validní");             }         } catch (XmlException ex) {             Logger.getLogger(Vypis.class.getName()).log(Level.SEVERE, null, ex);         } catch (IOException ex) {             Logger.getLogger(Vypis.class.getName()).log(Level.SEVERE, null, ex);         }     } } 

Výpis hodnot výčtového typu

[editovat | editovat zdroj]

Pokud chceme zobrazit hodnoty výčtového typu, lze využít rozhraní SchemaType, které obsahuje informace o elementu. Ukázka výpisu hodnot výčtového typu pro druhy hudebních nosičů:

import org.apache.xmlbeans.XmlAnySimpleType; import noNamespace.NosicTyp;  NosicTyp nosic = NosicTyp.Factory.newInstance(); //schemaType() vrací SchemaType pro daný element //getEnumerationValues() vrací hodnoty výčtového typu jako pole prvků XmlAnySimpleType for(XmlAnySimpleType typ : nosic.schemaType().getEnumerationValues()){ System.out.println(typ.getStringValue()); } 

Dotazování pomocí XPath a XQuery

[editovat | editovat zdroj]

XMLBeans umožňuje také využití dotazovacích jazyků pro XML. Pomocí těchto jazyků lze vybrat elementy podle zadaných kritérií. Je třeba použít rozhraní XMLCursor, pomocí kterého lze procházet XML dokument a měnit elementy. XMLCursor ukazuje na nějakou výchozí pozici v dokumentu. Od této výchozí pozice bude vyhledávat. Zde je ukázka, jak by mohl vypadat upravený dotaz, který vypíše počet skladeb na albu:

File file = new File("hudba.xml"); Album album = Album.Factory.parse(file); //vytvoření kurzoru na začátku objektu, popisujícího album XmlCursor cursor = album.newCursor(); //metoda pro vložení příkazu dotazovacího jazyka //$this je aktuální pozice kurzoru (element album) cursor.selectPath("$this/skladba"); //metoda getSelectionCount vrací počet elementů, odpovídajících //zadanému výrazu System.out.println(cursor.getSelectionCount()); 

Související články

[editovat | editovat zdroj]

Externí odkazy

[editovat | editovat zdroj]