XMLBean XSD JAVABEAN

1.   XMLbeans 는 태그 흐름 을 기반 으로 하기 때문에 xml 데이터 와 문서 사이 에 지침 을 쉽게 사용 할 수 있 습 니 다.포인터 인 터 페 이 스 는 모든 xml 데이터 와 문서 에 적 용 됩 니 다.
2.   xml 데이터 와 문서 에 schema 가 있다 면 XML bean 은 XML 데이터 와 문서 의 자바 류'보기'(즉,이 XML 데이터 와 문 서 를 방문 하 는 자바 코드)를 생 성 합 니 다.
3.   개발 자 는 이러한 자바 코드 를 사용 하여 xml 데이터 와 문 서 를 쉽게 읽 거나 쓸 수 있 으 며 xml schema 에 규정된 제약 사항 을 강제 적 으로 실행 할 수 있 습 니 다.
4.   자바 류'보기'는 원본 xml 데이터 와 문서 의 내용 을 충 실 히 표현 할 수 있 습 니 다.자바 류'보기'는 모두 보 호 받 고 가장 기본 적 인 xml 표현 을 바탕 으로 하기 때 문 입 니 다.
따라서 XML bean s 를 사용 하여 xml 데이터 와 문 서 를 방문 하 는 장점 은 분명 합 니 다.
1.   데이터 와 문 서 를 대상 으로 바라 보고 처리 하 는 관점 을 완전히 사용 합 니 다.
2.   개발 자 는 더 이상 XML 데이터 와 문서 에 접근 하기 위해 대량의 코드 를 작성 할 필요 가 없습니다.
3.   schema 에 규정된 데이터 에 대한 제약 조건 을 사용 할 수 있 으 며,이러한 제약 을 실현 하 는 코드 를 스스로 작성 할 필요 가 없습니다.
4.   모든 xml 데이터 와 문 서 를 분석 할 필요 가 없습니다.단지 그 중의 특정한 데이터 항목 에 접근 하기 위해 서 입 니 다.
XMLbean 은 Schema 를 바탕 으로 xml 에 접근 하 는 해결 방법 으로 xml 데이터 와 문 서 를 방문 하고 처리 할 때 xml 의 내용 을 완전히 방문 할 수 있 을 뿐만 아니 라 xml 의 schema 정 보 를 잃 어 버 리 지 않 는 강력 한 기능 을 제공 합 니 다.XMLbean s 를 사용 하면 대상 을 대상 으로 하 는 관점 으로 xml 데이터 와 문 서 를 처리 할 수 있 고 이 xml 데이터 에 대응 하 는 xml 구조 와 schema 에 충실 할 수 있 습 니 다.
XML 해석
  
XML 은 자바 응용 프로그램 에서 점점 중요 해 지고 데이터 저장 과 교환 에 광범 위 하 게 응용 된다.예 를 들 어 우리 가 흔히 볼 수 있 는 프로필 은 모두 XML 방식 으로 저장 된다.XML 은 자바 Message Service 와 웹 서비스 등 기술 을 데이터 교환 으로 도 응용 한다.
  
따라서 XML 문 서 를 정확하게 읽 고 쓰 는 것 은 XML 응용의 기초 이다.
  
자바 는 XML 을 해석 하 는 데 SAX 와 DOM 두 가지 방식 을 제공 하지만 그래도 조금 복잡 한 XML 을 읽 고 쓰 는 것 은 쉬 운 일이 아니다.
  
2.XMLbean 소개
  
Hibernate 는 현재 유행 하 는 자바 환경 을 위 한 대상/관계 데이터베이스 매 핑 도구 가 되 었 습 니 다.
  
Hibernate 등 대상/관계 데이터베이스 매 핑 도구 가 나타 나 기 전에 데이터베이스 에 대한 조작 은 JDBC 를 통 해 이 루어 집 니 다.데이터베이스 에 대한 모든 조작 은 개발 자가 직접 SQL 문 구 를 써 서 이 루어 져 야 합 니 다.대상/관계 데이터베이스 매 핑 도구 가 나타 나 면 데이터 베 이 스 를 자바 빈 에 대한 조작 으로 전환 합 니 다.데이터베이스 개발 에 큰 편 의 를 주 었 습 니 다.따라서 XML 에 대한 읽 기와 쓰 기 를 자바 빈 으로 바 꾸 는 유사 한 도구 가 있다 면 XML 의 읽 기와 쓰 기 를 간소화 할 것 입 니 다.XML 에 익숙 하지 않 은 개발 자 들 도 XML 을 편리 하 게 읽 고 쓸 수 있 습 니 다.이 도구 가 바로 XML bean 입 니 다.
  
3.XMLbean 과 XML 문 서 를 준비 합 니 다.
  
XMLbean 은 아파 치 의 오픈 소스 프로젝트 입 니 다.http://www.apache.org다운로드,최신 버 전 은 2.0 입 니 다.압축 해제 후 디 렉 터 리 는 다음 과 같 습 니 다.
  xmlbean2.0.0
  +---bin
  +---docs
  +---lib
  +---samples
  +---schemas
  
또한 XML 문서(customers.xml)를 준비 해 야 합 니 다.본 논문 의 예 에서 우 리 는 이 문 서 를 읽 고 쓸 것 입 니 다.문서 의 원본 코드 는 다음 과 같 습 니 다.
  
<?xml version="1.0" encoding="UTF-8"?><Customers>
  <customer>
   <id>1</id>
  <gender>female</gender>
   <firstname>Jessica</firstname>
   <lastname>Lim</lastname>
   <phoneNumber>1234567</phoneNumber>
  <address>
  <primaryAddress>
  <postalCode>350106</postalCode>
  <addressLine1>#25-1</addressLine1>
   <addressLine2>SHINSAYAMA 2-CHOME</
  addressLine2>
   </primaryAddress>
  <billingAddress>
   <receiver>Ms Danielle</receiver>
   <postalCode>350107</postalCode>
   <addressLine1>#167</addressLine1>
   <addressLine2>NORTH TOWER HARBOUR CITY</addressLine2>
   </billingAddress>
  </address>
  </customer>
  <customer>
  <id>2</id>
   <gender>male</gender>
   <firstname>David</firstname>
   <lastname>Bill</lastname>
   <phoneNumber>808182</phoneNumber>
  <address>
   <primaryAddress>
  <postalCode>319087</postalCode>
  <addressLine1>1033 WS St.</addressLine1>
   <addressLine2>Tima Road</addressLine2>
   </primaryAddress>
  <billingAddress>
   <receiver>Mr William</receiver>
   <postalCode>672993</postalCode>
   <addressLine1>1033 WS St.</addressLine1>
   <addressLine2>Tima Road</addressLine2>
   </billingAddress>
  </address>
   </customer></Customers>

  
이것 은 고객 의 데이터 모델 입 니 다.모든 고객 은 고객 번호(ID),이름,성별(gender),전화번호(phoneNumber)와 주소 가 있 습 니 다.그 중에서 주 소 는 두 가지 가 있 습 니 다.첫 번 째 주소(Primary Address)와 계산서 주소(BillingAddress),각 주 소 는 우편 번호,주소 1,주소 2 로 구성 되 어 있 습 니 다.그 중에서 계산서 주 소 는 수신 자(receiver)도 있 습 니 다.
  
또한 설정 파일(파일 이름 customer.xsdconfig)을 준비 해 야 합 니 다.이 파일 의 역할 은 다음 과 같 습 니 다.
  
<xb:config xmlns:xb="http://xml.apache.org/xmlbeans/2004/02/xbean/config">
   <xb:namespace>
   <xb:package>sample.xmlbean</xb:package>
   </xb:namespace></xb:config>

  
4.XMLbean 사용 절차
  
자바 환경 을 위 한 다른 대상/관계 데이터베이스 맵 도구 의 사용 절차 와 마찬가지 로 XMLbean 을 정식으로 사용 하기 전에 우 리 는 두 가지 준 비 를 해 야 합 니 다.
  
1.XML 스키 마 파일 생 성
  
XML Schema 파일 이 무엇 입 니까?정상 적 인 상황 에서 모든 XML 파일 에는 Schema 파일 이 있 습 니 다.XML Schema 파일 은 XML 의 제약 파일 로 XML 파일 의 구조 와 요소,그리고 요소 와 구조 에 대한 제약 을 정의 합 니 다.쉽게 말 하면 XML 파일 이 데이터베이스 에 기록 되 어 있다 면 Schema 는 표 구조 정의 입 니 다.
  
이 파일 이 왜 필요 합 니까?XMLbean 은 이 파일 을 통 해 XML 파일 의 구조 와 제약,예 를 들 어 데이터 형식 등 을 알 아야 합 니 다.이 Schema 파일 을 이용 하여 XMLbean 은 일련의 자바 Classes 를 만들어 XML 에 대한 조작 을 실현 할 것 입 니 다.개발 자로 서 XMLbean 에서 발생 하 는 자바 Classes 를 이용 하여 XML 에 대한 조작 을 완성 할 것 입 니 다.SAX 나 DOM 이 필요 하지 않 습 니 다.
  
어떻게 이 Schema 파일 을 만 듭 니까?XML 에 익숙 한 개발 자 에 게 는 스스로 이 Schema 파일 을 쓸 수 있 고 XML 에 익숙 하지 않 은 개발 자 에 게 는 도 구 를 통 해 완성 할 수 있 습 니 다.
  
비교적 유명한 예 를 들 어 XML SPY 와 Stylus Studio 는 XML 파일 을 통 해 Schema 파일 을 생 성 할 수 있 습 니 다.가입 하면 이 Schema 파일(customer.xsd)을 생 성 했 습 니 다.
 
 <?xml version="1.0" encoding="UTF-8"?>
  <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
   elementFormDefault="qualified">
  <xs:element name="Customers">
  <xs:complexType>
   <xs:sequence>
  <xs:element maxOccurs="unbounded" name="customer"
  type="customerType"/>
  </xs:sequence>
  </xs:complexType>
  </xs:element>
   <xs:complexType name="customerType">
  <xs:sequence>
  <xs:element name="id" type="xs:int"/>
  <xs:element name="gender" type="xs:string"/>
  <xs:element name="firstname" type="xs:string"/>
  <xs:element name="lastname" type="xs:string"/>
  <xs:element name="phoneNumber" type="xs:string"/>
  <xs:element name="address" type="addressType"/>
  </xs:sequence>
   </xs:complexType>
  <xs:complexType name="addressType">
  <xs:sequence>
  <xs:element name="primaryAddress" type="primaryAddressType"/>
  <xs:element name="billingAddress" type="billingAddressType"/>
  </xs:sequence>
   </xs:complexType>
  <xs:complexType name="primaryAddressType">
  <xs:sequence>
   <xs:element name="postalCode" type="xs:string"/>
   <xs:element name="addressLine1" type="xs:string"/>
   <xs:element name="addressLine2" type="xs:string"/>
   </xs:sequence>
  </xs:complexType>
   <xs:complexType name="billingAddressType">
   <xs:sequence>
  <xs:element name="receiver" type="xs:string"/>
  <xs:element name="postalCode" type="xs:string"/>
  <xs:element name="addressLine1" type="xs:string"/>
  <xs:element name="addressLine2" type="xs:string"/>
  </xs:sequence>
   </xs:complexType>
  </xs:schema>

  
2.scomp 를 이용 하여 자바 클래스 생 성
  
scomp 는 XMLbean 이 제공 하 는 컴 파일 도구 입 니 다.bin 디 렉 터 리 에 있 습 니 다.이 도 구 를 통 해 위의 Schema 파일 을 자바 Classes 로 만 들 수 있 습 니 다.
  
scomp 의 문법 은 다음 과 같다.-
  
  scomp [options] [dirs]* [schemaFile.xsd]* [service.wsdl]* [config.xsdconfig]*
  
주요 매개 변수 설명:
-src[dir]--생 성 된 자바 Classes 저장 디 렉 터 리
-srconly--자바 클래스 를 컴 파일 하지 않 고 Jar 파일 을 만 들 지 않 습 니 다.
-out[jarFileName]--생 성 된 Jar 파일,결 성 은 xmltypes.jar
-copiler-자바 컴 파일 러 의 경로,즉 자바 c 의 위치
schemaFile.xsd--XML Schema 파일 위치
config.xsdconfig--xsdconfig 파일 의 위치,이 파일 은 주로 생 성 된 자바 Class 를 만 드 는 데 사 용 됩 니 다.
패 키 지 는 sample.xmlbean 입 니 다.
  
본문 에서 나 는 이렇게 운행 한다.
   scomp -src build\src -out build\customerXmlBean.jar schema\customer.xsd
  -compiler C:\jdk142_04\bin\javac customer.xsdconfig
  
이 명령 행 은 scomp 에 customerXmlBean.jar 를 생 성하 여 build 디 렉 터 리 에 두 는 동시에
소스 코드 를 build\src 에 생 성 합 니 다.Schema 파일 은 customer.xsd 이 고 xsdconfig 파일 은 customer.xsdconfig 입 니 다.
  
사실,생 성 된 자바 소스 코드 는 큰 역할 을 하지 않 습 니 다.jar 파일 을 원 합 니 다.build\src\sample\xmlbean 에서 생 성 된 Classes 를 먼저 보 겠 습 니 다.
  CustomersDocument.java
--전체 XML 문서 의 Java Class 매 핑
   CustomerType.java
--노드 sustomer 의 매 핑
  AddressType.java
--노드 address 의 매 핑
  BillingAddressType.java
--노드 빌 링 어드레스 의 매 핑
  PrimaryAddressType.java
--노드 primary Address 의 매 핑
  
자,이제 우리 의 모든 준비 작업 이 완료 되 었 습 니 다.다음은 중점 에 들 어 갑 니 다.방금 생 성 된 jar 파일 을 이용 하여 XML 을 읽 고 쓰 십시오.
  
5.XMLbean 을 이용 하여 XML 파일 읽 기
  
XMLbean 2.0.0\lib\의 Jar 파일 과 방금 우리 가 만 든 customerXmlBean.jar 를 추가 하 는 자바 Project 를 새로 만 듭 니 다.
  
Project 의 ClassPath 로 갑 니 다.
  
자바 클래스 를 새로 만 듭 니 다:customerXMLbean.원본 코드 는 다음 과 같 습 니 다:
  
package com.sample.reader;
  import java.io.File;
  import sample.xmlbean.*;
  import org.apache.commons.beanutils.BeanUtils;
  import org.apache.xmlbeans.XmlOptions;
  public class CustomerXMLBean {
  private String filename = null;
  public CustomerXMLBean(String filename) {
  super();
  this.filename = filename;
  }
  public void customerReader() {
  try {
   File xmlFile = new File(filename);
  CustomersDocument doc = CustomersDocument.Factory.parse(xmlFile);
  CustomerType[] customers = doc.getCustomers().getCustomerArray();
  for (int i = 0; i < customers.length; i++) {
  CustomerType customer = customers[i];
  println("Customer#" + i);
  println("Customer ID:" + customer.getId());
  println("First name:" + customer.getFirstname());
  println("Last name:" + customer.getLastname());
  println("Gender:" + customer.getGender());
  println("PhoneNumber:" + customer.getPhoneNumber());
  // Primary address
  PrimaryAddressType primaryAddress = customer.getAddress().getPrimaryAddress();
   println("PrimaryAddress:");
  println("PostalCode:" + primaryAddress.getPostalCode());
  println("AddressLine1:" + primaryAddress.getAddressLine1());
  println("AddressLine2:" + primaryAddress.getAddressLine2());
  // Billing address
   BillingAddressType billingAddress = customer.getAddress().getBillingAddress();
   println("BillingAddress:");
  println("Receiver:" + billingAddress.getReceiver());
  println("PostalCode:" + billingAddress.getPostalCode());
  println("AddressLine1:" + billingAddress.getAddressLine1());
  println("AddressLine2:" + billingAddress.getAddressLine2());
  }
  } catch (Exception ex) {
  ex.printStackTrace();
  }
  }
  private void println(String str) {
  System.out.println(str);  }  public static void main(String[] args) {
  String filename = "F://JavaTest//Eclipse//XMLBean//xml//customers.xml";
   CustomerXMLBean customerXMLBean = new CustomerXMLBean(filename);
   customerXMLBean.customerReader();
  }
  }

  
출력 결 과 를 참조 하여 실행 합 니 다:
  
Customer#0
  Customer ID:1
  First name:Jessica
  Last name:Lim
  Gender:female
  PhoneNumber:1234567
   PrimaryAddress:
  PostalCode:350106
  AddressLine1:#25-1
   AddressLine2:SHINSAYAMA 2-CHOME
  BillingAddress:
  Receiver:Ms Danielle
  PostalCode:350107
  AddressLine1:#167
   AddressLine2:NORTH TOWER HARBOUR CITY
  Customer#1
  Customer ID:2
  First name:David
  Last name:Bill
  Gender:male
   PhoneNumber:808182
  PrimaryAddress:
  PostalCode:319087
   AddressLine1:1033 WS St.
  AddressLine2:Tima Road
   BillingAddress:
  Receiver:Mr William
  PostalCode:672993
   AddressLine1:1033 WS St.
  AddressLine2:Tima Road

어 때,쉽 지 않 아?XMLbean 의 위력.
  
6.XMLbean 을 이용 하여 XML 파일 쓰기
  
XML bean 을 이용 하여 XML 문 서 를 만 드 는 것 도 쉬 운 일 입 니 다.Method 를 하나 더 추가 합 니 다.
자바 클 라 스 를 보 세 요:
  
public void createCustomer() {
  try {
  // Create Document
   CustomersDocument doc = CustomersDocument.Factory.newInstance();
  // Add new customer
  CustomerType customer = doc.addNewCustomers().addNewCustomer();
  // set customer info
   customer.setId(3);
  customer.setFirstname("Jessica");
   customer.setLastname("Lim");
  customer.setGender("female");
   customer.setPhoneNumber("1234567");
  // Add new address
   AddressType address = customer.addNewAddress();
  // Add new PrimaryAddress
  PrimaryAddressType primaryAddress = address.addNewPrimaryAddress();
   primaryAddress.setPostalCode("350106");
   primaryAddress.setAddressLine1("#25-1");
   primaryAddress.setAddressLine2("SHINSAYAMA 2-CHOME");
  // Add new BillingAddress
  BillingAddressType billingAddress = address.addNewBillingAddress();
  billingAddress.setReceiver("Ms Danielle");
  billingAddress.setPostalCode("350107");
   billingAddress.setAddressLine1("#167");
   billingAddress.setAddressLine2("NORTH TOWER HARBOUR CITY");
  File xmlFile = new File(filename);
  doc.save(xmlFile);    } catch (Exception ex) {
  ex.printStackTrace();    } }
    main method.
  public static void main(String[] args) {
  String filename = "F://JavaTest//Eclipse//XMLBean//xml//customers_new.xml";
   CustomerXMLBean customerXMLBean = new CustomerXMLBean(filename);
   customerXMLBean.createCustomer();
  }

실행,customers 열기new.xml:
  
<?xml version="1.0" encoding="UTF-8"?>
  <Customers>
  <customer>
  <id>3</id>
   <gender>female</gender>
   <firstname>Jessica</firstname>
   <lastname>Lim</lastname>
   <phoneNumber>1234567</phoneNumber>
  <address>
  <primaryAddress>
  <postalCode>350106</postalCode>
  <addressLine1>#25-1</addressLine1>
   <addressLine2>SHINSAYAMA 2-CHOME</addressLine2>
   </primaryAddress>
  <billingAddress>
   <receiver>Ms Danielle</receiver>
   <postalCode>350107</postalCode>
   <addressLine1>#167</addressLine1>
   <addressLine2>NORTH TOWER HARBOUR CITY</addressLine2>
   </billingAddress>
  </address>
  </customer>
  </Customers>

  
7.XML bean 을 이용 하여 XML 파일 수정
  
우 리 는 방법 을 하나 더 추가 합 니 다.
  
public void updateCustomer(int id,String lastname) {
  try {
  File xmlFile = new File(filename);
  CustomersDocument doc = CustomersDocument.Factory.parse(xmlFile);
  CustomerType[] customers = doc.getCustomers().getCustomerArray();
  for (int i = 0; i < customers.length; i++) {
  CustomerType customer = customers[i];
  if(customer.getId()==id){
   customer.setLastname(lastname);
  break;
  }
  }
   doc.save(xmlFile);
  } catch (Exception ex) {
   ex.printStackTrace();
  }
  }
  main method:
  public static void main(String[] args) {
  String filename = "F://JavaTest//Eclipse//XMLBean//xml//customers_new.xml";
   CustomerXMLBean customerXMLBean = new CustomerXMLBean(filename);
   customerXMLBean.updateCustomer(3,"last");  }

실행 후,우 리 는 고객 번호 가 3 인 고객 의 lastname 이 last 로 바 뀌 었 음 을 볼 수 있 습 니 다.
  
8.XMLbean 을 이용 하여 customer 삭제
  
방법 을 하나 더 추가 합 니 다:
  
public void deleteCustomer(int id) {
  try {
   File xmlFile = new File(filename);
  CustomersDocument doc = CustomersDocument.Factory.parse(xmlFile);
  CustomerType[] customers = doc.getCustomers().getCustomerArray();
  for (int i = 0; i < customers.length; i++) {
  CustomerType customer = customers[i];
  if(customer.getId()==id){
  customer.setNil() ;
  break;
  }
  }
  doc.save(xmlFile);
  } catch (Exception ex) {
   ex.printStackTrace();
  }
  }
  
  main method:
  public static void main(String[] args) {
  String filename = "F://JavaTest//Eclipse//XMLBean//xml//customers_new.xml";
   CustomerXMLBean customerXMLBean = new CustomerXMLBean(filename);
   customerXMLBean.deleteCustomer(3);
  }

  
실행 하면 우 리 는 고객 번호 가 3 인 고객 의 자료 가 이미 삭제 되 었 음 을 볼 수 있 을 것 이다.
  
9.조회 XML
  
본 고 에서 언급 한 것 을 제외 하고 XML bean 을 이용 하여 XML 의 읽 기와 쓰기 조작 을 가볍게 완성 할 수 있 는 동시에 XPath 와 XQuery 를 결합 하여
  
XML bean 은 SQL 조회 데이터베이스 처럼 XML 데 이 터 를 편리 하 게 조회 할 수 있 습 니 다.XML 조회 와 XML 데이터 베 이 스 를 어떻게 만 드 는 지 에 대해 서 는 다른 글 에서 토론 하 겠 습 니 다.
   XMLbeans 는 데이터 바 인 딩 에 사용 할 다음 응용 프로그램 인터페이스(API)를 제공 합 니 다.
    * XmlObject:자바 류 가 XML Schema 를 통 해 생 성 된다 면 이 자바 류 는 모두 XmlObject API 에서 파생 됩 니 다.
    * XmlCursor:XmlCursor API 는 XML 인 포 셋 에 대한 저층 접근 권 을 제공 합 니 다.XML 인 스 턴 스 의 커서 위 치 를 표시 합 니 다.
    * SchemaType:기본 메타 정보 에 사용 되 는 XML Schema 대상 모델.
XMLbean 컴 파일 러 는 XML 모드 의 대상 을 생 성 합 니 다.이 대상 은 패턴 의 구조 와 제약 을 나타 내 는 유 니 버 설 자바 류 와 인터페이스 임 을 나타 낸다.자바 클래스 와 인 터 페 이 스 를 생 성 한 후 이 모드 에 맞 는 XML 인 스 턴 스 문 서 는 연 결 됩 니 다.바 인 딩 과정 은 대상 을 대상 으로 하 는 방식 으로 XML bean API 를 사용 하여 실제 XML 인 스 턴 스 문서 에 접근 하 는 데 이 터 를 포함한다.
  
끝 말
  
XML bean 은 XML 을 쉽게 읽 고 쓰 는 데 도움 을 줄 수 있 습 니 다.이것 은 XML 의 학습 과 사용 을 낮 추 는 데 도움 이 될 것 입 니 다.이 기초 가 있 으 면 개발 자 들 은 XML 관련 기술 과 웹 서비스,JMS 등 다른 J2EE 기술 을 더 많이 배우 기 위해 좋 은 기 초 를 다 질 것 입 니 다.

좋은 웹페이지 즐겨찾기