SenseTalkスクリプトでXMLとツリー構造を使用する
SenseTalkのツリー構造は、XML形式のデータを簡単に読み取り、ツリー内のデータにアクセスして操作し、そのデータからXMLを生成する能力を提供します。 ツリーは、リストとプロパティリスト(いくつかの制限あり)の両方として動作する階層的なデータ構造です。リストとして、ツリーはアイテムを含み、これらのアイテムはノードとも呼ばれ、それ自体がツリーです。プロパティリストとして、ツリーはXML用語でのノードの属性に対応するプロパティを持ちます。
ツリーとノード
ツリーは、任意の数の 子 ノードを持つことができる ルートノード からなる階層です。各子ノード自体が任意の数の子ノードを持つことができるツリーであり、そのように任意の深さまで続くことができます。各ノード(ルートノードを除く)は 親 ノードを持ち、これはそのノードを子として含むツリー(またはサブツリー)です。
親ノードとゼロ以上の子ノードを持つことに加えて、各ノードはタグ名を含む数個のプロパティまたは属性を持つことができます。
ツリーの基本構造は次のようになります:
ツリーの各ノードは自身の子ノードを持つことができるので、各ノード(その子とその後の子孫とともに)自体がツリーとなります。
ツリーとXML
ツリーは各種の階層データを保存するのに便利ですが、SenseTalkの ツリー構造は特にXMLドキュメントやXMLベースのデータを扱うために設計されています。eXtensible Markup Language(XML)は、現在使用されている多種多様なデータ形式の基盤となる豊富で柔軟で複雑な言語です。
SenseTalkのツリー構造はXMLドキュメントやデータ構造の操作を簡単にし、個々の値に簡単にアクセスできるようにするとともに、必要に応じてドキュメントのすべての部分にフルアクセスを提供します。
XMLの構造とその一部の用語を少なくとも基本的に理解すると、ツリーとそのXMLとの関係を完全に理解するのに役立ちます。以下の例のXMLドキュメントを考えてみてください:
<?xml version="1.0?>
<order id ="001">
<customer name="Janet Brown"/>
<product code="prod345" size="6">
<quantity>3</quantity>
<amount>23.45</amount>
</product>
</order>
上記の例では、最初の行はこれがバージョン1.0のXMLドキュメントであることを特定します。二番目と最後の行は、残りのコンテンツを order
タグで囲みます。この全体のセクションは、customer
と product
の2つの他の要素を含む ドキュメント ノード(上記の例のように)または 要素 ノード(XMLバージョン情報が欠けている場合)を構成します。customer
要素には name
属性 がありますが、追加のコンテンツはありません。 product
要素には code
と size
の属性があり、さらに2つの要素、quantity
と amount
を含みます。 quantity
と amount
の両方の要素には、テキストノード として知られる囲まれたテキストが含まれています。
この情報をツリーで表現すると、次のようになります:
括弧内の情報は、ノ ードの種類と、そのノードに存在する場合の属性を示しています。ツリー形式では、orderノードが2つの子供(customerとproduct)を持ち、productノードもまた2つの子供(quantityとamount)を持っていることがわかります。quantityとamountノードはそれぞれ一つの子供:対応する値を持つテキストノードを持っています。
XMLデータは主に要素で構成されていることに注意してください(ドキュメントノードは特別な種類の要素として扱うことができます)。各要素にはタグ(order
、customer
、product
などのタグ)、属性(id
、name
、code
などの属性)があり、子供がいるかもしれません。子供たちは要素であるかもしれませんし、単純なテキスト値(3
、23.45
)であるかもしれません。他のノードタイプもありますが、それらはあまり一般的ではなく、この例では示されていません。
ここに示したorderの例は、現在使用されている多くのXMLフォーマットの典型的なものです。要素、属性、テキストをネストした構造に組み合わせることで、XMLは様々なフォーマットと、それらの中のバリエーションを可能にします。
ツリー = リスト + プロパティリスト
SenseTalkがツリーと共に働くアプローチは、ツリーを両方のコンテナタイプのハイブリッドとして扱うことで、リストとプロパティリストを扱うための言語固有の機能を活用しています。ツリーの子供はリストのアイテムのようにアクセスでき、その属性はプロパティリストのプロパティ値のようにアクセスできます。
ツリーについてはいくつかの詳細が異なります(以下で説明しますが)、全体として、リストとプロパティリストの扱いに慣れているなら、ツリーを扱うために必要なことのほとんどをすでに知っています。詳細はListsとProperty Listsを参照してください。
ツリーにはこれらの特性があるため、XMLとは何も関係がない状況でも、リストとプロパティリストの両方として動作するハイブリッドコンテナタイプとして役立つかもしれません。
ツリーとの作業
XMLからツリーを作成する
スクリプト内の内部ツリー構造にXMLデータを含むURLの内容をロードするには、as a tree
演算子を使用します:
put url "http://some.site/data.xml" as a tree into myTree