28

XMLファイルの構造を文書化することになると...

私の同僚の1人がWordテーブルでそれを行っています。

もう1つは、次のようなコメントを含む要素をWord文書に貼り付けます。

<learningobject id="{Learning Object Id (same value as the loid tag)}" 
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                xsi:noNamespaceSchemaLocation="http://www.aicpcu.org/schemas/cms_lo.xsd">




<objectRoot>
    <v>
        <!-- Current version of the object from the repository. !-->
        <!-- (Occurance: 1) -->
    </v>
    <label>
        <!-- Name of the object from the repository. !-->
        <!-- (Occurance: 0 or 1 or Many) -->
    </label>
</objectRoot>

これらの方法のどれが好ましいですか?もっと良い方法はありますか?

更新にサードパーティのSchemaDocumenterツールを必要としない他のオプションはありますか?

4

6 に答える 6

44

XML スキーマ (XSD) ファイルを作成して、XML ドキュメントの構造を定義します。要素を説明するタグを含めることができますxs:annotationXSD ファイルは、 xs3pxs:documentationなどの XSLT スタイルシートやXML Schema Documenterなどのツールを使用してドキュメントに変換できます。

XML スキーマの概要については、XML Schools チュートリアルを参照してください。

xs:annotationタグ付きのXMLスキーマとして表現された例を次に示します。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="objectroot">
    <xs:complexType>
      <xs:sequence>

        <xs:element name="v" type="xs:string">
          <xs:annotation>
            <xs:documentation>Current version of the object from the repository.</xs:documentation>
          </xs:annotation>
        </xs:element>

        <xs:element name="label" minOccurs="0" maxOccurs="unbounded" type="xs:string">
          <xs:annotation>
            <xs:documentation>Name of the object from the repository.</xs:documentation>
          </xs:annotation>
        </xs:element>

      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
于 2009-11-17T23:34:20.327 に答える
6

RELAX NG コンパクト構文をお楽しみください

さまざまな XML スキーマ言語を試してみたところ、RELAX NG がほとんどの場合に最適であることがわかりました (理由は最後にあります)。

要件

  • XML 文書構造の文書化を許可する
  • 読みやすい形式で行う
  • 作者にとってはシンプルに

修正サンプル XML (doc.xml)

ドキュメントでこのタイプの構造も説明するために、1 つの属性を追加しました。

<objectRoot created="2015-05-06T20:46:56+02:00">
    <v>
        <!-- Current version of the object from the repository. !-->
        <!-- (Occurance: 1) -->
    </v>
    <label>
        <!-- Name of the object from the repository. !-->
        <!-- (Occurance: 0 or 1 or Many) -->
    </label>
</objectRoot>

コメント付きの RELAX NG Compact 構文を使用する (schema.rnc)

RELAX NG では、サンプルの XML 構造を次のように記述できます。

start =

## Container for one object
element objectRoot {

    ## datetime of object creation
    attribute created { xsd:dateTime },

    ## Current version of the object from the repository
    ## Occurrence 1 is assumed by default
    element v {
        text
    },

    ## Name of the object from the repository
    ## Note: the occurrence is denoted by the "*" and means 0 or more
    element label {
        text
    }*
}

一定の表現力を保ちながら、シンプルさを超えるのは非常に難しいと思います。

構造をコメントする方法

  • コメントは常に、関連する要素の後ではなく前に配置してください。
  • 読みやすくするために、コメント ブロックの前に空白行を 1 行使用します。
  • ##他のスキーマ形式のドキュメント要素に自動的に変換される接頭辞を使用します。単一のハッシュ#は、ドキュメント要素ではなく、XML コメントに変換されます。
  • 複数の連続したコメント (例のように) は、単一の要素内の単一の複数行のドキュメント文字列になります。

  • 明らかな事実: のインライン XML コメントdoc.xmlは無関係schema.rncです。

XML スキーマ 1.0 が必要な場合は、それを生成します (schema.xsd)

と呼ばれる (オープン ソースの) ツールがtrang利用可能であると仮定すると、次のように XML スキーマ ファイルを作成できます。

$ trang schema.rnc schema.xsd

結果のスキーマは次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <xs:element name="objectRoot">
    <xs:annotation>
      <xs:documentation>Container for one object</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="v"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="label"/>
      </xs:sequence>
      <xs:attribute name="created" use="required" type="xs:dateTime">
        <xs:annotation>
          <xs:documentation>datetime of object creation</xs:documentation>
        </xs:annotation>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
  <xs:element name="v" type="xs:string">
    <xs:annotation>
      <xs:documentation>Current version of the object from the repository
Occurance 1 is assumed by default</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:element name="label" type="xs:string">
    <xs:annotation>
      <xs:documentation>Name of the object from the repository
Note: the occurance is denoted by the "*" and means 0 or more</xs:documentation>
    </xs:annotation>
  </xs:element>
</xs:schema>

これで、XML スキーマ 1.0 のみを使用することを主張するクライアントは、XML ドキュメント仕様を使用できるようになります。

schema.rnc に対する doc.xml の検証

jingRELAX NG Compact 構文をサポートするオープン ソース ツールがありrnv、Linux と MS Windows の両方で動作します。

注: これらのツールはかなり古いものですが、非常に安定しています。時代遅れの兆候としてではなく、安定の兆候として読んでください。

ジンを使用:

$ jing -c schema.rnc doc.xml

これ-cは重要jingです。デフォルトでは、XML 形式の RELAX NG を前提としています。

を使用rnvして確認すると、schema.rncそれ自体が有効です。

$ rnv -c schema.rnc

そして検証するdoc.xml

$ rnv schema.rnc doc.xml

rnv一度に複数のドキュメントを検証できます:

$ rnv schema.rnc doc.xml otherdoc.xml anotherone.xml

RELAX NG コンパクトな構文 - 長所

  • 非常に読みやすく、初心者でもテキストを理解する必要があります
  • 習得が容易 (RELAX NG には優れたチュートリアルが付属しており、そのほとんどを 1 日で習得できます)
  • 非常に柔軟です (実際にはシンプルに見えますが、多くの状況をカバーし、XML Schema 1.0 では解決できないものもあります)。
  • 他のフォーマットに変換するためのいくつかのツール (RELAX NG XML フォーム、XML スキーマ 1.0、DTD、さらにはサンプル XML ドキュメントの生成) が存在します。

RELAX NG の制限事項

  • 多重度は、「0 または 1」、「1 つだけ」、「0 以上」、または「1 つ以上」のいずれかです。(少数の要素の多重度は、「0 または 1」の定義の「愚かな繰り返し」によって記述できます)
  • RELAX NG では記述できない XML スキーマ 1.0 構造があります。

結論

上で定義した要件には、RELAX NG Compact 構文が最適です。RELAX NG を使用すると、人間が読み取れるスキーマを取得でき、自動検証にも使用できます。

既存の制限が有効になることはあまりなく、多くの場合、コメントやその他の手段によって解決できます。

于 2015-05-06T19:54:50.347 に答える
4

XML のより正式な仕様を提供する XSD スキーマを作成して、文書化してみてください。多くのツールでは、サンプル XML から開始点として XSD が生成されます。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="objectroot">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="v" minOccurs="1" type="xs:string"/> <!-- current version -->
      <xs:element name="label" type="xs:string"/> <!-- object name -->
    </xs:sequence>
  </xs:complexType>
</xs:element>
</xs:schema>
于 2009-11-17T23:33:33.350 に答える
2

個人的には、XMLで表示したいと思います(2番目の方法)。

要素をテーブルに配置しても、どの要素がどの要素の親子であるかなどは明確にわかりません。それをXMLに入れるのはかなり明確で、何が起こっているのかがわかります。

于 2009-11-17T23:26:43.170 に答える
2

テーブルに表示するには、ネストされた子のマルチレベルなどの制限がありますが、単純な XML 構造の場合、これで問題ないと思います。複数のネストされたレベルを持つものについては、XML の方法を好みます。

さらに良い方法は、XML スキーマ (XSD) ファイルを作成することです。そうすれば、XML で表示する利点が得られ、データが入力された後に、何らかのソフトウェアを使用してスキーマ ファイルに対してファイルをチェックできます。

XSD に関する優れた一連のチュートリアルについては、w3schools - XML Schema Tutorialを参照してください。

于 2009-11-17T23:34:08.560 に答える
0

誰かが役に立つと思った場合に備えて、もう1つ追加したいだけです。HTML
でプログラミングすることもあれば、Androidでプログラミングすることもあります。HTML を作成するときは、 http://www.w3schools.com/tags/att_a_href.aspのように W3Schools と同じ形式に従ってカスタム XML を文書化します。 http://developer.android.com/guide/topics/manifest/activity-element.html#screen このように、私が一緒に仕事をしているプログラマーは、私のドキュメントを理解するために余分な作業をする必要はありません。

于 2015-06-29T06:09:57.163 に答える