RELAX利用者日本語メーリングリスト メッセージ閲覧

[サイトのトップ][RELAX利用者日本語メーリングリスト メニューページ][ログイン][参加ガイド][新スレッド作成][スレッド一覧][メッセージ閲覧][メンバー登録][メンバー登録情報変更][パスワード変更][パスワードを忘れたら][メンバー登録解除][メッセージ削除][エラーで配信停止したメンバーリスト]

2006/12/06 15:01

From:芦田 <qashida@shinshu-u.ac.jp>

[relax-users-j 03343] 名前空間使用下でのchoiceタグについて

毎度お世話になっております,芦田です。

名前空間を使用しているときに,Relaxer NGスキーマにchoiceタグを使用すると
正しくJavaソースが出力されないようです。

<!--***** Relaxer.properties開始 *****-->
relaxer.eclipse=true
java.package=tl.Io.Xml.Hoge
java.name.class.prefix=Io
objectVerify=true
java.jaxb=true
objectVerify=true
java.xml.namespace=true
java.useXMLNSURI=true
java.sax=true
<!--***** Relaxer.properties終了 *****-->

<!--***** Relaxer NGスキーマ開始 *****-->
<?xml version="1.0" encoding="UTF-8" ?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
         xmlns:relaxer="http://www.relaxer.org/xmlns/relaxer"
         xmlns:java="http://www.relaxer.org/xmlns/relaxer/java"
         xmlns:sql="http://www.relaxer.org/xmlns/relaxer/sql"
         xmlns:ns1="http://www.hoge.ac.jp/xmlns/ns1"
         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
         ns="">
        <start>
                <ref name="hoge"/>
        </start>
        
        <define name="hoge">
                <element name="ns1:hoge">
                        <ref name="direction.attr"/>
                </element>
        </define>

        <define name="direction.attr">
                <attribute name="ns1:direction">
                        <choice>
                                <value>horizontal</value>
                                <value>vertical</value>
                                <value>diagonal</value>
                                <value>tortuous</value>
                                <value>isorated</value>
                        </choice>
                </attribute>
        </define>

</grammar>
<!--***** Relaxer NGスキーマ終了 *****-->

<!--***** 出力ファイル(IoDirectionAttr.java#isMatchHungry)開始 *****-->
01:    public static boolean isMatchHungry(RStack stack) {
02:        RStack target = stack.makeClone();
03:        boolean $match$ = false;
04:        Element element = target.peekElement();
05:        IHogeFactory factory = HogeFactory.getFactory();
06:        Element child;
07:        if (!URelaxer2.hasAttributeHungry(target, "http://www.hoge.ac
.jp/xmlns/ns1", "direction")) {
08:            return (false);
09:        }
10:        $match$ = true;
11:        if (!URelaxer.isMatchDataValuesAttr(target.getContextElement(
), "direction", "token", new String[] {"horizontal", "vertical", "diagon
al", "tortuous", "isorated"})) {
12:            return (false);
13:        }
14:        if ($match$) {
15:            stack.eat(target);
16:        }
17:        return ($match$);
18:    }
<!--***** 出力ファイル(IoDirectionAttr.java#isMatchHungry)終了 *****-->

11行目にあるURelaxer.isMatchDataValuesAttr()を辿っていくと,
最終的にorg.w3c.dom.Element.getAttributeNode()を呼んでいますが,
名前空間を指定していないため,属性を取得することができません。
名前空間を伴う属性を取得する場合には,
org.w3c.dom.Element.getAttributeNodeNS()を使用しないといけない気がします
。

いつもながら,不躾な申し出で誠に恐縮ですが,検討の程お願い申し上げます。

-- 
芦田 (qashida@shinshu-u.ac.jp)

このメッセージにコメントを書く

問い合わせ先

 何か分からないことや問題が発生した場合は、本リスト板管理者の電子メールアドレス yki@hh.iij4u.or.jp までお問い合わせください。

[RELAX利用者日本語メーリングリスト メニューページ][スレッド一覧][メッセージ閲覧][サイトのトップ]


List-Tei Iconりすと亭 (List-Tei 4.25.0) Copyright (c) 1997-2006 by Pie Dey Co.,Ltd.