Java/Rhino/E4X

1月 1, 2003 · Posted in Java, Rhino · Comment 

E4Xの概要

-JavaScript言語にネイティブなXMLオブジェクトが導入された(DOM不要)
-XML文書リテラルをJavaScriptコードに埋め込むことが可能。
-正式な仕様はECMA357
http://www.ecma-international.org/publications/standards/Ecma-357.htm

e4xのXMLオブジェクトの作り方

var a = "<a><b>b1</b><b>b2</b></a>"
var b = new XML(a)

または

var a = <a><b>b1</b><b>b2</b></a>

知っておくべき問題

現在のE4Xでは、XML文章のxml宣言をパースできない。
http://developer.mozilla.org/ja/docs/E4X

js> var a = <?xml version="1.0"?><a><b>b1</b><b>b2</b></a>
js: "<stdin>", line 14: uncaught JavaScript runtime exception:
TypeError: The processing instruction target matching
"[xX][mM][lL]" is not allowed.
at <stdin>:14

回避方法:
http://developer.mozilla.org/ja/docs/E4X

var response = xmlhttprequest.responseText; // bug 270553
response = response.replace(‘<?xml version="1.0"?>’, ""); // bug 336551
var e4x = new XML(response);

超原始的!

E4Xクイックスタート

下のRhinoシェル操作例を順に読んでいけばE4Xの基本が理解できる。

js> var xml = <a><b sort="1">b1</b><b sort="2">b2</b></a>

js> xml.b
<b sort="1">b1</b>
<b sort="2">b2</b>

js> xml["b"]
<b sort="3">b1</b>
<b sort="2">b2</b>

js> xml.b.length();
2

js> xml.b[0]
b1

js> for(var i = 0; i < xml.b.length(); i++){
> print(xml.b[i])
> }
b1
b2

js> xml.b.@sort.length();
2

js> xml.b[0].@sort.length();
1

js> xml.b[0].@sort
1

js> xml..@sort.length();
2

js> xml.b[0].@sort=3
3

js> xml.toString()
<a>
<b sort="3">b1</b>
<b sort="2">b2</b>
</a>

js> xml.*.length();
2
js> xml..*.length();
4

js> xml.b[0].text();
b1
js> xml.toXMLString();
<a>
<b sort="3">b1</b>
<b sort="2">b2</b>
</a>

参照コピーと実体コピー

参照コピー(浅いコピー)

js> var xml = <a><b sort="1">b1</b><b sort="2">b2</b></a>
js> var xml2 = xml
js> xml2.b[0].@sort=3
3
js> xml
<a>
<b sort="3">b1</b>
<b sort="2">b2</b>
</a>
js> xml2
<a>
<b sort="3">b1</b>
<b sort="2">b2</b>
</a>
js>

実体コピー(深いコピー)

js> var xml = <a><b sort="1">b1</b><b sort="2">b2</b></a>
js> var xml2 = xml.copy();
js> xml2.b[0].@sort=10
10
js> xml
<a>
<b sort="1">b1</b>
<b sort="2">b2</b>
</a>
js> xml2
<a>
<b sort="10">b1</b>
<b sort="2">b2</b>
</a>
js>

XMLListオブジェクト

XMLListオブジェクトは、XMLの各要素を順序つきで格納するためのオブジェクトで、XMLオブジェクトに包括されている。
たとえば、XMLオブジェクトであるxmlという変数に対してxml.bとすれば、<b>タグ配下のオブジェクトを順序・階層を保持した状態で格納したXMLListオブジェクトが取得できる。

XMLListオブジェクトでは、length()メソッドが利用できるほか、+=演算子での要素の追加などを行うことができる。

js> var xml = <a><b>b1</b><b>b2</b></a>
js> xml.b += <b>b3</b>
<b>b1</b>
<b>b2</b>
<b>b3</b>
js>

要素の検索

js> var xml = <a><b sort="1">b1</b><b sort="2">b2</b><b sort="3">b3</b></a>
js> xml.b.(@sort>1)
<b sort="2">b2</b>
<b sort="3">b3</b>
js> xml.b.(@sort>1).length();
2
js>

js> var filter = function(e){return e > 1}
js> xml.b.(filter(@sort))
<b sort="2">b2</b>
<b sort="3">b3</b>
js>

名前空間

js> var xml = <a xmlns="http://example.com"><b>b1</b><b>b2</b></a>
js> xml.name()
http://example.com::a
js> xml.name().localName
a
js> xml.name().uri
http://example.com
js>

Java/Rhino/Rhinoのインストール

1月 1, 2003 · Posted in Java, Rhino · Comment 

インストール

JDKのインストール

JDKをインストールします。
JDKのバージョンが1.6以上なら、標準でRhinoのバイナリが含まれているので、JDKをインストールすればセットアップは終了。

Rhinoのダウンロード

Rhinoのダウンロードページより、バイナリファイルを入手します。
http://www.mozilla-japan.org/rhino/download.html

ダウンロードしたzipファイルの解凍

ダウンロードしたzipファイルを解凍します。
いろいろなフォルダやファイルが含まれていますが、Rhinoの実行にはjs.jarを利用します。

EclipseでRhinoを実行するためのセットアップ

Javaプロジェクトの作成

メニューから、「ファイル」→「新規」→「プロジェクト」と進み、「Javaプロジェクト」を作成します。
プロジェクト名は何でもよし(ここではRhinoとする)

Rhinoライブラリの設定

プロジェクトを作ったら、libフォルダを作ってjs.jarを格納しました。

プロジェクト名を右クリックして、プロパティを選択。続けて「Javaのビルドパス」より、ライブラリの参照設定を行います。

Rhinoシェル(コンソール)実行の構成を作成

eclipseのコンソールでRhinoを実行できるようにします。

メニューから、「実行」→「構成および実行」を選択します。

新規の起動構成ボタンを押下して、新しい構成を作ります。
以下のように入力します。

‘共通
名前:Rhino Console(何でもよい)
「メイン」タブ
プロジェクト:Rhino(生成したプロジェクト名を入力)
メイン・クラス:org.mozilla.javascript.tools.shell.Main

入力が完了したら、適用ボタンを押下して設定を反映後、実行ボタンを押下すると、eclipseのコンソール上にRhinoシェルが立ち上がります。

quit()と入力後、エンターキーを押下するとRhinoシェルが終了します。

※JavaScriptなので、メソッド呼び出しの()を忘れて、単に「quit」と入力すると、quitメソッドのコードが表示されてしまいます。要注意。

再度実行する場合はプロジェクト名の上で右クリックして実行を選択後、先ほどの構成を実行します。

もうちょっと試したい人は、Rhinoシェル上で以下のコードを入力

print("hello rhino world")

ファイル実行の構成を作成

すばやい確認や簡単なデバッグ時には、前述のコンソールで実行すればよいのですが、少しまとまったコードを実行したい時には、あらかじめファイルに記述したコードを実行したいものです。

そこで、ファイルに記述したJavaScriptコードをRhinoですばやく実行できるような設定を行います。

まず、ファイルを作成します。プロジェクト上で右クリックして「新規」→「ファイル」を選択し、rhino.jsを生成します(ファイル名はなんでもよい)。

次に、このファイルを実行するための構成設定を行います。
メニューから、「実行」→「構成および実行」を選択します。

新規の起動構成ボタンを押下して、新しい構成を作ります。
以下のように入力します。

共通
名前:Rhino File(何でもよい)
「メイン」タブ
プロジェクト:Rhino(生成したプロジェクト名を入力)
メイン・クラス:org.mozilla.javascript.tools.shell.Main
「引数」タブ
プログラムの引数:-f rhino.js

入力が完了したら、適用ボタンを押下して設定を反映後、実行ボタンを押下すると、eclipseのコンソール上に実行結果が表示されます。

ためしにファイルに以下のコードを記述して実行してみましょう。

print("hello world")

コンソールにhello worldと表示されます。

Eclipseを利用しない場合

コンソールの立ち上げ

js.jarをクラスパス配下に置いて、コンソールで

java org.mozilla.javascript.tools.shell.Main
を実行すると、Rhinoのコンソールが立ち上がります。

ファイルの実行

ファイルを実行する場合は

java org.mozilla.javascript.tools.shell.Main -f [ファイル名]
とします。

Java/Rhino/Rhinoシェルのヘルプ

1月 1, 2003 · Posted in Java, Rhino · Comment 

ヘルプの表示

Rhinoシェル上で以下のコードを入力すると、利用できるコマンドのヘルプが表示されます。

help()

ヘルプ転載(Rhino1.7release120080306)

js> help()

Command Description
======= ===========
help() Display usage and help messages.
defineClass(className) Define an extension using the Java class
named with the string argument.
Uses ScriptableObject.defineClass().
load(["foo.js", ...]) Load JavaScript source files named by
string arguments.
loadClass(className) Load a class named by a string argument.
The class must be a script compiled to a
class file.
print([expr ...]) Evaluate and print expressions.
quit() Quit the shell.
version([number]) Get or set the JavaScript version number.
gc() Runs the garbage collector.
spawn(arg) Evaluate function or scriptname on a new thread
sync(function) Creates a synchronized version of the function,
where the synchronization object is "this"
readFile(fileName [, encoding])
Returns the content of the file as a string.
Encoding of the string can be optionally specified.
readUrl(url [, encoding])
Similar to readFile, reads the contents of the url.
runCommand(name …) Runs a specified shell command. Additional arguments are
passed to the command
seal(args …) Seals the supplied objects
toint32(arg) Converts the argument into a 32-bit integer
serialize(obj, fileName)
Serializes an object and saves it to a file
deserialise(fileName) Reconstructs a serialized object
environment Returns the current environment object
history Displays the shell command history

For full description of all available commands see shell.html in
the docs directory of Rhino distribution.

js>

次ページへ »