Plone Dexterity は、インターフェイス (定義に zope.schema を使用) または XML ファイルを介してコンテンツ タイプ スキーマの定義をサポートします。好ましい/推奨される方法は何ですか?
さらに: スキーマ (models/mytype.xml) を定義するために使用される XML 方言のドキュメントはありますか?
このプレゼンテーションは近いように見えますが、完全ではありません。
個人的には、zope.schema ルートの方がずっと好きです。XML定義はもちろん静的ですが、本当にしたい場合は、インターフェイス属性をPythonで動的に変更できます。
また、XML で定義されたスキーマに対してアダプターとビューを登録するには、いずれにしても Python コードにプルする必要があることに注意してください。
from plone.dexterity import api
class IMyXMLDefinedType(api.Schema):
api.model('my_xml_defined_type.xml')
XML ダイアレクトはplone.supermodel
packageの一部です。ソース コード以外のドキュメントを見つけることができませんでした。
厳密で迅速な答えはないと言って、混乱に貢献するつもりです。
より単純なコンテンツ タイプの場合、またはより複雑なコンテンツ タイプの開発の初期段階では、スーパーモデルの XML を重視することがよくあります。これは、この XML が巧妙な TTW エディターと非常に密接に連携するためです。これにより、クライアントがコンテンツ タイプから何を求めているかについて、非常に迅速なフィードバックを得ることができます。
スーパーモデルを介して FTI でフィールドを定義したまま、一部の機能のファイル システム開発に移行することもあります。
ただし、より複雑なコンテンツ タイプでは、スーパーモデルだけではできないことをほぼ確実に達成できます。その時点で、私は通常、スキーマに変換します — 通常、これは非常に簡単に行うことができます。
理想的には、多くの器用さの開発を行っている場合は、前後に簡単にシフトできるはずです。これらは、同じオブジェクトと属性を表す別の方法にすぎません。
私はxmlモデルよりもインターフェースを好みます。その理由の 1 つは、私が XML よりも Python を好むからです。その理由の 1 つは、XML ではできないことがあるからです。たとえば、collective.dexteritytextindexer を使用してフィールドを検索可能として登録したい場合、(現在) Plone インターフェースでこれを設定することはできないため、Python コードとインターフェースを使用する必要があります。しかし、Martijn は彼の回答で、インターフェイスで api.model を使用して xml ファイルを参照できることを示しています。