2019年12月30日月曜日

Kaleidox: Table

前回はKaleidoxの中軸となるRecordオブジェクトについて説明しました。

今回はRecordオブジェクトと同様にKaleidoxの中軸オブジェクトであるTableオブジェクトについて説明します。

Tableオブジェクトは文字通り表を記述するオブジェクトで、Recordオブジェクトの列にスキーマとヘッダ、フッタの情報を加えたものになっています。

準備


Table使Kaleidoxinit.kld

H2person2
* env

db.default.driver="org.h2.Driver"
db.default.url="jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false"

* voucher

** person

#+caption: 特性一覧
|特性  | 名前 | 型     | 多重度 | ラベル  |
|------+------+--------+--------+---------|
| 属性 | id   | int    |      1 | User ID |
| 属性 | name | string |      1 | 名前    |
| 属性 | city | string |      ? | 市      |

* data

** person

*** x

100,Taro,Yokohama
200,Hanako,Kawasaki

* main

store-create 'person
store-insert 'person x

DATA
init.kld
* data

** person

*** x

100,Taro,Yokohama
200,Hanako,Kawasaki

xCSVTable

入力

Tableオブジェクトの入力方法として以下の方法について見ていきます。

  • データベース読込み
  • CSVファイル
  • LTSVファイル
  • XMLファイル
  • JSONファイル
  • HTMLファイル
データベース読込み

Kaleidox2

Store



SQL

SQL

Store
使
store-selectTable
store-select()
kaleidox> store-select 'person
Table[3x2]

Table
kaleidox> :show
┏━━━┯━━━━━━┯━━━━━━━━┓
┃id │name  │city    ┃
┣━━━┿━━━━━━┿━━━━━━━━┫
┃100│Taro  │Yokohama┃
┃200│Hanako│Kawasaki┃
┗━━━┷━━━━━━┷━━━━━━━━┛

Table使
head使
kaleidox> .head
id:100 name:Taro city:Yokohama
kaleidox> :show
Record[2] name:Taro city:Yokohama


SQL
使SQL使TableRecord
sqlSQLSQLSELECTTable
kaleidox> sql "select * from person"
Table[3x1]
kaleidox> :show
Table[3x1]
┏━━━┯━━━━┯━━━━━━━━┓
┃ID │NAME│CITY    ┃
┣━━━┿━━━━┿━━━━━━━━┫
┃100│Taro│Yokohama┃
┗━━━┷━━━━┷━━━━━━━━┛
kaleidox> .head
ID:100 NAME:Taro CITY:Yokohama


CSV
CSV
CSVpersons.csv
id,name,city
100,Taro,Yokohama
200,Hanako,Kawasaki

CSVtable-loadtable-loadCSVURLHTTP
kaleidox> table-load file:persons.csv
Tabble[3x2]

showTable
kaleidox> :show
Table[3x2]
┏━━━┯━━━━━━┯━━━━━━━━┓
┃id │name  │city    ┃
┣━━━┿━━━━━━┿━━━━━━━━┫
┃100│Taro  │Yokohama┃
┃200│Hanako│Kawasaki┃
┗━━━┷━━━━━━┷━━━━━━━━┛


LTSV
LTSV
LTSVpersons.ltsv
id:100 name:Taro city:Yokohama
id:200 name:Hanako city:Kawasaki

LTSVtable-loadtable-loadLTSVURLHTTP
kaleidox> table-load file:persons.ltsv
Table[3x2]
kaleidox> :show
Table[3x2]
┏━━━┯━━━━━━┯━━━━━━━━┓
┃id │name  │city    ┃
┣━━━┿━━━━━━┿━━━━━━━━┫
┃100│Taro  │Yokohama┃
┃200│Hanako│Kawasaki┃
┗━━━┷━━━━━━┷━━━━━━━━┛

XMLファイル

XML文書から以下のいずれかの構造を読み取り、その情報に基づいてTableオブジェクトを生成することができます。

  • 表データ
  • レコードデータ

表データ

XML文書が以下のようにリスト構造になっている場合は表データとして解釈することができます。

<accounts>
  <account>
    <id>100</id>
    <name>Taro</name>
    <city>Yokohama</city>
  </account>
  <account>
    <id>200</id>
    <name>Hanako</name>
    <city>Kawasaki</city>
  </account>
</accounts>

table-make関数はXML文書の構造を解釈してTableオブジェクトとして読み込みます。

このXML文書をpersons.xmlとして用意してtable-make関数を呼び出すとTableオブジェクトとして読み込むことができます。

kaleidox> table-make file:persons.xml
Table[3x2]
kaleidox> :show
Table[3x2]
┏━━━┯━━━━━━┯━━━━━━━━┓
┃id │name  │city    ┃
┣━━━┿━━━━━━┿━━━━━━━━┫
┃100│Taro  │Yokohama┃
┃200│Hanako│Kawasaki┃
┗━━━┷━━━━━━┷━━━━━━━━┛

レコードデータ

XML文書が以下のようにレコード構造になっている場合はレコードデータとして解釈することができます。

<account>
  <id>100</id>
  <name>Taro</name>
  <city>Yokohama</city>
</account>

このXML文書をperson.xmlとして用意してtable-make関数を呼び出すとTableオブジェクトとして読み込むことができます。

レコード構造の場合は1レコードを持つTableオブジェクトとなります。

kaleidox> table-make file:person.xml
Table[3x1]
kaleidox> :show
Table[3x1]
┏━━━┯━━━━┯━━━━━━━━┓
┃id │name│city    ┃
┣━━━┿━━━━┿━━━━━━━━┫
┃100│Taro│Yokohama┃
┗━━━┷━━━━┷━━━━━━━━┛

JSONファイル

JSON文書から以下のいずれかの構造を読み取り、その情報に基づいてTableオブジェクトを生成することができます。

  • 表データ
  • レコードデータ

表データ

JSON文書が以下のように配列になっている場合は表データとして解釈することができます。

[{
  "id": "100",
  "name": "Taro",
  "city": "Yokohama"
},{
  "id": "200",
  "name": "Hanako",
  "city": "Kawasaki"
}]

このJSON文書をpersons.jsonとして用意してtable-make関数を呼び出すとTableオブジェクトとして読み込むことができます。

kaleidox> table-make file:persons.json
Table[3x2]
kaleidox> :show
Table[3x2]
┏━━━┯━━━━━━┯━━━━━━━━┓
┃id │name  │city    ┃
┣━━━┿━━━━━━┿━━━━━━━━┫
┃100│Taro  │Yokohama┃
┃200│Hanako│Kawasaki┃
┗━━━┷━━━━━━┷━━━━━━━━┛

レコードデータ

JSON文書が以下のようにレコード構造になっている場合はレコードデータとして解釈することができます。

{
  "id": "100",
  "name": "Taro",
  "city": "Yokohama"
}

このJSON文書をperson.jsonとして用意してtable-make関数を呼び出すとTableオブジェクトとして読み込むことができます。

レコード構造の場合は1レコードを持つTableオブジェクトとなります。

kaleidox> table-make file:person.json
Table[3x1]
kaleidox> :show
Table[3x1]
┏━━━┯━━━━┯━━━━━━━━┓
┃id │name│city    ┃
┣━━━┿━━━━┿━━━━━━━━┫
┃100│Taro│Yokohama┃
┗━━━┷━━━━┷━━━━━━━━┛

HTMLファイル

HTML文書からTableオブジェクトを生成することができます。この場合は、HTML文章内の表構造を抽出し、条件に適合するものをTableオブジェクトとして取り出します。

以下のHTMLファイルpersons.htmlにはtableタグによって表が1つ定義されています。

<html>
    <head>
<title>表サンプル</title>
    </head>
    <body>
<p>表のサンプルです</p>
<table>
   <thead>
<tr><th>id</th><th>name</th><th>city</th></tr>
   </thead>
   <tbody>
<tr><td>100</td><td>Taro</td><td>Yokohama</td></tr>
<tr><td>200</td><td>Hanako</td><td>Kawasaki</td></tr>
   </tbody>
</table>
    </body>
</html>

このHTMLファイルに対してtable-make関数を適用するとHTML文書内の表データをTableオブジェクトとして抽出することができました。

kaleidox> table-make file:persons.html
Table[3x2]
kaleidox> :show
Table[3x2]
┏━━━┯━━━━━━┯━━━━━━━━┓
┃id │name  │city    ┃
┣━━━┿━━━━━━┿━━━━━━━━┫
┃100│Taro  │Yokohama┃
┃200│Hanako│Kawasaki┃
┗━━━┷━━━━━━┷━━━━━━━━┛

出力

データストア機能を使ってTableのデータをデータベースに格納することができます。

以下ではstore-insert関数を使って、personテーブルにTableの情報を追加しています。

kaleidox> store-insert x
(101)
kaleidox> store-get 'person 101
ID:101 NAME:Hanako CITY:Kawasaki
kaleidox> store-select 'person
Table[3x2]
kaleidox> :show
Table[3x2]
┏━━━┯━━━━━━┯━━━━━━━━┓
┃id │name  │city    ┃
┣━━━┿━━━━━━┿━━━━━━━━┫
┃100│Taro  │Yokohama┃
┃101│Hanako│Kawasaki┃
┗━━━┷━━━━━━┷━━━━━━━━┛

参照

Tableの内容はRecordのシーケンスとして参照することができます。

準備

前述のinit.kldの設定によって、変数xにTableオブジェクトが束縛されています。

kaleidox> x
Table[3x2]
kaleidox> :show
Table[3x2]
┏━━━┯━━━━━━┯━━━━━━━━┓
┃id │name  │city    ┃
┣━━━┿━━━━━━┿━━━━━━━━┫
┃100│Taro  │Yokohama┃
┃200│Hanako│Kawasaki┃
┗━━━┷━━━━━━┷━━━━━━━━┛

このTableオブジェクトを参照の対象にします。

プロパティ取得

Tableオブジェクトのプロパティは以下のようにプロパティ名を指定して取得することができます。

以下ではTableオブジェクトのカラム数をプロパティwidthで、レコード数をプロパティheightで取得しています。

kaleidox> x.width
3
kaleidox> x.height
2

レコード操作

Tableオブジェクトの先頭レコードはプロパティheadで取得することができます。

kaleidox> x.head
id:100 name:Taro city:Yokohama
kaleidox> :show
Record[3] id:100 name:Taro city:Yokohama

また、先頭レコードを除いた残りのレコードを保持したTableオブジェクトはプロパティtailで取得することができます。

kaleidox> x.tail
Table[3x1]
kaleidox> :show
Table[3x1]
┏━━━┯━━━━━━┯━━━━━━━━┓
┃id │name  │city    ┃
┣━━━┿━━━━━━┿━━━━━━━━┫
┃200│Hanako│Kawasaki┃
┗━━━┷━━━━━━┷━━━━━━━━┛

Tableオブジェクトが空の場合はプロパティheadはnilを返します。

kaleidox> setq y x.tail
Table[3x1]
kaleidox> y.tail
Table[3x0]
kaleidox> :show
Table[3x0]
┏━━┯━━━━┯━━━━┓
┃id│name│city┃
┣━━┿━━━━┿━━━━┫
┗━━┷━━━━┷━━━━┛
kaleidox> .head
nil

スキーマ

Tableオブジェクトのスキーマ情報はプロパティschemaで取得することができます。

kaleidox> x.schema
Schema[3] id,int,1 name,string,1 city,string,?
kaleidox> :show
Schema[3]
┏━━━━┯━━━━━━━━┯━━━━━━━━━━━━┓
┃name│datatype│multiplicity┃
┣━━━━┿━━━━━━━━┿━━━━━━━━━━━━┫
┃id  │int     │1           ┃
┃name│string  │1           ┃
┃city│string  │?           ┃
┗━━━━┷━━━━━━━━┷━━━━━━━━━━━━┛

まとめ

今回はKaleidoxの中軸オブジェクトの一つであるTableについて説明しました。

データベースやCSVファイルといった外部リソースの情報をTableオブジェクトとして読込み、Recordオブジェクト単位で処理していくのがKaleidoxの基本処理モデルです。TableとRecordをハブにして各種の連携を進めていきます。

諸元

  • Kaleidox : 0.1.8

2019年11月30日土曜日

Kaleidox: Record


KaleidoxRecord

RecordKaleidoxRecord

Record使

Record使Kaleidoxinit.kld
H2person1
* env

db.default.driver="org.h2.Driver"
db.default.url="jdbc:h2:mem:test;DB_CLOSE_DELAY=-1"

* voucher

** person

#+caption: 特性一覧
|特性  | 名前 | 型     | 多重度 | ラベル  |
|------+------+--------+--------+---------|
| 属性 | id   | int    |      1 | User ID |
| 属性 | name | string |      1 | 名前    |
| 属性 | city | string |      ? | 市      |

* main

store-create 'person
store-insert 'person id:100,name:Taro,city:Yokohama

入力


LXSVRecord

LXSV
LXSVRecord
kaleidox> name:Taro,city:Yokohama
name:Taro city:Yokohama

show2Record
kaleidox> :show
Record[2] name:Taro city:Yokohama

データベース読込み

Kaleidox2

Store



SQL

SQL

Store
使
store-getRecord
personID 100Record
kaleidox> store-get 'person 100
ID:100 NAME:Taro CITY:Yokohama

store-selectRecordTable
store-select()
kaleidox> store-select 'person
Table[3x1]

Table
kaleidox> :show
Table[3x1]
┏━━━┯━━━━┯━━━━━━━━┓
┃id │name│city    ┃
┣━━━┿━━━━┿━━━━━━━━┫
┃100│Taro│Yokohama┃
┗━━━┷━━━━┷━━━━━━━━┛

Table使
head使Record
kaleidox> .head
id:100 name:Taro city:Yokohama
kaleidox> :show
Record[2] name:Taro city:Yokohama


SQL
使SQL使TableRecord
sqlSQLSQLSELECTTable
TableheadRecord
kaleidox> sql "select * from person"
Table[3x1]
kaleidox> :show
Table[3x1]
┏━━━┯━━━━┯━━━━━━━━┓
┃ID │NAME│CITY    ┃
┣━━━┿━━━━┿━━━━━━━━┫
┃100│Taro│Yokohama┃
┗━━━┷━━━━┷━━━━━━━━┛
kaleidox> .head
ID:100 NAME:Taro CITY:Yokohama

出力

データストア機能を使ってRecordをデータベースに格納することができます。

以下ではstore-insert関数を使って、personテーブルにRecordを追加しています。

kaleidox> store-insert 'person id:101,name:Hanako,city:Kawasaki
(101)
kaleidox> store-get 'person 101
ID:101 NAME:Hanako CITY:Kawasaki
kaleidox> store-select 'person
Table[3x2]
kaleidox> :show
Table[3x2]
┏━━━┯━━━━━━┯━━━━━━━━┓
┃id │name  │city    ┃
┣━━━┿━━━━━━┿━━━━━━━━┫
┃100│Taro  │Yokohama┃
┃101│Hanako│Kawasaki┃
┗━━━┷━━━━━━┷━━━━━━━━┛

参照


Record

pRecord
kaleidox> setq p id:100,name:Taro,city:Yokohama
id:100 name:Taro city:Yokohama


kaleidox> p.name
"Taro"


XPath
XPath使Record
kaleidox> /name p
"Taro"

まとめ

今回はKaleidoxの中軸オブジェクトであるRecordについて説明しました。

次回はもう一つの中軸オブジェクトであるTableについて説明する予定です。

諸元

  • Kaleidox : 0.1.7

2019年10月31日木曜日

Kaleidox: LXSV


KaleidoxRecord

RecordLXSVLXSV使kaleidoxRecord

LXSVLTSV(Labeled Tab-separeted Values)

Kaleidox

LTSV




LXSV

LXSVUnicode
LXSV
name:Taro,city:Yokohama
name:Hanako,city:Kawasaki

:,
:
TABSPACE,;

LXSV
: TAB
name:Taro city:Yokohama
name:Hanako city:Kawasaki

: SPACE
name:Taro city:Yokohama
name:Hanako city:Kawasaki

: ,
name:Taro,city:Yokohama
name:Hanako,city:Kawasaki

: ;
name:Taro;city:Yokohama
name:Hanako;city:Kawasaki

区切り記号の入力


TAB, SPACE, ,, ;3

使

"


使
1
name:Taro;city:Yokohama,Kawasaki
name:Hanako;city:Kawasaki,Yokohama

LXSV;使,使
name:Taro;city:Yokohama,Kawasaki
name:Hanako;city:Kawasaki,Yokohama


TAB, SPACE, ,, ;使"使
name:Taro;city:"Yokohama,Kawasaki"
name:Hanako;city:"Kawasaki,Yokohama"

"使\n\r使"\"\使
name:Taro;city:"Yokohama\nKawasaki"
name:Hanako;city:"Kawasaki\"Yokohama"

LXSVリテラル


KaleidoxRecordRecordLXSV
kaleidox> name:Taro,city:Yokohama
name:Taro,city:Yokohama
kaleidox> :show
Record[2] name:Taro,city:Yokohama

Record使Recordrecord
使
kaleidox> record"name:Taro,city:Yokohama"
name:Taro,city:Yokohama
kaleidox> :show
Reord[2] name:Taro,city:Yokohama

KaleidoxLXSV使lxsv
kaleidox> lxsv"name:Taro,city:Yokohama"
name:Taro,city:Yokohama
kaleidox> :show
Lxsv[2] name:Taro,city:Yokohama

まとめ

Recordを使用するための前提となるLXSVについてご紹介しました。

次回はRecordの具体的な使い方について説明する予定です。

諸元

  • Kaleidox : 0.1.6

2019年9月30日月曜日

Kaleidox: JSON

Kaleidoxでは、実用的に利用できるアクション言語としてXML, HTML, JSON, CSV, Excelといったクラウドアプリケーションで使用する各種データ形式を簡単に扱えるようになっています。

前々回、前回とXMLとHTMLの操作方法について紹介しました。

今回はJSONの操作方法について紹介します。

JSONリテラル


JSON

JSONJSONfile.json
{
  "id": "0001",
  "name": "taro",
  "point": 100
}

KaleidoxJSON
REPL
kaleidox> {
  "id": "0001",
  "name": "taro",
  "point": 100
}
{\n  "id": "0001",\n  "name": "taro",\n  "point": 100\n}


REPLJSONJSONJSONJSONURLOK
kaleidox> file:sample.json
{\n  "id": "0001",\n  "name": "taro",\n  "point": 100\n}\n

filehttp
kaleidox> http://example.com/sample.json
{\n  "id": "0001",\n  "name": "taro",\n  "point": 100\n}\n


XPath

KaleidoxJSONXPath
{
  "id": "0001",
  "name": "taro",
  "point": 100
}

JSONsample.jsonXPath@name
JSONname
kaleidox> @name file:sample.json
"taro"

XPath/nameJSONname
JSONXMLJSON
kaleidox> /name file:sample.json
"taro"


XSLT

KaleidoxJSONXMLXSLT
使JSON
{
  "id": "0001",
  "name": "taro",
  "point": 100
}

JSONXSL
<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="html"></xsl:output>

  <xsl:template match="/">
    <HTML>
    <BODY>
    <xsl:apply-templates/>
    </BODY>
    </HTML>
  </xsl:template> 

  <xsl:template match="record">
    <TABLE>
      <THEAD>
        <TR>
          <TH>ID</TH>
          <TH>Name</TH>
   <TH>Point</TH>
        </TR>
      </THEAD>
      <TBODY>
 <TR>
   <TD><xsl:value-of select="id"/></TD>
   <TD><xsl:value-of select="name"/></TD>
   <TD><xsl:value-of select="point"/></TD>
 </TR>
      </TBODY>
    </TABLE>
  </xsl:template> 
</xsl:stylesheet>

XMLHTMLXSLJSONXSL
kaleidox> file:sample.xsl file:sample.json
<HTML><BODY><TABLE><THEAD><TR><TH>ID</TH>
<TH>Name</TH><TH>Point</TH></TR>...

XML
XSLTJSONHTML
kaleidox> :show:print
<HTML><BODY><TABLE><THEAD><TR><TH>ID</TH>
<TH>Name</TH><TH>Point</TH></TR></THEAD>
<TBODY><TR><TD>0001</TD><TD>taro</TD>
<TD>100</TD></TR></TBODY></TABLE>
</BODY></HTML>

Table


XMLHTMLJSONTable

使JSON
{
  "id": "0001",
  "name": "taro",
  "point": 100
}

JSONtable-make
kaleidox> table-make file:sample.json
Table[3x1]

31

showHTML
kaleidox> :show
Table[3x1]
┏━━━━┯━━━━┯━━━━━┓
┃id  │name│point┃
┣━━━━┿━━━━┿━━━━━┫
┃0001│taro│100  ┃
┗━━━━┷━━━━┷━━━━━┛

JSONJson Object1

JSONJson Object
Json ObjectJSON
[{
  "id": "0001",
  "name": "taro",
  "point": 100
},{
  "id": "0002",
  "name": "hanako",
  "point": 200
}]

JSONtable-make
kaleidox> table-make file:sample-table.json
Table[3x2]

32
showHTML
kaleidox> :show:print
┏━━━━┯━━━━━━┯━━━━━┓
┃id  │name  │point┃
┣━━━━┿━━━━━━┿━━━━━┫
┃0001│taro  │100  ┃
┠────┼──────┼─────┨
┃0002│hanako│200  ┃
┗━━━━┷━━━━━━┷━━━━━┛


JSON
JSONXPath()XSLT()XML便
KaleidoxJSONXMLXML便JSON
XMLHTMLJSON
KaleidoxXMLHTMLJSON
Record

Kaleidox : 0.1.5

2019年8月25日日曜日

Kaleidox: HTML


KaleidoxXML, HTML, JSON, CSV, Excel使

XML

HTML

HTML

HTMLSGMLXMLXHTML
XHTMLXMLSGMLHTML
KaleidoxSGMLXMLHTMLHTMLDOM
HTMLXML
<b>HTML文書

HTMLHTML
kaleidox> html"""<b>HTML文書"""
<html><head xmlns="http://www.w3.org/1999/xhtml"/><body><b>HTML文書\n</b></b...

show使HTML
kaleidox> :show
SHtml: <html><head xmlns="http://www.w3.org/1999/xhtml"/><body><b>HTML文書
</b></body></html>

HTMLBHTMLHTMLHTMLHTMLXSLT

HTMLURI
kaleidox> file:sample.html
<html><head xmlns="http://www.w3.org/1999/xhtml"/><body><b>HTML文書\n</b></b...
kaleidox> :show
SHtml: <html><head xmlns="http://www.w3.org/1999/xhtml"/><body><b>HTML文書
</b></body></html>


XPath

HTMLXMLXPath
HTML
kaleidox> file:sample.html
<html><head xmlns="http://www.w3.org/1999/xhtml"/><body><b>HTML文書\n</b></b...

HTMLXPathhtmlbody/b
kaleidox> /html/body/b
"HTML文書\n"

XPathBHTML
XPathHTML
kaleidox> /html/body/b file:sample.html
"HTML文書\n"


XSLT

HTMLXMLXSLT
XSLT使XSL
HTMLXSLBIXSL
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="1.0">

  <xsl:template match="b">
    <i><xsl:value-of select="."/></i>
  </xsl:template>

  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

XSLHTML
XSLTHTMLxsltXSLT
kaleidox> file:sample.xsl file:sample.html
<html><head xmlns="http://www.w3.org/1999/xhtml"/><body><i>HTML文書\n</i></b...

HTMLshowBI
kaleidox> :show
SHtml: <html><head xmlns="http://www.w3.org/1999/xhtml"/><body><i>HTML文書
</i></body></html>


KaleidoxHTML
HTML
<html>
    <head>
 <title>表サンプル</title>
    </head>
    <body>
 <p>表のサンプルです</p>
 <table>
     <thead>
  <tr><th>A</th><th>B</th></tr>
     </thead>
     <tbody>
  <tr><td>1</td><td>11</td></tr>
  <tr><td>2</td><td>12</td></tr>
  <tr><td>3</td><td>13</td></tr>
     </tbody>
 </table>
    </body>
</html>

HTMLtable-make
kaleidox> table-make file:table.html
Table[2x3]

23
showHTML
kaleidox> :show:print
┏━┯━━┓
┃A│B ┃
┣━┿━━┫
┃1│11┃
┠─┼──┨
┃2│12┃
┠─┼──┨
┃3│13┃
┗━┷━━┛


XML
JSON

Kaleidox : 0.1.4

2019年7月29日月曜日

Kaleidox: XML

アクション言語を実用的に使用するにはXML, HTML, JSON, CSV, Excelといったクラウドアプリケーションで使用する各種データ形式を容易に扱えるようになっている必要があります。これらのデータをプログラム内に取り込んだり、データ形式間の相互運用が簡単にできることが重要です。

Kaleidoxでは各種データ形式の個々の操作性と、これらのデータ形式間の相互運用の両面について最適な記述が可能となるような言語機能を提供しています。

ここではまずXMLの操作についてみていきます。

XMLリテラル


KaleidoxXML

XML
<account>
  <id>0001</id>
  <name>taro</name>
  <point>100</point>
</account>

KaleidoxXMLXML
<account>
  <id>0001</id>
  <name>taro</name>
  <point>100</point>
</account>

sample.k
$ kaleidox sample.k
<account>
  <id>0001</id>
  <name>taro</name>
  <point>100</point>
</account>

XMLXMLXML

REPL
REPL
kaleidox> <account>
  <id>0001</id>
  <name>taro</name>
  <point>100</point>
</account>
<account>\n  <id>0001</id>\n  <name>taro</name>\n  <point>100</point>\n</acco...

XML
REPLXMLJSON
kaleidox> :show
<account>
  <id>0001</id>
  <name>taro</name>
  <point>100</point>
</account>

URL
kaleidox> file:sample.xml
<account>\n  <id>0001</id>\n  <name>taro</name>\n  <point>100</point>\n</acco...

show
kaleidox> :show
Xml(String)
<account>
  <id>0001</id>
  <name>taro</name>
  <point>100</point>
</account>


XPath

XMLXPathXML
KaleidoxXPathXML
kaleidox> <account>
  <id>0001</id>
  <name>taro</name>
  <point>100</point>
</account>
<account>\n  <id>0001</id>\n  <name>taro</name>\n  <point>100</point>\n</acco...
kaleidox> /account/name
"taro"


XSLT

XMLXSLT
XML使sample.xml
<account>
  <id>0001</id>
  <name>taro</name>
  <point>100</point>
</account>

XMLHTMLXSLsample.xsl
<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="html"></xsl:output>

  <xsl:template match="/">
    <HTML>
    <BODY>
    <xsl:apply-templates/>
    </BODY>
    </HTML>
  </xsl:template> 

  <xsl:template match="account">
    <TABLE>
      <THEAD>
        <TR>
          <TH>Name</TH>
   <TH>Value</TH>
        </TR>
      </THEAD>
      <TBODY>
 <TR>
   <TD><xsl:value-of select="id"/></TD>
   <TD><xsl:value-of select="name"/></TD>
   <TD><xsl:value-of select="point"/></TD>
 </TR>
      </TBODY>
    </TABLE>
  </xsl:template> 
</xsl:stylesheet>

XSLTxslt
XSLXSLURLXMLXMLURL
XSLURLXMLURLxsltXMLHTML
kaleidox> xslt file:sample.xsl file:sample.xml
<HTML><BODY><TABLE><THEAD><TR><TH>Name</TH><TH>Value</TH></TR></THEAD><TB...
kaleidox> :show:print
<HTML><BODY><TABLE><THEAD><TR><TH>Name</TH><TH>Value</TH></TR></THEAD><TBODY><TR><TD>0001</TD><TD>taro</TD><TD>100</TD></TR></TBODY></TABLE></BODY></HTML>

XSLxslt
kaleidox> file:sample.xsl file:sample.xml
<HTML><BODY><TABLE><THEAD><TR><TH>Name</TH><TH>Value</TH></TR></THEAD><TB...


Record

Kaleidox/
record-makeXMLrecord-makeXML
kaleidox> record-make file:sample.xml
id:1,name:taro,point:100

Table


XMLKaleidox使

table-makeXMLtable-makeXML
kaleidox> table-make file:sample.xml
Table[3x1]

show
kaleidox> :show
Table[3x1]
┏━━━━┯━━━━┯━━━━━┓
┃id  │name│point┃
┣━━━━┿━━━━┿━━━━━┫
┃0001│taro│100  ┃
┗━━━━┷━━━━┷━━━━━┛

XMLsample-list.xml
<accounts>
  <account>
    <id>0001</id>
    <name>taro</name>
    <point>100</point>
  </account>
  <account>
    <id>0002</id>
    <name>hanako</name>
    <point>200</point>
  </account>
</accounts>

table-make使
kaleidox> table-make file:sample-list.xml
Table[3x2]


kaleidox> :show:print
┏━━━━┯━━━━━━┯━━━━━┓
┃id  │name  │point┃
┣━━━━┿━━━━━━┿━━━━━┫
┃0001│taro  │100  ┃
┠────┼──────┼─────┨
┃0002│hanako│200  ┃
┗━━━━┷━━━━━━┷━━━━━┛

まとめ

今回はXMLの操作について説明しました。

次回以降、HTML, JSON, CSV, Excelの順にデータ操作方法についてみていく予定です。

諸元

  • Kaleidox : 0.1.3

2019年6月2日日曜日

Kaleidox


SimpleModeling(Action Language)kaledidox

kaleidox

Kaleidox
Lisp + Shell Script + Forth + COBOL

LispLisp
Shell ScriptShell ScriptLisp
ForthShell ScriptForth
COBOL(1)(2)Division

KaleidoxGitHub
https://github.com/asami/kaleidox


Kaleidox


$ sbt universal:packageBin

targetuniversalkaleidox-0.1.2.zip 
sbt使debian, rpm, docker, graalvm

Hello World

kaleidox使REPL
kaleidoxREPL
$ kaleidox
kaleidox> 

kaleidoxLisp

kaleidox> "Hello World"
Hello World



+
kaleidox> (+ 1 2)
3

Lispkaleidox
kaleidox> + 1 2
3

Shell Script

kaleidoxHello World
Json, XML

Kaleidox : 0.1.2

2019年5月18日土曜日

SimpleModeling


Modegramming StyleModegramming

ModegrammingSimpleModeling

SimpleModeling

SimpleModeling

UML


SimpleModeling

smartdox : 
simplemodeler : 

SimpleModelingsimplemodeler(CAP)

CAP Prefer Cloud Prefer CloudPrefer Cloud Platform(PCP)CAP20128

PCPSimpleModeling

(OOAD)200415
Object-Functional Analysis and Design

Object-Functional Analysis and Design
QCon Tokyo 2016
: OFP & OFAD Deep Dive with Reactive Streams

AI
IoT
RPA
FinTech

プロダクト


SimpleModelingOSS

smartdox :  ()
simplemodeler :  ()
kaleidox :: 
arcadia :: 

kaleidox
kaleidox
kaleidox


arcadia
Web
RESTWeb
調()REST

Webarcadia
kaleidoxarcadia

まとめ

SimpleModelingの全体構想とプロダクトについてご紹介しました。

次回以降は当面SimpleModelingの中核プロダクトであるkaleidoxについて取り上げていく予定です。