XMLBeans
Vývojář | Apache Software Foundation |
---|---|
Aktuální verze | 5.2.0 (16. listopadu 2023) |
Platforma | Java Virtual Machine |
Vyvíjeno v | Java |
Typ softwaru | svobodný software |
Licence | licence Apache |
Web | xmlbeans |
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é 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());