XMLBeans

Apache XMLBeans
開発元 Apacheソフトウェア財団
最新版
5.0.1 / 2021年7月10日 (2年前) (2021-07-10)
プラットフォーム クロスプラットフォーム
種別 XMLデータバインディング
ライセンス Apache License 2.0
公式サイト http://xmlbeans.apache.org
テンプレートを表示

XMLBeans(エックスエムエルビーンズ)は、JavaとXMLデータバインディングとの変換を行うフレームワーク。Apacheソフトウェア財団XMLプロジェクトの一部である。2013年6月に開発を一旦終了したが、その後Apache POIプロジェクトの一部として2018年6月に開発が再開された[1]


概要

XMLBeans は、Java が扱いやすい形でXMLの全ての能力へのアクセスを可能にするツールである。すなわち、XMLと XML Schema の表現能力の豊かさと機能を利用し、それらの機能を可能な限り自然な形でJava言語とその型付き構成要素にマッピングする。XMLBeans は XML Schema を使って Java インタフェースとクラスをコンパイルし、その生成物を使ってXMLインスタンスデータのアクセスと変更を行う。XMLBeans を使うと、新たなインタフェースやクラスを使うのと同じ感覚でXMLインスタンスデータにアクセスできる。XMLインスタンスデータへのアクセスを提供する以外に、XML Infoset への完全なアクセスを可能にするAPIを備え、XML Schema Object モデルを通して XML Schema 自体へのリフレクションも可能にする。

他との違い

XML Schema 完全サポート
XMLBeans は XML Schema を完全サポートしており、対応するJavaクラスは XML Schema の主な機能を全て提供する。この種の技術では、必要な機能をサポートしていないことが多く、非常に重要な特徴である。また、XML Schema 向けアプリケーションの構築に際して XML Schema の全能力を活用するようにでき、サブセットに制限されることがない。
完全な XML Infoset 再現性
XMLインスタンスをアンマーシャリングしたとき、完全な XML Inforset が保持され、開発者が利用できる。XML のサブセットは容易に Java で表現できない部分があるため、これは重要である。例えば、要素の順序やコメントがアプリケーションによっては必要になるかもしれない。

目的

XMLBeans の主な目的は、ストリーミング以外の(メモリ上の)あらゆるXMLプログラミングで利用可能なものを構築することであった。XML Schema をコンパイルしてJavaクラスを生成したいとき

  1. あらゆる Schema について XMLBeans が利用可能であり、
  2. 任意の必要なレベルのXMLへのアクセスを得ることができ、別々のツールを使う必要がない。

API

以上のような目的を達成するため、XMLBeans は以下の3つのAPIを提供している。

XmlObject
XML Schema から生成されるJavaクラスは全て XmlObject を継承する。これにより、XMLに定義されている各要素について強く型付けされたゲッターとセッターを提供する。複合型の要素は XmlObject のインスタンスである。例えば、getCustomer が返す CustomerType は実際には XmlObject クラスを継承したクラス(のインスタンス)である。単純型の場合は通常のJavaのデータ型のゲッターとセッターになる。例えば、getName が String クラスのインスタンスを返すなど。
XmlCursor
任意の XmlObject のインスタンスから XmlCursor クラスのインスタンスを得ることができる。これを使って、XML Inforset に直接アクセスできる。カーソルはXMLインスタンスでの位置を表現している。カーソルは文字単位やトークン単位など任意の細かさで前後に移動可能である。
SchemaType
基になっているスキーマメタ情報へのアクセスを提供するクラス。例えば、ある XML Schema のサンプルインスタンスを生成したい場合や、ある要素がとりうる値を列挙したい場合などに利用できる。

これらは全て、性能を考慮して構築されている。XMLBeans は一般に非常に性能がよいと言われている。

以下は、国を表現したXMLスキーマ定義の簡単な例である。

 <?xml version="1.0" encoding="UTF-8"?>
 <xs:schema targetNamespace="http://www.openuri.org/domain/country/v1"
            xmlns:tns="http://www.openuri.org/domain/country/v1"
            xmlns:xs="http://www.w3.org/2001/XMLSchema"
            elementFormDefault="qualified"
            attributeFormDefault="unqualified"
            version="1.0">
   <xs:element name="Country" type="tns:Country"/>
   <xs:complexType name="Country">
     <xs:sequence>
       <xs:element name="Name" type="xs:string"/>
       <xs:element name="Population" type="xs:int"/>
       <xs:element name="Iso" type="tns:Iso"/>
     </xs:sequence>
   </xs:complexType>
   <xs:complexType name="Iso">
     <xs:annotation><xs:documentation>ISO 3166</xs:documentation></xs:annotation>
     <xs:sequence>
       <xs:element name="Alpha2" type="tns:IsoAlpha2"/>
       <xs:element name="Alpha3" type="tns:IsoAlpha3"/>
       <xs:element name="CountryCode" type="tns:IsoCountryCode"/>
     </xs:sequence>
   </xs:complexType>
   <xs:simpleType name="IsoCountryCode">
     <xs:restriction base="xs:int">
       <xs:totalDigits value="3"/>
     </xs:restriction>
   </xs:simpleType>
   <xs:simpleType name="IsoAlpha2">
     <xs:restriction base="xs:string">
       <xs:pattern value="[A-Z]{2}"/>
       <xs:whiteSpace value="collapse"/>
     </xs:restriction>
   </xs:simpleType>
   <xs:simpleType name="IsoAlpha3">
     <xs:restriction base="xs:string">
       <xs:pattern value="[A-Z]{3}"/>
       <xs:whiteSpace value="collapse"/>
     </xs:restriction>
   </xs:simpleType>
 </xs:schema>

このスキーマをXMLBeanクラスに(例えば Antを使って)コンパイルすると、スキーマ定義に従ったXMLデータを容易に生成・操作できるコードが生成される。以下のJavaコードは、XML文書の生成と評価の様子を簡単に示したものである。

 import org.openuri.domain.country.v1.Country;
 import org.openuri.domain.country.v1.Iso;
 public class CountrySample 
 {
   public static void main(String[] args) {
     Country country = Country. Factory.newInstance();
     country.setName("Denmark");
     country.setPopulation(5450661);  // wikipedia より :-)
     // country XMLBean を XML として表示
     System.out.println(country.xmlText());
     // 文書が妥当かチェック - "Document is invalid" と表示するだろう
     // オブジェクトに必要な Iso 子要素が生成されていないため
     System.out.println ("Document is " + (country.validate() ? "valid" : "invalid"));
     // 複合型 Iso の子要素を追加し、文書を妥当なものにする
     Iso iso = country.addNewIso();
     iso.setAlpha2("DK");
     iso.setAlpha3("DNK");
     iso.setCountryCode(208);
     // country XMLBean を XML として表示
     System.out.println(country.xmlText());
     // 文書が妥当かチェック - "Document is valid" と表示されるだろう
     System.out.println ("Document is " + (country.validate() ? "valid" : "invalid"));
   }
 }

歴史

David Bau はBEAシステムズ在籍時(現在はGoogle勤務)に XMLBeans プロジェクトを開始した。彼はそのツールの主任設計者であり、チームを率いて XMLBeans 1.0 を設計・実装した。

XMLBeans は、BEA WebLogic にかつて含まれていたXMLバインディングツール XMLMaps を基盤としていた。XMBeans は当初 BEA WebLogic Workshop Framework というプロプライエタリな製品の一部として開発された。しかし2003年1月27日に初めて発表された当初から、BEA はこれをオープン標準にしたいと表明していた。その時点では、BEAが標準化をどの団体に任せるかは明らかではなかったが、2003年中にApacheソフトウェア財団への寄贈が行われた。

  • 2003年1月27日: BEA が XMLBeans 技術プレビューとして公表。
  • 2003年9月24日: BEA が XMLBeans をApacheソフトウェア財団に寄贈。Apache Incubator プロジェクトの一部となる。
  • 2004年4月23日: XMLBeans Version 1.0.2 リリース。 Incubator プロジェクトからの最初のリリース。
  • 2004年6月25日: XMLBeans は Apache Incubator プロジェクトからトップレベルプロジェクトの1つに昇格。
  • 2005年6月30日: XMLBeans Version 2.0 リリース
  • 2005年11月16日: XMLBeans Version 2.1 リリース
  • 2006年6月23日: XMLBeans Version 2.2 リリース
  • 2007年6月1日: XMLBeans Version 2.3 リリース
  • 2008年7月8日: XMLBeans Version 2.4 リリース
  • 2009年12月14日: XMLBeans Version 2.5 リリース
  • 2012年8月14日: XMLBeans Version 2.6 リリース
  • 2013年6月: 開発を終了
  • 2018年6月: 開発を再開
  • 2018年6月29日: XMLBeans Version 3.0 リリース
  • 2020年10月16日: XMLBeans Version 4.0 リリース
  • 2021年3月14日: XMLBeans Version 5.0 リリース

関連項目

脚注

  1. ^ Apache XMLBeans - The Apache Attic

外部リンク

  • プロジェクト公式サイト
  • XMLBeans resources
  • The Apache XML project
  • XMLBean Ant task
  • XML Binding Resources - xbeans of popular schemas
トップレベル
プロジェクト
  • Accumulo(英語版)
  • ActiveMQ
  • Airflow
  • Ambari(英語版)
  • Ant
  • Aries(英語版)
  • Arrow(英語版)
  • Apache HTTP Server
  • APR
  • Avro(英語版)
  • Axis
  • Axis2
  • Beam
  • Bloodhound(英語版)
  • Brooklyn(英語版)
  • Buildr(英語版)
  • Calcite(英語版)
  • Camel(英語版)
  • Cassandra
  • Cayenne(英語版)
  • Chemistry(英語版)
  • CloudStack(英語版)
  • Cocoon
  • Cordova
  • CouchDB
  • cTAKES(英語版)
  • CXF(英語版)
  • Derby
  • Directory(英語版)
  • Drill
  • Druid(英語版)
  • Empire-db(英語版)
  • Felix(英語版)
  • Flex
  • Flink(英語版)
  • Flume(英語版)
  • FreeMaker(英語版)
  • Geronimo
  • Giraph(英語版)
  • Gump(英語版)
  • Hadoop
  • HBase
  • Helix(英語版)
  • Hive
  • Impala(英語版)
  • Jackrabbit(英語版)
  • James
  • Jena(英語版)
  • Jini(英語版)
  • JMeter(英語版)
  • Kafka
  • Kudu(英語版)
  • Kylin(英語版)
  • Lucene
  • Mahout
  • Maven
  • MINA(英語版)
  • mod_perl(英語版)
  • MyFaces(英語版)
  • NetBeans
  • Nutch(英語版)
  • NuttX(英語版)
  • OFBiz(英語版)
  • Oozie(英語版)
  • OpenEJB
  • OpenJPA
  • OpenNLP
  • OpenOffice
  • ORC(英語版)
  • PDFBox(英語版)
  • Parquet(英語版)
  • Phoenix(英語版)
  • POI
  • Pig(英語版)
  • Pinot(英語版)
  • Pivot
  • Qpid(英語版)
  • Roller
  • RocketMQ(英語版)
  • Samza(英語版)
  • ServiceMix(英語版)
  • Shiro(英語版)
  • SINGA(英語版)
  • Sling(英語版)
  • Solr
  • Spark
  • Storm(英語版)
  • SpamAssassin
  • Struts 1
  • Struts 2(英語版)
  • Subversion
  • Apache Superset
  • SystemDS(英語版)
  • Tapestry
  • Thrift
  • Tika(英語版)
  • Tomcat
  • Traffic Server(英語版)
  • Turbine(英語版)
  • UIMA(英語版)
  • Velocity
  • Wicket
  • Xalan
  • Xerces
  • XMLBeans
  • Yetus(英語版)
  • ZooKeeper
ASF logo
Commons
Incubator
  • Apache MXNet(英語版)
  • Apache Taverna(英語版)
その他の
プロジェクト
Attic
  • Abdera(英語版)
  • Apache Apex(英語版)
  • AxKit
  • Beehive(英語版)
  • Bluesky(英語版)
  • iBATIS
  • c++ Standard Library(英語版)
  • Cactus(英語版)
  • Click(英語版)
  • Continuum(英語版)
  • Apache Deltacloud(英語版)
  • Apache Etch(英語版)
  • Excalibur(英語版)
  • Forrest(英語版)
  • Hama(英語版)
  • Harmony
  • HiveMind(英語版)
  • Jakarta
  • Lenya(英語版)
  • Marmotta(英語版)
  • ODE(英語版)
  • Shale
  • Slide(英語版)
  • Shindig
  • Stanbol(英語版)
  • Tuscany(英語版)
  • Wave(英語版)
  • Wink(英語版)
  • XML
ライセンス
  • カテゴリ Category
  • コモンズ Commons