�A�� ���ɗ���XML�c�[���W�i2�j
JAXB�Ńf�[�^�o�C���f�B���O�ɒ��킵�悤

XML�v���O���~���O�ł́ADOM��SAX�Ƃ�����API���g�p����ƒP���ȃR�[�h���J��Ԃ��������ƂɂȂ萶�Y�����オ��Ȃ����̂��B�{�A�ڂł͊J���҂��g�y������h���߂ɖ𗧂�XML�֘A�c�[�����Љ�Ă����B�i�ҏW�ǁj

www.netpotlet.com
���c�m�q
2003/12/4

��JAXB�̊T�v

��ȓ��e
JAXB�̊T�v
JAXB�Q�Ǝ����̓���
�Z�b�g�A�b�v
�J���菇
�X�L�[�}�̍쐬
�X�L�[�}�̃R���p�C��
�A�v���P�[�V�����쐬
�A�v���P�[�V�������s
��������A�v���P�[�V����
��������A�v���P�[�V�����̎��s
�܂Ƃ߁��T���v���E�_�E�����[�h

�@�O��uXML��Java�Ƀ}�b�v����f�[�^�o�C���f�B���O�v�ł́A�f�[�^�o�C���f�B���O���ǂ̂悤�Ȃ��̂��Ƃ������T�v��������܂����B���񂩂�͎��ۂɃf�[�^�o�C���f�B���O�c�[�����g���A�ǂ̂悤�ɂ���XML���f������I�u�W�F�N�g���f���ւ̃}�b�s���O���s���̂������Ă����܂��傤�B

�@�ŏ��Ɏ��グ��̂�JAXB�iThe Java Architecture for XML Binding�j�ł��BJAXB��Java�̐��E�ł�����g�W���h�ƂȂ�ׂ��J������Ă���f�[�^�o�C���f�B���O�ŁAJava�̂��܂��܂�API���l�A�d�l��JCP�iJava Community Process�j�Ō��߂��A�Q�Ǝ����iRI�FReference Implementation�j���T���E�}�C�N���V�X�e���Y���烊���[�X����Ă��܂��B

�@���̂悤�ȃX�^�C���ŊJ������A�����[�X�����API��c�[�����g���Ƃ��ɒ��ӂ��Ă��������̂́A���̖��O���d�l���w���Ă���̂��������Ӗ�����̂��Ƃ����_�ł��B�ʏ�A�T���E�}�C�N���V�X�e���Y�������[�X����Q�Ǝ����̖��O�͎d�l���Ɠ����ł��B�������A�d�l�Ǝ����ł̓o�[�W�����ԍ����Ⴂ�܂����A�T���E�}�C�N���V�X�e���Y�ȊO�̃x���_��c�̂��d�l�̎����������[�X���Ă��邱�Ƃ�����܂��B�Ⴆ�΁AJAXB 1.0��JSR-31�Ƃ����ԍ��Ō������ꂽAPI�d�l�ł����A���̎Q�Ǝ����ł���f�[�^�o�C���f�B���O�c�[���̍ŐV�Łi2003�N11�����_�j��JAXB 1.0.2�ł��B�܂��AApache�������[�X���Ă���Xerces��JAXP�iJava API for XML Processing�j���������Ă��܂����AAxis��SAAJ�iSOAP with Attachments API for Java�j���������Ă��܂��B�����̂��ƂȂ̂ŋC��t���܂��傤�B

�@�{�L���̃v���O������

���g�p���ALinux��œ�����m�F���Ă��܂��B

��JAXB�Q�Ǝ����̓���

�@JAXB�̎Q�Ǝ�����JWSDP�iJava Web Services Developer Pack�j�Ɋ܂܂�Ă��܂��BJWSDP��JAXB�AJAXP�ASAAJ�AJSF�ȂǁAXML��XML�x�[�X�̊e��c�[�����ЂƂ܂Ƃ߂ɂ����p�b�P�[�W�ŁA����URL����_�E�����[�h�ł��܂��B

�@http://java.sun.com/webservices/webservicespack.html

�@2003�N11�����_�ŁAJWSDP�̍ŐV�ł�1.3�ł��BJWSDP�̃o�[�W�������オ���Ă��A�܂܂��Q�Ǝ����̂��ׂẴo�[�W�������オ��킯�ł͂���܂���B��LWeb�y�[�W��e�c�[���̃����[�X�m�[�g�Ƀo�[�W���������L����Ă���̂Ŋm�F���Ă��������B

�@�Ȃ��AJWSDP�ɂ�JAXB�̃o�C�i���݂̂��܂܂�Ă��܂����AJAXB Standard Implementation Project����\�[�X�R�[�h������ł��܂��B

���Z�b�g�A�b�v

�@JAXB���g���O�ɕK�v�ȃZ�b�g�A�b�v������Ă����܂��傤�B����ȍ~�̐����ł�JWSDP���C���X�g�[�������f�B���N�g����JWSDP_HOME�ƌĂсA$JWSDP_HOME�ŎQ�Ƃ��邱�Ƃɂ��܂��B

�A�[�J�C�u�̍\��

�@JAXB�̎��s�ɂ͎��̃A�[�J�C�u���K�v�ł��B

  • $JWSDP_HOME/jaxb/lib/*
  • $JWSDP_HOME/jwsdp-shared/lib/jax-qname.jar
  • $JWSDP_HOME/jwsdp-shared/lib/namespace.jar
  • $JWSDP_HOME/jwsdp-shared/lib/relaxngDatatype.jar
  • $JWSDP_HOME/jwsdp-shared/lib/xsdlib.jar
  • $JWSDP-HOME/jaxp/lib/endorsed/*

�@���̒��ŁA�Ō��jaxp/lib/endorsed�ɂ���A�[�J�C�u�́A

  1. $JAVA_HOME/jre/lib�ȉ���endorsed�f�B���N�g�����ƃR�s�[����
  2. java.endorsed.dirs�V�X�e���v���p�e�B��$JWSDP_HOME/jaxp/lib/endorsed���Z�b�g����

�̂ǂ��炩�̕��@�ŃZ�b�g�A�b�v���܂��B�{�L���ł�1�–ڂ̕��@�ōs���܂����B���̂ق��̃A�[�J�C�u�̓N���X�p�X�ɃZ�b�g���܂��B

Eclipse�̃Z�b�g�A�b�v

�@�{�L����Eclipse��ŊJ���^���s���邱�Ƃ�O��ɂ��܂��̂ŁA�N���X�p�X�̃Z�b�g�A�b�v��Eclipse��ōs���܂��B�������AEclipse�̏ڍׂɂ͐G��܂���̂ŁA��IT��Eclipse�֘A�L���uEclipse���g�����I�v�Ȃǂ��Q�Ƃ��Ă��������B

1. Java�v���W�F�N�g�쐬�i��Fvalley�v���W�F�N�g�j
�@ �t�@�C�� �� �V�K �� �v���W�F�N�g ���@�i����j
�@ Java�i���y�C���j �� Java�v���W�F�N�g�i�E�y�C���j �� ���� ���@�i����j
�@ �v���W�F�N�g���ivalley�j �� �I���@�i����j

2. Java�̃r���h�E�p�X�ݒ�
�@ �p�b�P�[�W�E�G�N�X�v���[���Ńv���W�F�N�g�ivalley�j�I�� �� �E�N���b�N ��
�@ �v���p�e�B�[ ���@�i����j
�@ Java�̃r���h�E�p�X�i���y�C���j �� ���C�u�����[�I�� ��
�@ �O��JAR�̒lj� �� ���̃A�[�J�C�u��lj�����@�i����j
�@ jaxb-api.jar, jaxb-impl.jar, jaxb-libs, jax-qname.jar, namespace.jar
�@ relaxngDatatype.jar, xsdlib.jar

3. �t�H���_�쐬
�@ �\�[�X�t�H���_
�@ �p�b�P�[�W�E�G�N�X�v���[���Ńv���W�F�N�g�ivalley�j�I�� �� �E�N���b�N ��
�@ �V�K �� �\�[�X�E�t�H���_ ���@�i����j
�@ �t�H���_���isrc�j �� �I���@�i����j

�@ �X�L�[�}�p�t�H���_
�@ �p�b�P�[�W�E�G�N�X�v���[���Ńv���W�F�N�g�ivalley�j�I�� �� �E�N���b�N ��
�@ �V�K �� �t�H���_ ���@�i����j
�@ �t�H���_���ischemas�j �� �I���@�i����j

�@ XML�����p�t�H���_
�@ �p�b�P�[�W�E�G�N�X�v���[���Ńv���W�F�N�g�ivalley�j�I�� �� �E�N���b�N ��
�@ �V�K �� �t�H���_ ���@�i����j
�@ �t�H���_���idocs�j �� �I���@�i����j

���J���菇

�@�f�[�^�o�C���f�B���O�𗘗p����ꍇ�A�}1�Ɏ����菇�ŊJ����i�߂܂��B�ŏ��ɁAXML�����̍\�����`�����X�L�[�}���쐬���܂��B���ɁA�X�L�[�}���R���p�C�����܂����A������XML���f������I�u�W�F�N�g���f���ւ̃}�b�s���O���s���AJava��API����������܂��B�}�b�s���O�Ƃ����̂̓f�[�^�o�C���f�B���O�c�[���̎�ړI�ł��̂ŁA�R���p�C���͕K���p�ӂ���Ă��܂��B

�@Java API���������ꂽ��A�v���P�[�V�������쐬���܂��B�A�v���P�[�V�����̓X�L�[�}���琶�����ꂽAPI�݂̂Ńv���O���~���O�ł���c�[���ƁA�ق���API���K�v�ȃc�[��������܂��BJAXB�͌�҂ł��B�A�v���P�[�V�����̎��s�ɂ�XML��������͂ɂ���P�[�X�������Ǝv���܂����AXML�����͕K�{�ł͂���܂���B�_�C�i�~�b�N�ɐ������AXML�����Ƃ��ďo�͂���A�v���P�[�V���������܂��B�܂��AURL��X�g���[������XML������ǂݍ��񂾂�ADOM�iDocument Object Model�j�̃C���X�^���X����荞�ނ��Ƃ��”\�ł��B

�@�}1�@�f�[�^�o�C���f�B���O�c�[���𗘗p�����J���菇

���X�L�[�}�̍쐬

�@�Ƃɂ����ŏ��ɕ����\���̒�`�������Ȃ��Ă͂����܂���BJAXB��XML Schema���f�t�H���g�̃X�L�[�}����ł����A���������Ƃ����ʒu�t����RELAX NG�ADTD�AWSDL���T�|�[�g���Ă��܂��BXML Schema�ɂ‚��Ă�

�ŘA�ڋL�������J����Ă���ق��A���̏��Ђ��o�ł���Ă��܂��̂ŁA�Q�l�ɂ��Ă��������B

  • �wXML Schema�x�G���b�N�E�o���E�f�� �u���X�g���@�c�����l �ق��|��
    �I���C���[�W���p���@ISBN487311120X

�@JAXB 1.0���Ή����Ă���̂�XML Schema�̃T�u�Z�b�g�ł��B��Ή����ڂȂǂ̏ڍׂɂ‚��Ă͎d�l���Ŋm�F���Ă��������B

�@���āA�O����グ���L�[�{�[�h�̗�ŃX�L�[�}���l���Ă݂܂��傤�B�f�[�^�o�C���f�B���O�c�[���͗v�f���⑮�������N���X���A���\�b�h���A�ϐ����ɂ��̂܂܎g���܂��̂ŁA�����œ��{����g���Ă��܂��ƂƂĂ��v���O���~���O���ɂ����Ȃ�܂��̂ŕύX���܂����B�܂��A�\���ɂ‚��Ă�����������ƃu���b�V���A�b�v���āAPC�ƌg�ѓd�b�̃L�[�{�[�h��\���ł���悤�ɂ��܂��B����ɁA�L�[�T�C�Y�ƃL�[�^�C�v�͑����ł��v�f�ł��w��ł���悤�ɂ��Ă݂܂��B�Ⴆ�΁A���X�g1�⃊�X�g2�̂悤�ɏ�����悤�ɂ��邱�Ƃ��l���܂��B

 1  <?xml version="1.0" encoding="UTF-8"?>
 2  <keyboard>
 3    <key>
 4      <label type="number" default="true">1</label>
 5      <label type="charactor">!</label>
 6    </key>
 7    <key>
 8       <label type="charactor">a</label>
 9    </key>
10    <key attrSize="medium">
11      <label type="control">shift</label></key>
12    <key>
13      <label default="true"><type>number</type>2</label>
14      <label><type>charactor</type>@</label>
15    </key>
16    <key>
17      <size>large</size>
18      <label><type>control</type>space</label>
19    </key>
20  </keyboard>
���X�g1�@keyboard1.xml

 1  <?xml version="1.0" encoding="EUC-JP"?>
 2  <keyboard>
 3    <key>
 4      <label type="number" default="true">1</label>
 5      <label type="charactor">��</label>
 6      <label type="charactor">��</label>
 7    </key>
 8    <key>
 9      <label type="number" default="true">2</label>
10      <label type="charactor">��</label>
11      <label type="charactor">A</label>
12    </key>
13    <key>
14      <label type="charactor" default="true">#</label>
15      <label type="control">�L��</label>
16    </key>
17  </keyboard>
���X�g2�@keyboard2.xml

�@����ƁAXML Schema�ɂ���`�̓��X�g3�̂悤�ɂȂ�܂��̂ŁAEclipse��Ŏ��̂悤�ɂ���keyboard.xsd�t�@�C�����쐬���܂��B

4. �X�L�[�}�t�@�C���̍쐬
�@ �p�b�P�[�W�E�G�N�X�v���[���Ńt�H���_ schemas�I�� �� �E�N���b�N ��
�@ �V�K �� �t�@�C�� ���@�i����j
�@ �t�@�C���� keyboard.xsd �� �I���@�i����j

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
 3   <xs:element name="keyboard">
 4     <xs:complexType>
 5       <xs:sequence>
 6         <xs:element minOccurs="0" maxOccurs="unbounded" ref="key"/>
 7       </xs:sequence>
 8     </xs:complexType>
 9   </xs:element>
10   <xs:element name="key">
11     <xs:complexType>
12       <xs:sequence>
13         <xs:group minOccurs="0" ref="size"/>
14         <xs:element maxOccurs="unbounded" ref="label"/>
15       </xs:sequence>
16       <xs:attributeGroup ref="size"/>
17     </xs:complexType>
18   </xs:element>
19   <xs:group name="size">
20     <xs:sequence>
21       <xs:element minOccurs="0" ref="size"/>
22     </xs:sequence>
23   </xs:group>
24   <xs:element name="size" type="size.list"/>
25   <xs:attributeGroup name="size">
26     <xs:attribute name="attrSize" type="size.list"/>
27   </xs:attributeGroup>
28   <xs:simpleType name="size.list">
29     <xs:restriction base="xs:token">
30       <xs:enumeration value="large"/>
31       <xs:enumeration value="medium"/>
32       <xs:enumeration value="small"/>
33     </xs:restriction>
34   </xs:simpleType>
35   <xs:element name="label">
36     <xs:complexType mixed="true">
37       <xs:sequence>
38         <xs:element minOccurs="0" ref="type"/>
39       </xs:sequence>
40       <xs:attribute name="default" type="xs:boolean"/>
41       <xs:attribute name="type" type="type.list"/>
42     </xs:complexType>
43   </xs:element>
44   <xs:element name="type" type="type.list"/>
45   <xs:simpleType name="type.list">
46     <xs:restriction base="xs:token">
47       <xs:enumeration value="control"/>
48       <xs:enumeration value="charactor"/>
49       <xs:enumeration value="number"/>
50     </xs:restriction>
51   </xs:simpleType>
52 </xs:schema>
���X�g3�@keyboard.xsd �i2004�N6��15�����������l���j

�����l��

�uXML & Web Services ��c���v�ł��w�E�����������Ƃ���A���X�g3 keyboard.xsd�ɂ͌�肪����܂����̂Ő��������̂ɏC�����܂����B��Ⴂ�ɂ�蓮��m�F�O�̃X�L�[�}���f�ڂ��Ă��܂����B���l�ѐ\���グ�܂��B�Ȃ��A�T���v���R�[�h�̃A�[�J�C�uvalley.zip�ɂ͐�����keyboard.xsd���܂܂�Ă��܂����̂ŁA�C���̕K�v�͂���܂���B

���X�L�[�}�̃R���p�C��

�@JAXB�̃R���p�C����xjc�ƌĂ΂�Ă��܂��Bxjc�̓R�}���h���C���Ŏ��s�ł���ق��AAnt���̃^�X�NXJCTask���p�ӂ���Ă��܂��BAnt��Eclipse�‹��ɂ��g�ݍ��܂�Ă��܂��̂ŁA�����ł�Ant���g���ăR���p�C�����܂��B

Ant��make�ɑ���Java�ō��ꂽ�r���h�c�[���ł��Bmake�����@�\���L�x�ŁA�v���b�g�t�H�[���Ɉˑ����Ȃ��̂ŁA���L���g����悤�ɂȂ����c�[���ł��B

�@���X�g4�̃r���h�t�@�C�������̂悤�ɍ쐬���܂��B

5. �r���h�t�@�C���̍쐬
�@ �p�b�P�[�W�E�G�N�X�v���[���Ńv���W�F�N�g�ivalley�j�I�� �� �E�N���b�N ��
�@ �V�K �� �t�@�C�� ���@�i����j
�@ �t�@�C���� build.xml �� �I���@�i����j
�@ �i �� ���X�g4�̂悤�Ƀr���h�t�@�C�����쐬 �� �ۑ��j

�@���X�g4��build.xml�͐}2�̃f�B���N�g���\���ɂȂ��Ă��邱�Ƃ�z�肵�Ă��܂��B�v���p�e�Bjwsdp.home�ɂ͊‹��ɍ��킹��$JWSDP_HOME�̒l�ɕύX���Ă��������B�܂��AXML Schema�ȊO�̃X�L�[�}����ɂ���`���g���ꍇ�AXJCTask���s���̃I�v�V�����Ŗ������Ȃ���΂Ȃ�܂���BXJCTask�̎g�p���@��$JWSDP_HOME/jaxb/docs/ant.html�ɐ���������܂��̂ŎQ�Ƃ��Ă��������B

�}2�@valley�v���W�F�N�g�̃f�B���N�g���\��


 1  <?xml version="1.0"?>
 2  <project default="compile" basedir=".">
 3    <property name="jwsdp.home"
                value="/usr/local/java/xml/jwsdp-1.3"/>
 4    <property name="schema.dir" value="schemas"/>
 5    <property name="src.dir" value="src"/>
 6    <property name="schema" value="keyboard.xsd"/>
 7    <property name="package" value="com.netpotlet.kayak"/>
 8    
 9    <path id="classpath">
10      <pathelement path="."/>
11      <fileset dir="${jwsdp.home}" includes="jaxb/lib/*.jar"/>
12      <fileset dir="${jwsdp.home}"
                 includes="jwsdp-shared/lib/*.jar"/>
13    </path>
14    
15    <taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask">
16      <classpath refid="classpath"/>
17    </taskdef>
18    
19    <target name="compile">
20      <echo message="Compiling the schema..."/>
21      <xjc schema="${schema.dir}/${schema}"
             target="${src.dir}" package="${package}"/>
22    </target>
23  
24  </project>
���X�g4�@build.xml

�@�r���h�t�@�C�����쐬������A�ݒ肵�Ď��s���܂��B

6. �r���h�̎��s
�@ ���s �� �O���c�[�� �� �O���c�[�� ���@�i����j
�@ Ant�r���h�I�� �� �V�K ���@�i����j
�@ ���P�[�V�����^��{�f�B���N�g���ݒ�i�}3�Q�Ɓj �� �K�p �� ���s

�}3�@Ant���s�̂��߂̐ݒ�i�N���b�N�Ŋg�債�܂��j

�@2��ڈȍ~��Ant���s�͐}4�Ɏ����O���c�[�����s�{�^�����N���b�N���邾���ł��B

�}4�@�O���c�[�����s�{�^��

�@�r���h����������ƃ\�[�X�t�H���_�Ƀ��X�g2��package�v���p�e�B�i7�s�ځj�Ŏw�肵���p�b�P�[�W�ƃ\�[�X�R�[�h��������������܂��B�������ꂽ���_�ł�Eclipse��ɕ\������܂���̂ŁA���̂悤�ɂ��ă��[�N�x���`���ŐV�̏�Ԃɂ��܂��B���̂Ƃ������������ꂽ�\�[�X�R�[�h���R���p�C������܂��B

7. ���[�N�x���`�̍X�V
�@ �p�b�P�[�W�E�G�N�X�v���[���Ńv���W�F�N�g�ivalley�j�I�� �� �E�N���b�N ��
�@ �ŐV�\���@�i���1�A���2�j

���A�v���P�[�V�����쐬

�@JAXB�̓X�L�[�}����3�‚̃p�b�P�[�W�Ɗe�p�b�P�[�W�ɑ�����N���X�^�C���^�[�t�F�C�X�������������܂��B�{�L���̃T���v���̏ꍇ�A

  • com.netpotlet.kayak�F�C���^�[�t�F�C�X�^�t�@�N�g��
  • com.netpotlet.kayak.impl�F�C���^�[�t�F�C�X�̎���
  • com.netpotlet.kayak.impl.runtime�F���s���ɕK�v��API

������܂��B�A�v���P�[�V���������ꍇ�A�ʏ�Acom.netpotlet.kayak�̃C���^�[�t�F�C�X�^�t�@�N�g����javax.xml.bind�p�b�P�[�W��API���g���܂��B

�@��n�߂ɓǂݍ��݂ƌ��؂��s���A�v���P�[�V����������Ă݂��̂��A���X�g5 JaxbReader�N���X�ł��BXML�����̓ǂݍ��݂��A���}�[�V�����iUnmarshal�j�Ƃ����Ajavax.xml.bind.Unmarshaller�C���^�[�t�F�C�X���g���܂��i23�`24�s�ځj�B���؁i�o���f�[�V�����FValidation�j���K�v�ȏꍇ��Unmarhaller�̃��\�b�h�Ŏw�肵�܂��i22�s�ځj�B�e�v�f�⑮�����擾����Ƃ��ɁA�X�L�[�}���玩���������ꂽAPI���g���܂��i31�`74�s�ځj�B

�@���X�g5�̓p�b�P�[�Wcom.netpotlet.test�ɑ�����N���X�Ƃ��Ē�`���܂����̂ŁA���̂悤�ɂ��ăp�b�P�[�W�^�N���X�����܂��B

8. �p�b�P�[�W�^�N���X�̍쐬
�@ �p�b�P�[�W�E�G�N�X�v���[���Ń\�[�X�E�t�H���_�isrc�j�I�� �� �E�N���b�N ��
�@ �V�K �� �p�b�P�[�W ���@�i����j
�@ �p�b�P�[�W���icom.netpotlet.test�j �� �I���@�i����j

�@ �p�b�P�[�W�E�G�N�X�v���[���Ńp�b�P�[�W�icom.netpotlet.test�j�I�� ��
�@ �E�N���b�N �� �V�K �� �N���X ���@�i����j
�@ �N���X���iJaxbReader�j �� �I���@�i����j

 1  package com.netpotlet.test;
 2  
 3  import java.io.File;
 4  import java.util.List;
 5  
 6  import javax.xml.bind.JAXBContext;
 7  import javax.xml.bind.JAXBException;
 8  import javax.xml.bind.Unmarshaller;
 9  
10  import com.netpotlet.kayak.Key;
11  import com.netpotlet.kayak.Keyboard;
12  import com.netpotlet.kayak.Label;
13  import com.netpotlet.kayak.Type;
14  
15  public class JaxbReader {
16      private Keyboard keyboard;
17      
18      JaxbReader(String packagename, String filename)
19          throws JAXBException {

            //�����܂�B���̂悤�ɂ��ăR���e�L�X�g��
            //�A���}�[�V�����[���擾����
20          JAXBContext context =
                JAXBContext.newInstance(packagename);
21          Unmarshaller unmarshaller =
                context.createUnmarshaller();

            //���؋@�\��L���ɂ���
22          unmarshaller.setValidating(true);
            
            //XML������ǂݍ��ށi�A���}�[�V����)
23          keyboard =
24              (Keyboard)unmarshaller.unmarshal(
                    new File(filename));
25      }
26      
27      Keyboard getKeyboard() {
28          return keyboard;
29      }
30      
31      private void report() {
32          String newline = System.getProperty("line.separator");
33          String defaultSize = "small";
34          String value;
35  
            //�v�f key �̃��X�g�����o��
36          List keys = keyboard.getKey();
37          StringBuffer sb = new StringBuffer();
38          for (int i=0; i<keys.size(); i++) {
39              Key key = (Key)keys.get(i);

                //�������v�f�ɃZ�b�g����Ă���size���擾����
40              sb.append("size: ");
41              if ((value = key.getAttrSize()) != null) {
42                  sb.append(value);
43              } else if ((value = key.getSize()) != null) {
44                  sb.append(value);
45              } else {
46                  sb.append(defaultSize);
47              }

                //�v�flabel�̃��X�g�����o��
48              List labels = key.getLabel();
49              for (int j=0; j<labels.size(); j++) {
50                  sb.append(" [");
51                  Label label = (Label)labels.get(j);

                    //���̗v�f��default�w�肩�ǂ������`�F�b�N����
52                  if (label.isDefault()) {
53                      sb.append("(default)");
54                  }

                    //�����ɃZ�b�g����Ă���type���擾����
55                  sb.append("type: ");
56                  if ((value = label.getType()) != null) {
57                      sb.append(value);
58                  }

                    //�v�f�ɃZ�b�g����Ă���type��
                    //label�v�f�̃e�L�X�g���擾����
59                  List contents = label.getContent();
60                  for (int k=0; k<contents.size(); k++) {
61                      Object obj = contents.get(k);
62                      if (obj instanceof Type) {
63                          sb.append(((Type)obj).getValue());
64                      } else {
65                          sb.append(", label: ");
66                          sb.append(obj.toString());
67                          sb.append("]");
68                      }
69                  }
70              }
71              sb.append(newline);
72          }
73          System.out.println(new String(sb));
74      }
75  
76      public static void main(String[] args) throws Exception {
77          if (args.length < 2) {
78              throw new Exception("arguments are not enough");
79          }
80          JaxbReader reader =
81              new JaxbReader(args[0], args[1]);
82          reader.report();
83      }
84  }
���X�g5�@JaxbReader.java

���A�v���P�[�V�������s

�@XML�����̓ǂݍ��݂ƌ��؂��s���A�v���P�[�V���������s���Ă݂܂��傤�B���̃A�v���P�[�V������JAXB��������������API�̃p�b�P�[�W����XML���������s���̈���������擾����̂ŁA���̂悤�ɐݒ�A���s���܂��i�}5�A6�Q�Ɓj�B�Ȃ��AXML�����͐}2��docs�f�B���N�g���ɒu���Ă���܂��B

9. �A�v���P�[�V�����̎��s�iJaxbReader�j
�@ ���s �� ���s... ���@�i����j
�@ Java�A�v���P�[�V���� �� �V�K �� ���C���^�u ��
�@ �v���W�F�N�g���ivalley�j�^���C���E�N���X�icom.netpotlet.test.JaxbReader�j
�@ ���@�i����j
�@ �������^�u �� �v���O�����������icom.netpotlet.kayak docs/keyboard1.xml�j ���@�i����j
�@ �K�p �� ���s

�}5�@���s�A�v���P�[�V�����̐ݒ�i�N���b�N�Ŋg�債�܂��j


�}6�@���s���̈������w��

�@XML�����������������Ă���Ύ��̂悤�ɏo�͂���܂��B

size: small [(default)type: number, label: 1] [type: charactor, label: !]
size: small [type: charactor, label: a]
size: medium [type: control, label: shift]
size: small [(default)type: number, label: 2] [type: charactor, label: @]
size: large [type: control, label: space]
�R���\�[��1�@JaxbReader�̏o��

�@�����ŁA�Ⴆ�΃��X�g1��5�s�ڂ̊J�n�^�I���^�O��lebel�Ə��������Ď��s����ƁA���̂悤�ɏo�͂��ꌟ�؂��p�X���Ȃ��������Ƃ�������܂��B

DefaultValidationEventHandler: [ERROR]: �v�f"lebel"�͂����ɂ͏����܂���B������̂́F <label>
Location: line 6 of file:/home/yoko/niue/workspace/valley/docs/keyboard1.xml
Exception in thread "main" com.sun.msv.verifier.ValidityViolation: �v�f"lebel"�͂����ɂ͏����܂���B������̂́F <label>
at com.sun.msv.verifier.Verifier.onError(Verifier.java:332)
.........
.........
�R���\�[��2�@JaxbReader�̃G���[�o��

����������A�v���P�[�V����

�@�v�f�⑮����lj�����XML�������o�͂���A�v���P�[�V�����������Ă݂܂��傤�B���X�g6 JaxbCreator�N���X�����̂悤�ȋ@�\�̂���T���v���ł��BXML�����̏o�͂��}�[�V�����iMarshal�j�Ƃ����Ajavax.xml.bind.Marshaller�C���^�[�t�F�C�X���g���܂��i21�`24�s�ځj�B�V���ɗv�f�����o���ꍇ�ɂ́AJAXB���X�L�[�}���玩����������ObjectFactory�N���X��create<�v�f��>()�Ƃ������\�b�h���g���܂��i50�A61�s�ځj�B

 1  package com.netpotlet.test;
 2  
 3  import javax.xml.bind.JAXBContext;
 4  import javax.xml.bind.JAXBException;
 5  import javax.xml.bind.Marshaller;
 6  
 7  import com.netpotlet.kayak.Key;
 8  import com.netpotlet.kayak.Keyboard;
 9  import com.netpotlet.kayak.Label;
10  import com.netpotlet.kayak.ObjectFactory;
11  
12  public class JaxbCreator {
13      private Keyboard keyboard;
14      
15      JaxbCreator(String packagename, String filename)
                throws JAXBException {
            //�v�f�⑮�������Ƃ���ObjectFactory���g��
16          ObjectFactory objFactory = new ObjectFactory();

            //���������擾����
17          keyboard =
18              (new JaxbReader(
                    packagename, filename)).getKeyboard();

            //�����ɂ����‚��̗v�f��lj�����
19          updateDocument(objFactory);

            //�����܂�B���̂悤�ɂ��ăR���e�L�X�g��
            //�}�[�V�����[���擾����
20          JAXBContext context =
                JAXBContext.newInstance(packagename);
21          Marshaller marshaller =
                context.createMarshaller();

            //�o�͂𐮌`����
22          marshaller.setProperty(
                Marshaller.JAXB_FORMATTED_OUTPUT,
                Boolean.TRUE);

            //���{����܂ޏꍇ�ɂ��̎w�肪�K�v
23          marshaller.setProperty("jaxb.encoding", "euc-jp");

                //�W���o�͂ɕ\������
24          marshaller.marshal(keyboard, System.out);
25      }
26      
27      private void updateDocument(ObjectFactory objFactory)
                throws JAXBException {
28          String[] labels1 = {
29              "��", "��", "��"
30          };
31          String[] labels2 = {
32              "��", "��", "��", "��", "��"
33          };

            //1�–ڂ�key�v�f��label�v�f��lj�����
34          Key key1 = (Key)keyboard.getKey().get(0);
35          updateKey(objFactory, key1, labels1);

            //3�–ڂ�label�v�f���܂�key�v�f��lj�����
36          Key key2 = createKey(objFactory, labels2);
37          keyboard.getKey().add(2, key2);
38      }
39      
40      private void updateKey(ObjectFactory objFactory,
41                             Key key,
42                             String[] labels)
                throws JAXBException {
43          for (int i=0; i<labels.length; i++) {
44              key.getLabel().add(getLabel(objFactory,
                                            "charactor",
                                            labels[i]));
45          }
46      }
47      
48      private Key createKey(ObjectFactory objFactory,
49                            String[] labels)
               throws JAXBException {
50          Key key = objFactory.createKey();
51          key.getLabel().add(getLabel(objFactory,
                                        "number", "5"));
52          for (int i=0; i<labels.length; i++) {
53              key.getLabel().add(getLabel(objFactory,
                                   "charactor", labels[i]));
54          }
55          return key;
56      }
57      
58      private Label getLabel(ObjectFactory objFactory,
59                             String type,
60                             String text) throws JAXBException {
61          Label label = objFactory.createLabel();
62          label.setType(type);
63          label.getContent().add(text);
64          return label;
65      }
66      
67      public static void main(String[] args) throws Exception {
68          if (args.length < 2) {
69              throw new Exception("arguments are not enough");
70          }
71          new JaxbCreator(args[0], args[1]);
72      }
73  }
���X�g6�@JaxbCreator.java

����������A�v���P�[�V�����̎��s

�@���̃A�v���P�[�V���������s���Ă݂܂��傤�B���x��JAXB��������������API�̃p�b�P�[�W����XML���������s���̈���������擾����̂ŁA���̂悤�ɐݒ�A���s���܂��B���x���AXML�����͐}2��docs�f�B���N�g���ɒu���Ă���܂��B

10. �A�v���P�[�V�����̎��s�iJaxbCreator�j
�@ ���s �� ���s... ��
�@ Java�A�v���P�[�V���� �� �V�K �� ���C���^�u ��
�@ �v���W�F�N�g���ivalley�j�^���C���E�N���X�icom.netpotlet.test.JaxbCreator�j
�@ ���@�i����j
�@ �������^�u �� �v���O�����������icom.netpotlet.kayak docs/keyboard2.xml�j ���@�i����j
�@ �K�p �� ���s

�@���Ȃ����s�����΁A���̂悤�ɏo�͂���܂��B

<?xml version="1.0" encoding="euc-jp" standalone="yes"?>
<keyboard>
    <key>
        <label default="true" type="number">1</label>
        <label type="charactor">��</label>
        <label type="charactor">��</label>
        <label type="charactor">��</label>
        <label type="charactor">��</label>
        <label type="charactor">��</label>
    </key>
    <key>
        <label default="true" type="number">2</label>
        <label type="charactor">��</label>
        <label type="charactor">A</label>
    </key>
    <key>
        <label type="number">5</label>
        <label type="charactor">��</label>
        <label type="charactor">��</label>
        <label type="charactor">��</label>
        <label type="charactor">��</label>
        <label type="charactor">��</label>
    </key>
    <key>
        <label default="true" type="charactor">#</label>
        <label type="control">�L��</label>
    </key>
</keyboard>
�R���\�[��3�@JaxbCreator�̏o��

�@�Ȃ��A���s�ݒ��ɌJ��Ԃ����s����ꍇ�͐}7�Ɏ����悤�Ɏ��s�{�^�����N���b�N���邾���ł��B

�}7�@���s�{�^��

���܂Ƃ߁��T���v���E�_�E�����[�h

�@JAXB���g�����ȒP�ȃA�v���P�[�V�����������Ă݂܂������A�������������ł��傤���BDOM��SAX�ł̃v���O���~���O�o��������ǎ҂Ȃ�A���Ȃ�V���v���ŗ������₷���R�[�h�ɂȂ��Ă��邱�Ƃ�������ł��傤�B

�@���ɁA�V�K�ɗv�f��lj�����ꍇ�A�f�[�^�o�C���f�B���O�c�[���𗘗p���Ă���ƁA��`�ɂȂ��\���͍��Ȃ��悤�ɂȂ��Ă���̂ŁA���؂Ƀp�X���Ȃ�����������Ă��܂����Ƃ͂���܂���BXSLT�ւ̕ϊ��Ȃǂ̌㏈��������ꍇ�͓��ɕ֗��ł��傤�B

�@JAXB�ɂ͂����Ŏ��グ���ȊO�ɂ����܂��܂ȋ@�\������܂��̂ŁA�ЂƂƂ���f�[�^�o�C���f�B���O�c�[���̐�����������ŁA�ēx�A���グ��\��ł��B

�@����̃T���v���̓���m�F��Eclipse�ōs���܂������A�ŏI�I��valley�v���W�F�N�g�͐}8�Ɏ����\���ɂȂ�܂����B

�}8�@valley�v���W�F�N�g�̃f�B���N�g���\���i2�j

�@����g�p�����v���O������t�@�C���ނ͈ȉ�����_�E�����[�h�ł��܂��B

  • valley.zip�i212Kbytes�j
    �@
    Windows�‹��ŗ��p�����ꍇ�Aeuc-jp��Windows-31J�ȂǓK���ȃG���R�[�f�B���O�ɕύX���Ă��������B�܂��A���{����܂ރt�@�C����EUC-JP�ɂȂ��Ă��܂��̂ŁA���炩���ߕ����R�[�h��ς��Ă��痘�p�����Ƃ����ł��傤�B

��

�@�����Castor�����グ��\��ł��B���y���݂ɁB�i����ɑ����j

======== my confessions ========

�uXML Schema�ɂ���`�͂��̂悤�ɂȂ�܂��v�Ƃ����Ƃ����Ă̂��܂������A���́A�M�҂�RELAX NG�͏�������̂́AXML Schema�͏����܂��� (^^; �B�����ŁAXML Schema������Ƃ��͂ǂ����邩�Ƃ����ƁA��肠����RELAX NG�Œ�`��������trang�Ƃ����c�[���ŕϊ����܂��Btrang�Ƃ����̂�XSLT���͂��߁A���X�̎d�l��c�[���̍�҂Ƃ���XML����ŗL����James Clark�������ꂽ�ϊ��c�[���ł��BTrang��http://thaiopensource.com/relaxng/trang.html����_�E�����[�h�ł��܂��B����̋L���Ŏg�p�����\�[�X�R�[�h�ꎮ��RELAX NG�ɂ���`������Ă����܂����̂ŁAXML Schema�ɂ���`�ƌ���ׂĂ��������B�Ȃ��ARELAX NG�Ȃ珑����̂�������̂ł͂Ǝv���܂��B


���֘A�L��

�@�ESE�̂��߂�XML Schema����
�@�EXML�e�N�j�b�N�W
�@�EJava�Ŏ�������DOM/SAX�v���O���~���O



�u�A�� ���ɗ���XML�c�[���W�v


XML & SOA �t�H�[���� �V���L��
��IT���[���}�K�W���@�V������X�^�b�t�̃R���������[���œ͂��܂��i�����j

���ڂ̃e�[�}

HTML5�{UX �L�������L���O

�{������