Networking/ja
│
Deutsch (de) │
English (en) │
español (es) │
français (fr) │
日本語 (ja) │
한국어 (ko) │
polski (pl) │
português (pt) │
русский (ru) │
slovenčina (sk) │
中文(中国大陆) (zh_CN) │
このページは、Lazarusでのネットワークプログラムについてのチュートリアルを開始するページになるでしょう。 この記事に、リンクやセクション、ページ、あなたのWikiへのリンクを追加していってください。
(訳注:最初にこの元記事を書いた人はネットワークプログラミングの専門でなく、独学で勉強したことを書いているそうです。日本では、一般的にネットワークプログラミングというと、ソケット、サービス、クライアントサーバー関連の事を指す事が多いのですが、ここでは、XML、およびその派生の仕様によるWEBサービスでのネットワーキングの記事になっていますので、クライアントサーバー、ソケット関連の記事を期待している方は別途TCP/IPソケットコンポーネントや、軽量ネットワークコンポーネントを参照してください。)
このページには、一般的な情報があります。
その他のネットワークのチュートリアル
- セキュア・プログラミング
- Sockets - TCP/IP ソケットコンポーネント
- lNet - 軽量ネットワークコンポーネント
- XML Tutorial - XML is often utilized on network communications
- FPC and Apache Modules
TCP/IP Protocol
XML
XML(=The Extensible Markup Language)とは、W3C が推奨する異なるシステム間での情報のやりとりをするための言語です。 これは、情報を保存するために、テキストを基本とする方法です。最近のXHTMLのようなデータ交換方法はWebサービス技術などでもよく使われていますが、それらは、XMLを基礎としています。
現在、Lazarus上では、XMLをサポートするユニット(群)があります。 これらのユニットは、"XMLRead", "XMLWrite" そして "DOM"と呼ばれていますが、これらは、FreePascalCompilerからの、FCLの一部になっています。
FCLライブラリはすでにLazarusのデフォルトの検索パスにはいっていますので、それらのユニットをusesするようにすれば、XMLの機能を享受できます。FCLは現在(October / 2005)のところ、文書化されていません。 ですから、このチュートリアルでは、これらのユニットをつかって、XMLアクセスの方法をご紹介することにしましょう。
XMLのDOM (Document Object Model)は、異なるシステム間でXMLを利用するための同じようなインターフェースを提供する、標準化されたオブジェクトの集合です。
オブジェクトの標準化といっても、メソッド、プロパティ、オブジェクトの他へのインターフェースパーツのみで、異なる言語や実装といった要素は除去されています。 FCLは現在、完全にDOM 1.0をサポートしています.
(訳注:XML,DOMを「完全に」パースする、という実装は、かなり大変なことです。また、異機種間での利用を目的に作られていることに注意しましょう。Lazarusは、クロスコンパイル環境であり、これを標準で持っている事は、とても便利に快適にプログラムが出来ると思われます。日本語がどこまで検証されているのか、というところは、訳からはちょっと分かりませんが...。)
基本的な例
たとえば、'C:\Programas\teste.xml'といったXMLファイルにアクセスしてみたいとしましょう。 このファイルは次のようなものだとします:
<?xml version="1.0" encoding="ISO-8859-1"?>
<images directory="mydir">
<imageNode URL="graphic.jpg" title="">
<Peca DestinoX="0" DestinoY="0">Pecacastelo.jpg1.swf</Peca>
<Peca DestinoX="0" DestinoY="86">Pecacastelo.jpg2.swf</Peca>
</imageNode>
</images>
次のコードはノード名をフォーム上のTMemoに書き出す例です。
(usesにXMLRead,XMLWrite,domを追加)
var
Documento: TXMLDocument;
i, j: Integer;
begin
Documento := TXMLDocument.Create;
ReadXMLFile(Documento, 'C:\Programas\teste.xml');
Memo.Lines.Clear;
with Documento.DocumentElement.ChildNodes do
begin
for i := 0 to (Count - 1) do
begin
Memo.Lines.Add(Item[i].NodeName + ' ' + Item[i].NodeValue);
for j := 0 to (Item[i].ChildNodes.Count - 1) do
begin
Memo.Lines.Add(Item[i].ChildNodes.Item[j].NodeName + ' '
+ Item[i].ChildNodes.Item[j].NodeValue);
end;
end;
end;
Documento.Free;
end;
TreeViewにXMLを表現する
XMLファイルの一般的な利用のひとつに、ツリー形式に構文を解析して、内容を表示することです。 Lazarusの上の「Common Control」タブに、ツリー形式に表示するためのTTreeViewコンポーネントがあります。
以下での機能は、あらかじめファイルからロードされたか、コードで作られたXMLドキュメントを取得し、コンテンツの内容をTreeViewに表示します。 それぞれのノードのキャプションは、それぞれの(XMLの内容の)最初の属性になるでしょう。
procedure TForm1.XML2Tree(tree: TTreeView; XMLDoc: TXMLDocument); var iNode: TDOMNode; procedure ProcessNode(Node: TDOMNode; TreeNode: TTreeNode); var cNode: TDOMNode; begin if Node = nil then Exit; // Stops if reached a leaf // Adds a node to the tree TreeNode := tree.Items.AddChild(TreeNode, Node.Attributes[0].NodeValue); // Goes to the child node cNode := Node.ChildNodes.Item[0]; // Processes all child nodes while cNode <> nil do begin ProcessNoDe(cNode, TreeNode); cNode := cNode.NextSibling; end; end; begin iNode := XMLDoc.DocumentElement.ChildNodes.Item[0]; while iNode <> nil do begin ProcessNode(iNode, nil); // Recursive iNode := iNode.NextSibling; end; end;
XML文書を更新する
まず最初に覚えていただきたいのが、TDOMDocumentがDOMへの「ハンドル」であるということです。 あなたはこのクラスのインスタンスを、生成するか、XML文書をロードすることで取得できます。
一方、通常のオブジェクトのようにノードを生成することはできません。 ノードを作成するためには、TDOMDocumentで提供されている方法、または、他の方法として、ツリー構造の上の正しい場所に設定する方法を使用しなければなりません。 この理由は、ノードがDOMの上の、ある特定のドキュメントによって「所有」されなければならないからです。
下記は、TDOMDocumentの共通のメソッドです。
function CreateElement(const tagName: DOMString): TDOMElement; virtual; function CreateTextNode(const data: DOMString): TDOMText; function CreateCDATASection(const data: DOMString): TDOMCDATASection; virtual; function CreateAttribute(const name: DOMString): TDOMAttr; virtual;
ここで、TTreeViewに選択された項目の場所に、XML文書の子ノードを挿入する例を示します。 XML2Tree functionを使うことによって、TreeViewはXMLファイルの内容を完全に表現できていなくてはなりません。
procedure TForm1.actAddChildNode(Sender: TObject); var Posicao: Integer; NovoNo: TDomNode; begin {******************************************************************* * Detects the selected element *******************************************************************} if TreeView1.Selected = nil then Exit; if TreeView1.Selected.Level = 0 then begin Posicao := TreeView1.Selected.Index; NovoNo := XMLDoc.CreateElement('item'); TDOMElement(NovoNo).SetAttribute('nome', 'Item'); TDOMElement(NovoNo).SetAttribute('arquivo', 'Arquivo'); XMLDoc.DocumentElement.ChildNodes.Item[Posicao].AppendChild(NovoNo); {******************************************************************* * Updates the TreeView *******************************************************************} TreeView1.Items.Clear; XML2Tree(TreeView1, XMLDoc); end else if TreeView1.Selected.Level >= 1 then begin {******************************************************************* * This function only works on the first level of the tree, * but can easely modifyed to work for any number of levels *******************************************************************} end; end;
Webサービス
W3CによるWEBサービスはネットワークの上のマシンから、別のマシンへ、共通的に利用できるように設計されたソフトウェア・システムの名称です。 WEBサービスには、WSDLなど、「機械が処理可能」な形式で記述されているインタフェースがあります。 また、他のシステムは、多くの場合、インタフェースによってSOAPに内包されるメッセージを使用し定められた方法でウェブサービスと対話します。もしくは、RESTによる方法を取るかもしれません。 これらのメッセージは、通常HTTPを使用して伝達され、ウェブ関連の他の規格に関連するXMLから成りたっています。
様々なプログラミング言語で書かれ、様々なプラットホームで動くソフトウェアアプリケーションは、データをおたがいに一つのコンピュータでコミュニケーションを処理します。それと同様の方法を使って、インターネットのようなコンピュータネットワークの上でもコミュニケーションを行うために、WEBサービスを利用することができます。
この相互運用性(例えば、WindowsとLinuxアプリケーションの間など)はオープンスタンダードの運用によるものです。 OASISとW3Cはウェブサービスのアーキテクチャと標準化の策定に責任や権限がある主な委員会です。
ウェブサービス実装間の相互運用性を改良するため、WS-I委員会は、さらに定義する一連のプロフィールを規格の関連の開発をしています。
FPC & Lazarus のWeb Service Toolkit
Web Service Toolkit はFPCとLazarusのWEBサービスのパッケージです。
External Links
XML
- W3Schools Xml Tutorial