# ALPSとは ## 目的 * 理解共有 * **用語辞書** * ワークフロー [1杯のコーヒー](https://www.infoq.com/jp/articles/webber-rest-workflow/?itm_source=infoq_en&itm_medium=link_on_en_item&itm_campaign=item_in_other_langs) * RESTアプリケーション設計 * 情報設計 * 実装言語のための入力言語 ## 用語 REST * アプリケーション状態、リソース状態 * アプリケーション状態: URLはクライアント管理。 * リソース状態 : サーバーサイド管理の状態情報。 * ハイパーリンク * GET/POST * 冪等性(PUT/DELETE、idempotent ) * アフォーダンス * 次の行動を想起させる性質や機能 (LINK) IA * オントロジー(意味) * タクソノミー(分類) * コレオグラフィー(関係) ALPS * セマンティックディスクリプタ(意味的記述子=意味のID) * セマンティック * アプリケーションセマンティックス (ALPS、使う言葉の仕様) * プロトコルセマンティックス (HTTP、動作の仕様) # ALPS チュートリアル ## 始める スキーマをサポートする[エディタ](https://www.jetbrains.com/ja-jp/webstorm/nextversion/)で始めます。 ```xml <?xml version="1.0" encoding="UTF-8"?> <alps xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://alps-io.github.io/schemas/alps.xsd"> </alps> ``` ## オントロジー オントロジーとは語句の意味をはっきり定義すること。 ### 語句をリストアップする 宣言のみ ```xml <descriptor id="dateCreated"/> ``` ### 語句を説明する `title`で説明 ```xml <descriptor id="dateCreated" title="作成日付"/> ``` `doc`で説明 ```xml <descriptor id="dateCreated"> <doc format="markdown">ISO8601フォーマットで記事の作成日付を表します</doc> </descriptor> ``` `def`で定義へリンク ```xml <descriptor id="dateCreated" def="https://schema.org/dateCreated" title="作成日付" /> ``` 他のALPSファイルにリンク ```xml <descriptor href="definition.xml#dateCreated"/> <descriptor href="http://example.com/dateCreated.xml#dateCreated"/> ``` ボキャブラリサイト * [schema.org](https://schema.org/docs/schemas.html) * [IANA](https://www.iana.org/assignments/link-relations/link-relations.xml) ## タクソノミー タクソノミーとは情報のアレンジメント。 アプリケーション状態は、**情報**と**アフォーダンス**を含みます。 ```xml <!-- Ontology --> <descriptor id="id" title="id"/> <descriptor id="articleBody" title="本文"/> <descriptor id="dateCreated" title="作成日付"/> <!-- Taxonomy --> <descriptor id="BlogPosting" " title="ブログ記事"> <descriptor href="#id"/> <descriptor href="#dateCreated"/> <descriptor href="#articleBody"/> <descriptor href="#goBlog" title="ブログ一覧を見る/> </descriptor> ``` HTTPでURIが示すハイパーメディアです。 ## コレオグラフィー 情報は他の情報と関係しています。 ```xml <descriptor id="goBlog" type="safe" rt="#Blog" title="ブログ記事リストを見る"/> ``` ```xml <descriptor id="goBlogPosting" type="safe" rt="#BlogPosting" title="ブログ記事を見る"> <descriptor href="#id"/> </descriptor> ``` コレオグラフィーにはタイプがあります。 ### タイプ * safe (GET) * unsafe (POST) * idempotent (PUT, DELETE) ## 他のタグ descriptorが持てるその他のタグなど ### tag 属性を加えます。 ```xml <descriptor id="ticketList" tag="ontology collection"> ``` ### link メタ情報とリンクします。 ```xml <descriptor id="dateCreated"> <link href="https://github.com/koriym/app-state-diagram/issues" rel="issue" title="Issue list"/> </descriptor> ``` ### doc titleに対してより詳しく ```xml <descriptor id="dateCreated"> <doc format="markdown">ISO8601フォーマットで記事の作成日付を表します</doc> </descriptor> ``` ## Q&A * Q: 命名規則はありますか? * A: 規則ではありませんが、[ベストプラクティス](https://github.com/alps-io/best-practices)があります。 * Q: 同じ意味で他のIDを使いたい時は? * A: `href`でリンクして別の`id`を指定します。 ```xml <descriptor id="userId" href="#id"/> <descriptor id="userName" href="#name"/> ```