Разработчик(и) | Фонд программного обеспечения Apache |
---|---|
Стабильный релиз | 5.1.1 / 29 августа 2022 г. ( 2022-08-29 ) |
Написано в | Ява |
Операционная система | Кроссплатформенный |
Тип | XML-связывание |
Лицензия | Лицензия Apache 2.0 |
Веб-сайт | xmlbeans.apache.org |
XMLBeans — это фреймворк связывания Java - XML , являющийся частью проекта Apache Software Foundation XML .
XMLBeans — это инструмент, который позволяет получить доступ ко всей мощи XML в дружественном для Java виде. Идея заключается в том, чтобы воспользоваться богатством и возможностями XML и XML Schema и максимально естественно сопоставить эти возможности с эквивалентным языком Java и конструкциями типизации. XMLBeans использует XML Schema для компиляции интерфейсов и классов Java, которые затем можно использовать для доступа и изменения данных экземпляра XML. Использование XMLBeans похоже на использование любого другого интерфейса/класса Java: с такими методами, как getFoo или setFoo, как и при работе с Java. Хотя основным применением XMLBeans является доступ к данным экземпляра XML с помощью строго типизированных классов Java, существуют также API, которые позволяют получить доступ ко всему набору данных XML (XMLBeans сохраняет точность набора данных XML), а также позволяют осуществлять отражение в самой схеме XML через модель объекта XML Schema.
Поддержка большой XML-схемы: XMLBeans полностью поддерживает XML-схему, а соответствующие классы Java предоставляют конструкции для всех основных функций XML-схемы. Это важно, поскольку часто нет контроля над функциями XML-схемы, необходимыми для работы в Java. Кроме того, ориентированные на XML-схему приложения могут в полной мере использовать возможности XML-схемы и не должны ограничивать себя подмножеством.
Поддержка большого набора XML Infoset: при демаршаллинге экземпляра XML полный набор XML infoset сохраняется и доступен разработчику. Это важно, поскольку это подмножество XML нелегко представить в Java. Например, порядок элементов или комментариев может потребоваться в конкретном приложении.
Главной целью XMLBeans была его применимость во всех непоточных (в памяти) ситуациях программирования XML. Разработчик должен иметь возможность компилировать свою XML-схему в набор классов Java и знать, что он сможет:
Для достижения вышеуказанных целей XMLBeans предоставляет три основных API:
XmlObject: Классы Java, которые генерируются из XML-схемы, все являются производными от XmlObject. Они предоставляют строго типизированные геттеры и сеттеры для каждого из элементов в определенном XML. Сложные типы, в свою очередь, являются XmlObjects. Например, getCustomer может возвращать CustomerType (который является XmlObject). Простые типы превращаются в простые геттеры и сеттеры с правильным типом Java. Например, getName может возвращать String.
XmlCursor: Из любого XmlObject разработчик может получить XmlCursor. Это обеспечивает эффективный низкоуровневый доступ к XML Infoset. Курсор представляет позицию в экземпляре XML. Курсор можно перемещать по экземпляру XML на любом необходимом уровне детализации от отдельных символов до токенов.
SchemaType: XMLBeans предоставляет полную модель объекта XML Schema, которая может использоваться для отражения метаинформации базовой схемы. Например, разработчик может сгенерировать пример экземпляра XML для XML-схемы или, возможно, найти перечисления для элемента, чтобы они могли быть отображены.
Ниже приведен пример простого определения схемы 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= "[AZ]{2}" /> <xs:whiteSpace value= "collapse" /> </xs:restriction> </xs:simpleType> <xs:simpleType name= "IsoAlpha3" > <xs:ограничение base= "xs:string" > <xs:pattern value= "[AZ]{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 ); // из Википедии :-) // распечатать XMLBean страны как XML System.out.println ( country.xmlText ( ) ) ; // проверить , является ли документ допустимым — выведет "Документ недопустим" // потому что требуемый дочерний элемент Iso отсутствует в объекте System.out.println ( " Документ является " + ( country.validate ( ) ? "valid" : "invalid" ) ); // добавить дочерний элемент со сложным типом Iso , чтобы сделать документ допустимым Iso iso = country.addNewIso ( ) ; iso.setAlpha2 ( " DK " ) ; iso.setAlpha3 ( "DNK" ); iso.setCountryCode ( 208 ); // распечатать XMLBean страны как XML System.out.println ( country.xmlText ( ) ) ; // проверить , действителен ли документ - вывести "Документ действителен " System.out.println ( " Документ " + ( country.validate ( ) ? " valid " : " invalid " ) ) ; } }
Дэвид Бау был главным дизайнером проекта XMLBeans 1.0, когда он работал в BEA . XMLBeans начинался на основе XMLMaps, инструмента связывания XML, включенного в предыдущие продукты BEA WebLogic . XMLBeans изначально разрабатывался как часть фирменной платформы BEA WebLogic Workshop Framework, но из интервью, проведенных после его первого анонса 27 января 2003 года, стало очевидно, что BEA хотела, чтобы он стал открытым стандартом. В то время еще не было решено, какую организацию BEA хотела бы привлечь к работе по стандартизации. Позже в том же году он был передан в дар Apache Software Foundation. Первоначальная команда включала Сезара Кристиана Андрея и Эрика Василика, позже к команде присоединились Клифф Шмидт и Раду Преотюк-Пьетро, Джейкоб Даннер, Кевин Краузе и Винг Ю Пун. Сейчас XMLBeans разрабатывается Apache POI .