Cisco BTS 10200 Softswitch CORBA アダプタ インターフェイス仕様 プログラマ ガイド
Extensible Markup Language の処理
Extensible Markup Language の処理
発行日;2012/02/07 | ドキュメントご利用ガイド | ダウンロード ; この章pdf , ドキュメント全体pdf (PDF - 523KB) | フィードバック

目次

Extensible Markup Language の処理

XML およびコンポーネント

CORBA インターフェイス サーバントにおける XML

CIS の機能

ManagedObject

Request

Reply

CORBA インターフェイス サーバント アダプタ実装

Cisco BTS 10200 ソフトスイッチの IDL コード

Extensible Markup Language の処理

この章では、CORBA(Common Object Request Broker Architecture)アダプタでの XML(Extensible Markup Language)の処理について説明します。

XML およびコンポーネント

CORBA アダプタの主要コンポーネントには、XML の他に CORBA Interface Servant(CIS; CORBA インターフェイス サーバント)Java プログラムがあります。また、Managed Object(MO; 管理対象オブジェクト)Java パッケージの関連コンポーネントにも依存しています。必須のパッケージは次のとおりです。

Apache XML

Xerces(パーサー)

ECS(XML ドキュメント ビルディング ツール キット)

XML および CIS Java パッケージは、Cisco BTS 10200 ソフトスイッチの中心となる機能コンポーネントです。このソフトスイッチに適用される、さらに規模の大きいオブジェクト モデルはありません。これよりも大きいオブジェクト モデルは、シスコシステムズ標準モデルが作成されるまでは存在しません。このモデルは、さまざまなアプリケーションのパケット テレフォニーに応用することができます。

CORBA インターフェイス サーバントにおける XML

この項では、CIS での XML の使用方法について説明します。この項で使用する用語は、XML 仕様で使用されている用語に準拠しています。これは、要素、サブ要素、アトリビュートなどの用語の使用で混乱が生じないようにするためです。

CIS の機能

XML ドキュメントの構造をクライアント側で検証するために、スキーマが提供されています。これらのスキーマは、次の項目をカバーしています。

ManagedObject

Request

Reply

ManagedObject のスキーマは、次の形式に従っています。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
 
<xs:element name="ManagedObject">
<xs:complexType>
<xs:sequence>
<xs:element ref="MOAttribute" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="Verb" type="xs:string" use="required"/>
<xs:attribute name="id" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
 
<xs:element name="MOAttribute">
<xs:complexType>
<xs:sequence>
<xs:element ref="Required"/>
<xs:element ref="Type"/>
<xs:element ref="Default"/>
<xs:element ref="Width"/>
<xs:element ref="HelpText"/>
<xs:element ref="Label"/>
<xs:element ref="Parser" minOccurs="0"/>
<xs:element ref="Permitted" minOccurs="0"/>
<xs:element ref="Fk" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="id" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
 
<xs:element name="Required" type="xs:boolean"/>
 
<xs:element name="Type">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="single"/>
<xs:enumeration value="text"/>
<xs:enumeration value="multi"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
 
<xs:element name="Default" type="xs:string"/>
 
<xs:element name="HelpText" type="xs:string"/>
 
<xs:element name="Label" type="xs:string"/>
 
<xs:element name="Noun" type="xs:string"/>
 
<xs:element name="Param" type="xs:string"/>
 
<xs:element name="Parser">
<xs:complexType>
<xs:sequence>
<xs:element ref="JavaScript"/>
<xs:element ref="RegExp"/>
</xs:sequence>
<xs:attribute name="id" use="required" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="JavaScript" type="xs:string"/>
<xs:element name="RegExp" type="xs:string"/>
 
<xs:element name="Permitted" type="xs:string"/>
 
<xs:element name="Width" type="xs:int" />
 
<xs:element name="Fk">
<xs:complexType>
<xs:sequence>
<xs:element ref="Noun"/>
<xs:element ref="Param"/>
<xs:element ref="Fk" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="id" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
 
</xs:schema>
 

Request のスキーマは、次の形式に従っています。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="Request">
<xs:complexType>
<xs:sequence>
<xs:element ref="Entry" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="Verb" type="xs:string" use="required"/>
<xs:attribute name="Noun" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="Entry">
<xs:complexType>
<xs:attribute name="Key" type="xs:string" use="required"/>
<xs:attribute name="Value" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:schema>
 

Reply のスキーマは、次の形式に従っています。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
 
<xs:element name="Reply">
<xs:complexType>
<xs:sequence>
<xs:element ref="Status"/>
<xs:element ref="Reason"/>
<xs:element ref="Size"/>
<xs:element ref="AbsoluteSize"/>
<xs:element ref="StartRow"/>
<xs:element ref="DataTable"/>
</xs:sequence>
<xs:attribute name="id" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
 
<xs:element name="Status" type="xs:boolean"/>
 
<xs:element name="Reason" type="xs:string"/>
 
<xs:element name="Size" type="xs:integer"/>
 
<xs:element name="AbsoluteSize" type="xs:integer"/>
 
<xs:element name="StartRow" type="xs:integer"/>
 
<xs:element name="DataTable">
<xs:complexType>
<xs:sequence>
<xs:element ref="Row" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
 
<xs:element name="Row">
<xs:complexType>
<xs:sequence>
<xs:element ref="Column" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="id" use="required" type="xs:integer"/>
</xs:complexType>
</xs:element>
 
<xs:element name="Column" >
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="id" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
 
</xs:schema>
 

Interface Definition Language(IDL; インターフェイス定義言語)を使用すると、各 noun/verb の組み合せの XML 記述ドキュメントにアクセスできます。たとえば、 add subscriber コマンドは、このコマンドの要素とアトリビュートを定義するための対応 XML ドキュメントを生成します。IDL は、ウェルフォームドであるが未検証の XML ドキュメントに基づいたコマンド処理を可能にします。

IDL を使用すると、サポートされている Media Gateway(MGW; メディア ゲートウェイ)デバイスにコマンド アクセスできます。このコマンド文字列は、スキーマ内に定義された XML アクセス形式には準拠していません。CIS は、MGW の内部コマンド構造に対してネイティブである MGW コマンド文字列をサポートしています。

Cisco BTS 10200 ソフトスイッチ内で発生する XML ドキュメントは、すべて動的に生成されます。これは、すべてのコマンド記述ドキュメントを含みます。

ManagedObject

ManagedObject は、 MOAttribute という 1 つの要素を持っています。また、 ManagedObject は、
ManagedObject の id verb という 2 つのアトリビュートを持っています。 id は、何らかの操作の対象となるオブジェクトを表します。 verb は実行される操作を示します。たとえば、subscriber や termination は有効な id です。これは必須のアトリビュートです。

このスキーマのさまざまな部分およびその値について、次のリストで説明します。

id:このアトリビュートは、何らかの操作の対象となるオブジェクトを表します。

Verb :このアトリビュートは、所定の ManagedObject に対して実行する操作を定義します。これは必須のアトリビュートであり、文字型データで構成されます。

MOAttribute ManagedObject は、この要素を 0 個、1 個、または複数保持することができます。この要素は id という 1 つのアトリビュートを持っています。この文字型データは、要素のラベルとして機能します。これらの要素の順序が、特定の動作を意味することはありません。任意の順序で記述できます。

Required :このサブ要素には、true と false の 2 つの値のいずれかが定義されます。

Type :このサブ要素は、 MOAttribute が保持するのが単一値であるか、複数値であるか、またはテキストであるかを定義します。multiple オプションまたは single オプションは、選択肢のリストが Permitted 要素で提供されることを意味します。

Default :このサブ要素は情報提供用です。 MOAttribute のデフォルト値を示します。

Width :このサブ要素は、データの合計フィールド幅を示します。たとえば、 MOAttribute が説明である場合、これは説明文の長さを示します。

HelpText :このサブ要素は、 MOAttribute の性質を示す簡単なテキストを提供します。

Permitted :このサブ要素は、 MOAttribute の許容値または許容範囲を指定します。

Parser :このサブ要素は、どの種類の検証が必要であるかを指定します。このサブ要素にはアトリビュートが 1 つだけあります。このアトリビュートは、文字型データで構成される id フィールドです。サブ要素を次に示します。

JavaScript :このサブ要素は、検証または正規表現一致検索を実行できる JavaScript を示します。

RegExp :このサブ要素は、正規表現を文字型データ形式で定義します。

Request

Request スキーマは、1 つの要素、0 個~複数個の Entry 要素、および 2 つのアトリビュートとその値で構成されます。

このスキーマのさまざまな部分およびその値について、次のリストで説明します。

Noun :このアトリビュートは、何らかの操作の対象となる項目を定義します。これは文字型データとして表現されます。

Verb :このアトリビュートは、「Noun」アトリビュートに対して実行する操作を定義します。これは文字型データとして表現されます。

Entry 要素は、空値になることができます。また、2 つのアトリビュートを含むことができます。これらのアトリビュートは、次のように定義されます。

Key :これは、 ManagedObject MOAttribute から導出された id の値です。これは文字型データとして表現されます。

Value :これは、上で指定されたキーに割り当てるためのクライアント導出値です。 Value は文字型データとして表現されます。また、このキー/値ペアの導出元となった MOAttribute のサブ要素に一致している必要があります。

Reply

Reply スキーマは、 Request への応答として生成される戻りデータの構造を定義します。 Reply は 3 つの要素を保持し、アトリビュートはありません。これらの要素は、次のように定義されます。

Status Reply は 1 つの Status 要素を保持します。この要素の許容値は 2 つあります。この要素に適用されるのは、true または false のいずれかです。

Reason Reason 要素は文字型データを保持します。この要素は、コマンド処理でのエラーの原因を説明するものです。または、成功通知を返します。

DataTable :この要素は、下に示す 1 つのアトリビュートと 1 つのサブ要素を持っています。この要素は、要求の実行結果データのコンテナとして使用されます。各 Reply DataTable 要素を保持できます。

Row :このサブ要素は、1 つのデータ項目全体を定義します。 DataTable は、1 つまたはそれ以上の Row サブ要素を保持できます。 Row は 1 つのアトリビュートを持っています。この文字型データは行 ID を定義します。ID は、返される行の数に基づいた連続値です。 id アトリビュートは必須です。

Col :各 Row は、 Col と呼ばれるサブ要素を保持します。このサブ要素は 1 つのアトリビュートを持っています。この要素の値は、文字型データとして表現されます。 Col のアトリビュートは id です。このアトリビュートは文字型値として表現されます。これは、 MOAttribute で使用されるものと同じ id 値です。これは必須のアトリビュートです。

CORBA インターフェイス サーバント アダプタ実装

CIS は、外部インターフェイスを指定するアダプタ実装です。この項では、CIS プログラムとクライアント側プログラム間でのドキュメント交換の構造について、詳細を示します。外部インターフェイスで必ず問題になる点の 1 つは、ここで説明したすべてのドキュメントが ウェルフォームド であるものの、 検証 されていないことです。つまり、スキーマが XML ドキュメントの一部として埋め込まれていません。スキーマを埋め込むことで、パーサー パッケージを使用してドキュメントの構造を検証できます。しかし、他のお客様がスキーマを必要とする場合、XML スキーマに対する変更を加えにくくなります。クライアント側が、このドキュメントに含まれているスキーマを使用して検証を実行することは可能です。

Cisco BTS 10200 ソフトスイッチの IDL コード

この項では、Cisco BTS 10200 ソフトスイッチの CORBA アダプタ(CAD)インターフェイスのシステム IDL ファイルについて説明します。この IDL は、Cisco BTS 10200 ソフトスイッチ Release 4.x に適用されます。

// Copyright (c) 2002, 2006 by Cisco Systems, Inc.
//===========================================================================
//
// Name: bts10200.idl
// Author: A. J. Blanchard
// Description:
// This is the IDL for the entire provisioning infrastructure of the
// BTS 10200. The text strings are all XML well-formed documents. The
// current procedure is to maintain separate schema(s). This allows later
// migration to schemas and away from schema for document validation.
//
// All commands are expressed as XML documents. The template document for
// each NOUN/VERB pair is accessible from the a separate method. This XML
// interface is table oriented and follows the same nomenclature and syntax
// as the other BTS 10200 adapter interfaces.
//
//
//===========================================================================
 
#ifndef bts10200_idl
#define bts10200_idl
 
//--------------------------------------------------------------------------
// Set up modules to match java package tree for the OAM&P
//--------------------------------------------------------------------------
module cad {
 
typePrefix cad "oam.sswitch.com";
 
//----------------------------------------------------------------
// Exceptions
//----------------------------------------------------------------
exception CadExceptions {
long error_code;
string error_string;
};
 
interface Bts10200_Security {
 
//----------------------------------------------------------------
// Create a session key.
//----------------------------------------------------------------
void login(in string name,
in string password,
out string key)
raises(CadExceptions);
 
//----------------------------------------------------------------
// Destroy a session key.
//----------------------------------------------------------------
void logout(in string key)
raises(CadExceptions);
 
}; // end Bts10200_Security
 
interface Bts10200 {
 
//----------------------------------------------------------------
// Fetch a command (noun/verb) XML document
//----------------------------------------------------------------
void getCommandDoc(in string noun,
in string verb,
in string key,
out string xml_doc)
raises(CadExceptions);
 
//----------------------------------------------------------------
// Fetch an Extended command (noun/verb) XML document - with foreign keys
//----------------------------------------------------------------
void getExtCommandDoc(in string noun,
in string verb,
in string key,
out string xml_doc)
raises(CadExceptions);
 
//----------------------------------------------------------------
// Issue a command XML document (add, change, delete, show)
//----------------------------------------------------------------
void request(in string xml_request,
in string key,
out string xml_reply)
raises(CadExceptions);
 
}; // end Bts10200
interface Macro {
 
//----------------------------------------------------------------
// Process a Macro Command XML document (add, change, delete, show)
//----------------------------------------------------------------
void execute(in string request,
in string key,
out string reply)
raises(CadExceptions);
 
}; // end Macro
 
}; // end cad
#endif // end bts10200_idl