【しばらく編集不可モードで運営します】 編集(管理者用) | 差分 | 新規作成 | 一覧 | RSS | FrontPage | 検索 | 更新履歴

SOX - Simple Outline XML

目次

Simple Outline XML

はじめに

原文:http://www.langdale.com.au/SOX/

Translation by Toshihiko Ono

Should you have any comments or suggestions to this translation, please apend it at the end of this document.

SOXとは

SOXは、XMLを簡単に記述する方法です。 テキストエディターで、XMLを作成したり、 読んだりするときにとても役に立ちます。そして、SOXは簡単にXMLに変換可能です。

SOXは、開発者が、XML自体にもっと時間を費やせるように作られました。私たちの 多くにとって、XMLエディターは、そのツリー、テーブル、またはフォーム表示が、 根底にあるマークアップ言語を代替できるところまで、まだ発達していません。開 発者達が、Javaなどの他言語でも、今だに、発達はしているけれども、テキスト形 式で開発していることを考えると、これはそんなに驚くことではありません。

SOXは、タグを閉じる必要やいくつかの引用符の使用を省いて、XMLの構成をイン デントを使って表現します。 その成果は驚くほど明確です。例として、下記が SOX で書かれたXSLTスクリプトです。

 stylesheet>
    xmlns=http://www.w3.org/1999/XSL/Transform
    version=1.0
    template>
        match=node()
        copy>
            apply-templates>
                select=node()

下記が、もう少し簡潔にSOXをつかって書かれた、XHTMLスクリプトです。

 html>
    head>
        title> My Home Page
    body>
        h1> Contact Details
        p>  I can be contacted at
            a>  href=mailto:me@myplace.net
                this address
            except when on vacation.

SOXは、エレメント、属性、テキストで構成されたXMLを書くときに使えます。 XMLのその他のもの、たとえば、コマンド処理、コメント、[entities]などは、今現 在、SOXをつかえません。

SAXリーダーとしてのSOXは提供されています。

SOX基礎

SOXの基本的な文法では、XMLエレメント、属性、テキスト節を、次のように表しま す。SOXの文法には、この他、次のセクションで説明される引用系テキストと一行 フォームが含まれます。

XMLエレメントは、閉じるくちばし、「>」、だけを最後につけて表します。エ レメントの中身は次行にインデントをつかって表します。

    ------------------------------------------------------
    SOX                         XML
    ------------------------------------------------------
    element>                    <element ... >
        ...                          ...
        ...                     </element>
    ------------------------------------------------------

インデントされる段落は、その他の段落に相対して表され、同じレ ベルのインデントか、さらに深いインデントを囲みます。

    ------------------------------------------------------
    SOX                         XML
    ------------------------------------------------------
    A>                          <A>
        B>                      <B>
            C>                  <C/>
        D>                      </B>
                                <D/>
                                </A>
    ------------------------------------------------------

XMLの属性は、その名前と続く「=」で表されます。「=」の後から行の終わり までに含まれるテキストが、属性の値になります。属性は、自身が含まれるエレメ ントの子孫よりも先に記述されなければなりません。

    ------------------------------------------------------
    SOX                         XML
    ------------------------------------------------------
    Element>                    <element
        attribute=value            attribute="value"
        ...                      ... >
                                 ...
                                </element>
    ------------------------------------------------------

引用符なしの「>」と「=」を含まない行がXMLのテキスト節を表します。

    ------------------------------------------------------
    SOX                         XML
    ------------------------------------------------------
    Element>                    <element ...>
        ...                         ... text node ...
        text node               </element>
        ...
    ------------------------------------------------------

空白

スペースとタブが空白とみなされます。空白は次のように処理されます。

1.空白のみの行は無視されます。

2.インデントは行頭の空白で表されます。タブは8個ぶんのスペースとみな されます。

3.引用符で囲まれていないテキストを含む行の、文頭と文末にある空白は無 視され、文中の空白は、すべて1つぶんのスペースとして処理されます。

4.XMLのテキスト節をなす引用符なしの文には、無条件でシングルスペースが追加されます。(これは引用符を使用することによって、避けられます。)

5.上記以外の空白はすべて無視されます。

引用符で囲まれたテキスト

テキストは、「'」または「"」をつかって囲むことができます。これらの引用符で囲ま れたテキストは、引用符で囲まれていないテキストとが使えるところでは、どこで でも使用できます。

引用符で囲まれたテキストは、属性の値としてつかえます。

    -----------------------------------------------------------------
    SOX                                 XML
    -----------------------------------------------------------------
    template>                           <template match=
        match="html:p[class='note']"       "html:p[class='note']"
                                        />
    -----------------------------------------------------------------

引用符で囲まれたテキストだけの行は、テキスト節を表します。(シングルスペ ースは添付されません。)

    -----------------------------------------------------------------
    SOX                              XML
    -----------------------------------------------------------------
    pre>                             <pre>controlled spacing</pre>
       "controlled sp"
       "acing"
    -----------------------------------------------------------------

引用符で囲まれたテキストと囲まれていないテキストは、(文頭、文末も含め) 自由に混ぜて使うことができます。引用されたテキストのみが、引用符なしで 挿入されます。

    -----------------------------------------------------------------
    SOX                              XML
    -----------------------------------------------------------------
    p>                               <p>Whole &gt; the parts. </p>
       whole ">" the parts.
    -----------------------------------------------------------------

隣り合わせの引用符で囲まれたテキスト同士は、引用されたテキストがそのまま、 結合されます。

    -----------------------------------------------------------------
    SOX                              XML
    -----------------------------------------------------------------
    p>                               <p>Thisandthat</p>
       "This" "and" "that"
    -----------------------------------------------------------------

引用符で囲まれたテキストの中では、

1.空白はそのまま保持されます。

2.「=」と「>」は保持されます。

3.「'」(「"」で引用された場合)と「"」(「'」で引用された場合)は保持されます。

4.改行はつかえません。

複数行のテキスト

複数行にまたがるテキストは、「"""」または「'''」で囲んで表します。 この形の引用文は一つのXMLのテキスト節を表します。例えば:

    -------------------------------------------------------------------
    SOX                                XML
    -------------------------------------------------------------------
    pre>                               <pre>Text spanning several
       """Text spanning several        lines forming a single XML
       lines forming a single XML          'so-called' text node</pre>
           'so-called' text node"""
    -------------------------------------------------------------------

1.複数行にまたがるテキストは、(適切なインデントで)「'''」または「"""」で囲って表します。

2.三連の引用符で囲まれたテキスト全てが、その一節を形成します。これは、改行も含みますが、インデントは、次のように扱われます。

3.複数行の引用文に含まれるインデントは、そのテキストにそうように、調整されます。 現行のインデントよりも浅いか、もしくは同じ深さのインデントは削除されます。 現行のインデントよりも深い場合は、現行のインデントの深さまで減らされます。

同じ行での記述

明瞭にするために、一つのエレメントの属性や子孫テキスト節を、そのエレメン トと同じ行に続けて記述することができます。追随する子孫エレメントは、今ま でどおり、インデントをつかって表します。(同じ行にかかれた子孫もふくめ、 関係を表す順序は守らなければなりません。)例として:

    -----------------------------------------------------------------
    Basic SOX                     Alternative
    -----------------------------------------------------------------
    template>                     template> name=item
       name=item                     html:p>ITEM:
       html:p>                          apply-templates>select=node
          ITEM:
          apply-template>
             select=node()
    -----------------------------------------------------------------

エレメントを、その親エレメントと同じ行に書くこともできます。この場合、そ のエレメントは、親エレメントの一人っ子となります。この節に続く、イン デントされた段落は、その一人っ子エレメントに付随します。XML Schemaの記述 を例にすると:

   --------------------------------------------------------------------------
   Basic SOX                     Alternative
   --------------------------------------------------------------------------
   element>                      element> name=doc
      name=doc                      annotation> documentation>
      annotation>                      the document element
         documentation>             complexType> sequence> element> name=body
            the document element       type=bodyType
      complexType>
         sequence>
            element>
               name=body
               type=bodyType
   --------------------------------------------------------------------------

環境・開発

Javaで作られたSAXパーサーとSAXシリアライザーが提供されています。ソースコ ードはhttp://www.langdale.com.au/SOX/SOX-20020331.zipにあります。

簡単にSOXを作成、処理する方法として、styler http://www.langdale.com.au/stylerがあります。Stylerはコマンドラインから 使う方法と、SOXを処理する「Ant task」として使うことができます。

メモ

このSOXの定義は、public domainにあり、複写、使用は自由です。

「SOX」の頭字語は、1999年あたりに提唱されたXML Schema http://www.w3.org/TR/NOTE-SOX/を指すこともあります。

意見・感想など

(Too many spams ... embedded comments are not allowed now, sorry.)