XMLBeans

Z Wikipedie, otevřené encyklopedie
Skočit na navigaci Skočit na vyhledávání
XMLBeans
VývojářApache Software Foundation
Aktuální verze4.0 (16. října 2020)
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.

Popis[editovat | editovat zdroj]

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é mnnožství elementů skladba a element typ_nosice--></div>
    <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]