[サイトのトップ][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 4.25.0) Copyright (c) 1997-2006 by Pie Dey Co.,Ltd.