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ツールを更新する必要のない他のオプションはありますか?
XMLドキュメントの構造を定義するためにXMLスキーマ(XSD)ファイルを作成します。 xs:annotation
タグとxs:documentation
タグを含めて、要素を説明できます。 XSDファイルは、 xs3p などの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>
さまざまなXMLスキーマ言語を試してみたところ、ほとんどの場合にRELAX NGが最適であることがわかりました(最後に理由があります)。
このタイプの構造もドキュメントで説明するために、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では、サンプル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
}*
}
与えられたレベルの表現力を保ちながら、シンプルさを打ち負かすことは非常に難しいと思います。
##
プレフィックスを使用します。これは、他のスキーマ形式のドキュメント要素に自動的に変換されます。単一のハッシュ#
は、ドキュメント要素ではなくXMLコメントに変換されます。(例のように)複数の連続するコメントは、単一の要素内で単一の複数行のドキュメント文字列に変わります。
明らかな事実:doc.xml
のインラインXMLコメントは無関係であり、schema.rnc
にあるものだけがカウントされます。
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ドキュメント仕様を使用できます。
RELAX NGコンパクトな構文をサポートし、LinuxとMSWindowsの両方で動作するjing
やrnv
のようなオープンソースツールがあります。
注:これらのツールはかなり古いですが、非常に安定しています。時代遅れの兆候としてではなく、安定性の兆候としてそれを読んでください。
Jingの使用:
$ 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コンパクトな構文が最適のように見えます。RELAXNGを使用すると、両方が得られます-自動化にも使用できる人間が読めるスキーマ検証。
既存の制限はあまり有効にならず、多くの場合、コメントまたはその他の手段で解決できます。
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>
個人的には、XMLで表示したいと思います(2番目の方法)。
テーブルに要素を配置しても、どの要素がどの要素の親子であるかなどは明確にわかりません。それをXMLに入れるのはかなり明確で、何が起こっているのかがわかります。
テーブルに表示するには、制限があります。ネストされた子のマルチレベルですが、単純なXML構造の場合、これで問題ないと思います。ネストされたレベルが複数ある場合は、XML方式をお勧めします。
さらに良い方法は、XMLスキーマ(XSD)ファイルを作成することです。そうすることで、XMLで表示できるというメリットがあり、ソフトウェアを使用してスキーマファイルに対してデータを入力した後でファイルを確認できます。
XSDに関する一連のすばらしいチュートリアルについては、 w3schools-XMLスキーマチュートリアル を確認してください。
誰かがそれが役に立つと思う場合に備えて、もう1つ追加したいと思います。
私は時々プログラミングをします HTML と他の時間で Android。 HTMLを実行するときは、 http://www.w3schools.com/tags/att_a_href.asp のように、W3Schoolsと同じ形式に従ってカスタムXMLを文書化します。 Android私が取り組んでいるプロジェクトは、 http://developer.Android.com/guide/topics/manifest/activity-element.htmlのようにGoogleの標準に従います。 #画面
このようにして、私が一緒に仕事をしているプログラマーは、私のドキュメントを理解するために余分な作業をする必要がありません。