これは、エンティティインクルードと呼ばれる基本的なXML構造です。'allproperties.xml'という名前のファイルには、エンティティのプロパティマッピングフラグメントが含まれます。例えば:
<property name="name".../>
<property name="someOtherProperty".../>
<!-- rest of shared property definitions -->
次に、マッピングファイルで次のように言います。
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" [
<!ENTITY allproperties SYSTEM "allproperties.xml"> ]>
<hibernate-mapping>
<class name="Class1" ...>
<id .../>
&allproperties;
</class>
<class name="Class2" ...>
<id .../>
&allproperties;
</class>
</hibernate-mapping>
ここで各クラスのマッピングを定義し<id/>
ましたが、情報がすべて同じであれば、それをインクルードファイルに移動することもできます。の子として有効なものはすべて<class/>
、インクルードファイルで機能します。
JAXPは、SYSTEM参照が相対または絶対ファイル参照であることを想定しています。したがって、上記は、allproperties.xmlファイルがインクルードファイルのシステム識別子を基準にして解決されることを意味します。多くの場合、それはあまりうまくいかないかもしれません。そのために、Hibernateは、接頭辞classpath://が付いた特殊なタイプのSYSTEM参照も理解します。ご想像のとおり、これにより、参照されるリソースのクラスパスリソースルックアップがトリガーされます。
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" [
<!ENTITY allproperties SYSTEM "classpath://com/acme/allproperties.xml"> ]>
これで、allproperties.xmlは、com / acme/allproperties.xmlリソース名を使用したクラスパスルックアップによって解決されます。