@Override
        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
            if ( "global".equals(qName) ) {
                currentPos = Positions.OnGlobal;
            } else if ( "sql".equals(qName) ) {
                currentPos = Positions.OnSql;

                String id = attributes.getValue("id");
                boolean idRequired = id == null;
                if ( idRequired ) {
                    throw new DataAccessException("要素「sql」の必須属性「id」が指定されていません。");
                }

                boolean idDuplicated = sqlQueries.containsKey(id);
                if ( idDuplicated ) {
                    throw new DataAccessException("要素「sql」の必須属性「id」は一意でなければなりません: id=" + id);
                }

                Map<String, String> attrMap = new HashMap<String, String>();
                for ( int i = 0 ; i < attributes.getLength() ; i ++ ) {
                    String attrKey = attributes.getQName(i);
                    String attrValue = attributes.getValue(i);
                    attrMap.put(attrKey, attrValue);
                }
                sqlAttrs.put(id, attrMap);

                sqlQueries.put(id, new StringBuilder());
                currentQueryId = id;
            } else {
                currentPos = Positions.None;
            }
        }