hibernate-mapping-3.0.dtd 39.9 KB
Newer Older
Thitichaipun Wutthisak committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956
<!-- Hibernate Mapping DTD.

<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

An instance of this XML document may contain mappings for an arbitrary 
number of classes. The class mappings may contain associations to classes
mapped in the same document or in another document. No class may be 
mapped more than once. Each document may also contain definitions of an
arbitrary number of queries, and import declarations of arbitrary classes. 

-->

<!--
	The document root.
 -->

<!ELEMENT hibernate-mapping (
	meta*, 
	typedef*, 
	import*, 
	(class|subclass|joined-subclass|union-subclass)*,
	(query|sql-query)*, 
	filter-def*
)>
	<!ATTLIST hibernate-mapping schema CDATA #IMPLIED>									<!-- default: none -->
	<!ATTLIST hibernate-mapping catalog CDATA #IMPLIED>									<!-- default: none -->
	<!ATTLIST hibernate-mapping default-cascade CDATA "none">
	<!ATTLIST hibernate-mapping default-access CDATA "property">
	<!ATTLIST hibernate-mapping default-lazy (true|false) "true">
	<!ATTLIST hibernate-mapping auto-import (true|false) "true">
	<!ATTLIST hibernate-mapping package CDATA #IMPLIED>									<!-- default: none -->

<!--
	META element definition; used to assign meta-level attributes to a class
	or property.  Is currently used by codegenerator as a placeholder for
	values that is not directly related to OR mappings.
-->
<!ELEMENT meta (#PCDATA)>
	<!ATTLIST meta attribute CDATA #REQUIRED>
	<!ATTLIST meta inherit (true|false) "true">

<!--
	TYPEDEF element definition; defines a new name for a Hibernate type. May
	contain parameters for parameterizable types.
-->
<!ELEMENT typedef (param*)>
	<!ATTLIST typedef class CDATA #REQUIRED>
	<!ATTLIST typedef name CDATA #REQUIRED>

<!--
	IMPORT element definition; an explicit query language "import"
-->
<!ELEMENT import EMPTY>
	<!ATTLIST import class CDATA #REQUIRED>
	<!ATTLIST import rename CDATA #IMPLIED>	<!-- default: unqualified class name -->

<!--
	Root entity mapping.  Poorly named as entities do not have to be represented by 
	classes at all.  Mapped entities may be represented via different methodologies 
	(POJO, Map, Dom4j).
-->
<!ELEMENT class (
 	meta*,
	subselect?,
	cache?,
	synchronize*,
	comment?,
	(id|composite-id),
	discriminator?,
	natural-id?,
	(version|timestamp)?,
	(property|many-to-one|one-to-one|component|dynamic-component|properties|any|map|set|list|bag|idbag|array|primitive-array|query-list)*,
	((join*,subclass*)|joined-subclass*|union-subclass*),
	loader?,sql-insert?,sql-update?,sql-delete?,
	filter*,
	(query|sql-query)*
)>
	<!ATTLIST class entity-name CDATA #IMPLIED>
	<!ATTLIST class name CDATA #IMPLIED>                            <!-- this is the class name -->
	<!ATTLIST class proxy CDATA #IMPLIED>							<!-- default: no proxy interface -->
	<!ATTLIST class lazy (true|false) #IMPLIED>
	<!ATTLIST class table CDATA #IMPLIED>							<!-- default: unqualified classname -->
	<!ATTLIST class schema CDATA #IMPLIED>							<!-- default: none -->
	<!ATTLIST class catalog CDATA #IMPLIED>							<!-- default: none -->
	<!ATTLIST class subselect CDATA #IMPLIED>
	<!ATTLIST class discriminator-value CDATA #IMPLIED>				<!-- default: unqualified class name | none -->
	<!ATTLIST class mutable (true|false) "true">
	<!ATTLIST class abstract (true|false) "false">
	<!ATTLIST class polymorphism (implicit|explicit) "implicit">
	<!ATTLIST class where CDATA #IMPLIED>							<!-- default: none -->
	<!ATTLIST class persister CDATA #IMPLIED>
	<!ATTLIST class dynamic-update (true|false) "false">
	<!ATTLIST class dynamic-insert (true|false) "false">
	<!ATTLIST class batch-size CDATA #IMPLIED>
	<!ATTLIST class select-before-update (true|false) "false">
	<!ATTLIST class optimistic-lock (none|version|dirty|all) "version">
	<!ATTLIST class check CDATA #IMPLIED>							<!-- default: none -->
	<!ATTLIST class rowid CDATA #IMPLIED>
	<!ATTLIST class node CDATA #IMPLIED>


<!--
	FILTER-DEF element; top-level filter definition.
-->
<!ELEMENT filter-def (#PCDATA|filter-param)*>
	<!ATTLIST filter-def name CDATA #REQUIRED> <!-- The filter name -->
	<!ATTLIST filter-def condition CDATA #IMPLIED>

<!--
	FILTER-PARAM element; qualifies parameters found within a FILTER-DEF
	condition.
-->
<!ELEMENT filter-param EMPTY>
	<!ATTLIST filter-param name CDATA #REQUIRED> <!-- The parameter name -->
	<!ATTLIST filter-param type CDATA #REQUIRED> <!-- The parameter type -->

<!--
	FILTER element; used to apply a filter.
-->
<!ELEMENT filter (#PCDATA)>
	<!ATTLIST filter name CDATA #REQUIRED>
	<!ATTLIST filter condition CDATA #IMPLIED>


<!-- A join allows some properties of a class to be persisted to a second table -->

<!ELEMENT join ( 
	subselect?,
	comment?,
	key,
	(property|many-to-one|component|dynamic-component|any)*,
	sql-insert?,sql-update?,sql-delete?
)>
	<!ATTLIST join table CDATA #REQUIRED>
	<!ATTLIST join schema CDATA #IMPLIED>						<!-- default: none -->
	<!ATTLIST join catalog CDATA #IMPLIED>						<!-- default: none -->
	<!ATTLIST join subselect CDATA #IMPLIED>
	<!ATTLIST join fetch (join|select) "join">
	<!ATTLIST join inverse (true|false) "false">
	<!ATTLIST join optional (true|false) "false">

<!-- A natural-id element allows declaration of the unique business key -->

<!ELEMENT natural-id ( (property|many-to-one|component|dynamic-component|any)* )>
	<!ATTLIST natural-id mutable (true|false) "false">

<!-- Declares the id type, column and generation algorithm for an entity class.
If a name attribut is given, the id is exposed to the application through the 
named property of the class. If not, the id is only exposed to the application 
via Session.getIdentifier() -->

<!ELEMENT id (meta*, column*, generator?)>
	<!ATTLIST id name CDATA #IMPLIED>
	<!ATTLIST id node CDATA #IMPLIED>
	<!ATTLIST id access CDATA #IMPLIED>
	<!ATTLIST id column CDATA #IMPLIED>
	<!ATTLIST id type CDATA #IMPLIED>
	<!ATTLIST id length CDATA #IMPLIED>
	<!ATTLIST id unsaved-value CDATA #IMPLIED>					<!-- any|none|null|undefined|0|-1|... -->

<!-- A composite key may be modelled by a java class with a property for each 
key column. The class must implement java.io.Serializable and reimplement equals() 
and hashCode(). -->

<!ELEMENT composite-id ( meta*, (key-property|key-many-to-one)+ )>
	<!ATTLIST composite-id class CDATA #IMPLIED>
	<!ATTLIST composite-id name CDATA #IMPLIED>
	<!ATTLIST composite-id node CDATA #IMPLIED>
	<!ATTLIST composite-id access CDATA #IMPLIED>
	<!ATTLIST composite-id unsaved-value (undefined|any|none) "undefined"> 

<!-- Polymorphic data requires a column holding a class discriminator value. This
value is not directly exposed to the application. -->

<!ELEMENT discriminator ((column|formula)?)>
	<!ATTLIST discriminator column CDATA #IMPLIED>				<!-- default: "class"|none -->
	<!ATTLIST discriminator formula CDATA #IMPLIED>
	<!ATTLIST discriminator type CDATA "string">
	<!ATTLIST discriminator not-null (true|false) "true">
	<!ATTLIST discriminator length CDATA #IMPLIED>
	<!ATTLIST discriminator force (true|false) "false">
	<!ATTLIST discriminator insert (true|false) "true">
	
<!-- Versioned data requires a column holding a version number. This is exposed to the
application through a property of the Java class. -->

<!ELEMENT version (meta*)>
	<!ATTLIST version name CDATA #REQUIRED>
	<!ATTLIST version node CDATA #IMPLIED>
	<!ATTLIST version access CDATA #IMPLIED>
	<!ATTLIST version column CDATA #IMPLIED>
	<!ATTLIST version type CDATA "integer">
	<!ATTLIST version unsaved-value (null|negative|undefined) "undefined">

<!ELEMENT timestamp (meta*)>
	<!ATTLIST timestamp name CDATA #REQUIRED>
	<!ATTLIST timestamp node CDATA #IMPLIED>
	<!ATTLIST timestamp column CDATA #IMPLIED>
	<!ATTLIST timestamp access CDATA #IMPLIED>
	<!ATTLIST timestamp unsaved-value (null|undefined) "null">


<!--
	Subclass declarations are nested beneath the root class declaration to achieve
	polymorphic persistence with the table-per-hierarchy mapping strategy.

	See the note on the class element regarding <pojo/> vs. @name usage...
-->
<!ELEMENT subclass (
 	meta*,
	synchronize*,
	(property|many-to-one|one-to-one|component|dynamic-component|any|map|set|list|bag|idbag|array|primitive-array|query-list)*,
	join*, 
	subclass*,
	loader?,sql-insert?,sql-update?,sql-delete?,
	(query|sql-query)*
)>
	<!ATTLIST subclass entity-name CDATA #IMPLIED>
	<!ATTLIST subclass name CDATA #IMPLIED>
	<!ATTLIST subclass proxy CDATA #IMPLIED>							<!-- default: no proxy interface -->
	<!ATTLIST subclass discriminator-value CDATA #IMPLIED>				<!-- default: unqualified class name | none -->
	<!ATTLIST subclass dynamic-update (true|false) "false">
	<!ATTLIST subclass dynamic-insert (true|false) "false">
	<!ATTLIST subclass select-before-update (true|false) "false">
	<!ATTLIST subclass extends CDATA #IMPLIED>							<!-- default: empty when a toplevel, otherwise the nearest class definition -->
	<!ATTLIST subclass lazy (true|false) #IMPLIED>
	<!ATTLIST subclass abstract (true|false) "false">
	<!ATTLIST subclass persister CDATA #IMPLIED>
	<!ATTLIST subclass batch-size CDATA #IMPLIED>
	<!ATTLIST subclass node CDATA #IMPLIED>

<!--
	Joined subclasses are used for the normalized table-per-subclass mapping strategy

	See the note on the class element regarding <pojo/> vs. @name usage...
-->
<!ELEMENT joined-subclass (
	meta*,
	subselect?,
	synchronize*,
	comment?,
	key,
	(property|many-to-one|one-to-one|component|dynamic-component|any|map|set|list|bag|idbag|array|primitive-array|query-list)*, 
	joined-subclass*,
	loader?,sql-insert?,sql-update?,sql-delete?,
	(query|sql-query)*
)>
	<!ATTLIST joined-subclass entity-name CDATA #IMPLIED>
	<!ATTLIST joined-subclass name CDATA #IMPLIED>
	<!ATTLIST joined-subclass proxy CDATA #IMPLIED>				 		<!-- default: no proxy interface -->
	<!ATTLIST joined-subclass table CDATA #IMPLIED>				 		<!-- default: unqualified class name -->
	<!ATTLIST joined-subclass schema CDATA #IMPLIED>
	<!ATTLIST joined-subclass catalog CDATA #IMPLIED>
	<!ATTLIST joined-subclass subselect CDATA #IMPLIED>
	<!ATTLIST joined-subclass dynamic-update (true|false) "false">
	<!ATTLIST joined-subclass dynamic-insert (true|false) "false">
	<!ATTLIST joined-subclass select-before-update (true|false) "false">
	<!ATTLIST joined-subclass extends CDATA #IMPLIED>			 		<!-- default: none when toplevel, otherwise the nearest class definition -->
	<!ATTLIST joined-subclass lazy (true|false) #IMPLIED>
	<!ATTLIST joined-subclass abstract (true|false) "false">
	<!ATTLIST joined-subclass persister CDATA #IMPLIED>
	<!ATTLIST joined-subclass check CDATA #IMPLIED>				 		<!-- default: none -->
	<!ATTLIST joined-subclass batch-size CDATA #IMPLIED>
	<!ATTLIST joined-subclass node CDATA #IMPLIED>

<!--
	Union subclasses are used for the table-per-concrete-class mapping strategy

	See the note on the class element regarding <pojo/> vs. @name usage...
-->
<!ELEMENT union-subclass (
 	meta*,
	subselect?,
	synchronize*,
	comment?,
	(property|many-to-one|one-to-one|component|dynamic-component|any|map|set|list|bag|idbag|array|primitive-array|query-list)*,
	union-subclass*,
	loader?,sql-insert?,sql-update?,sql-delete?,
	(query|sql-query)*
)>
	<!ATTLIST union-subclass entity-name CDATA #IMPLIED>
	<!ATTLIST union-subclass name CDATA #IMPLIED>
	<!ATTLIST union-subclass proxy CDATA #IMPLIED>						<!-- default: no proxy interface -->
	<!ATTLIST union-subclass table CDATA #IMPLIED>						<!-- default: unqualified class name -->
	<!ATTLIST union-subclass schema CDATA #IMPLIED>
	<!ATTLIST union-subclass catalog CDATA #IMPLIED>
	<!ATTLIST union-subclass subselect CDATA #IMPLIED>
	<!ATTLIST union-subclass dynamic-update (true|false) "false">
	<!ATTLIST union-subclass dynamic-insert (true|false) "false">
	<!ATTLIST union-subclass select-before-update (true|false) "false">
	<!ATTLIST union-subclass extends CDATA #IMPLIED>					<!-- default: none when toplevel, otherwise the nearest class definition -->
	<!ATTLIST union-subclass lazy (true|false) #IMPLIED>
	<!ATTLIST union-subclass abstract (true|false) "false">
	<!ATTLIST union-subclass persister CDATA #IMPLIED>
	<!ATTLIST union-subclass check CDATA #IMPLIED>						<!-- default: none -->
	<!ATTLIST union-subclass batch-size CDATA #IMPLIED>
	<!ATTLIST union-subclass node CDATA #IMPLIED>

<!-- Property of an entity class or component, component-element, composite-id, etc. 
JavaBeans style properties are mapped to table columns. -->

<!ELEMENT property (meta*,(column|formula)*,type?)>
	<!ATTLIST property name CDATA #REQUIRED>
	<!ATTLIST property node CDATA #IMPLIED>
	<!ATTLIST property access CDATA #IMPLIED>
	<!ATTLIST property type CDATA #IMPLIED>
	<!ATTLIST property column CDATA #IMPLIED>
	<!ATTLIST property length CDATA #IMPLIED>
	<!ATTLIST property precision CDATA #IMPLIED>
	<!ATTLIST property scale CDATA #IMPLIED>
	<!ATTLIST property not-null (true|false) #IMPLIED>
	<!ATTLIST property unique (true|false) "false">
	<!ATTLIST property unique-key CDATA #IMPLIED>
	<!ATTLIST property index CDATA #IMPLIED>				<!-- include the columns spanned by this property in an index -->
	<!ATTLIST property update (true|false) "true">
	<!ATTLIST property insert (true|false) "true">
	<!ATTLIST property optimistic-lock (true|false) "true">	<!-- only supported for properties of a class (not component) -->
	<!ATTLIST property formula CDATA #IMPLIED>
	<!ATTLIST property lazy (true|false) "false">

<!-- Declares the type of the containing property (overrides an eventually existing type
attribute of the property). May contain param elements to customize a ParametrizableType. -->
<!ELEMENT type (param*)>
	<!ATTLIST type name CDATA #REQUIRED>
	
<!-- Declares an association between two entities (Or from a component, component element,
etc. to an entity). -->

<!ELEMENT many-to-one (meta*,(column|formula)*)>
	<!ATTLIST many-to-one name CDATA #REQUIRED>
	<!ATTLIST many-to-one access CDATA #IMPLIED>
	<!ATTLIST many-to-one class CDATA #IMPLIED>
	<!ATTLIST many-to-one entity-name CDATA #IMPLIED>
	<!ATTLIST many-to-one column CDATA #IMPLIED>
	<!ATTLIST many-to-one not-null (true|false) #IMPLIED>
	<!ATTLIST many-to-one unique (true|false) "false">
	<!ATTLIST many-to-one unique-key CDATA #IMPLIED>
	<!ATTLIST many-to-one index CDATA #IMPLIED>
	<!ATTLIST many-to-one cascade CDATA #IMPLIED>
	<!ATTLIST many-to-one outer-join (true|false|auto) #IMPLIED>
	<!ATTLIST many-to-one fetch (join|select) #IMPLIED>
	<!ATTLIST many-to-one update (true|false) "true">
	<!ATTLIST many-to-one insert (true|false) "true">
	<!ATTLIST many-to-one optimistic-lock (true|false) "true">	<!-- only supported for properties of a class (not component) -->
	<!ATTLIST many-to-one foreign-key CDATA #IMPLIED>
	<!ATTLIST many-to-one property-ref CDATA #IMPLIED>
	<!ATTLIST many-to-one formula CDATA #IMPLIED>
	<!ATTLIST many-to-one lazy (true|false|proxy) #IMPLIED>
	<!ATTLIST many-to-one not-found (exception|ignore) "exception">
	<!ATTLIST many-to-one node CDATA #IMPLIED>
	<!ATTLIST many-to-one embed-xml (true|false) "true">
	
<!-- Declares a one-to-one association between two entities (Or from a component, 
component element, etc. to an entity). -->

<!ELEMENT one-to-one (meta*|formula*)>
	<!ATTLIST one-to-one name CDATA #REQUIRED>
	<!ATTLIST one-to-one formula CDATA #IMPLIED>
	<!ATTLIST one-to-one access CDATA #IMPLIED>
	<!ATTLIST one-to-one class CDATA #IMPLIED>
	<!ATTLIST one-to-one entity-name CDATA #IMPLIED>
	<!ATTLIST one-to-one cascade CDATA #IMPLIED>
	<!ATTLIST one-to-one outer-join (true|false|auto) #IMPLIED>
	<!ATTLIST one-to-one fetch (join|select) #IMPLIED>
	<!ATTLIST one-to-one constrained (true|false) "false">
	<!ATTLIST one-to-one foreign-key CDATA #IMPLIED>
	<!ATTLIST one-to-one property-ref CDATA #IMPLIED>
	<!ATTLIST one-to-one lazy (true|false|proxy) #IMPLIED>
	<!ATTLIST one-to-one node CDATA #IMPLIED>
	<!ATTLIST one-to-one embed-xml (true|false) "true">
	
<!-- A property embedded in a composite identifier or map index (always not-null). -->

<!ELEMENT key-property (meta*,column*)>
	<!ATTLIST key-property name CDATA #REQUIRED>
	<!ATTLIST key-property access CDATA #IMPLIED>
	<!ATTLIST key-property type CDATA #IMPLIED>
	<!ATTLIST key-property column CDATA #IMPLIED>
	<!ATTLIST key-property length CDATA #IMPLIED>
	<!ATTLIST key-property node CDATA #IMPLIED>

<!-- A many-to-one association embedded in a composite identifier or map index 
(always not-null, never cascade). -->

<!ELEMENT key-many-to-one (meta*,column*)>
	<!ATTLIST key-many-to-one name CDATA #REQUIRED>
	<!ATTLIST key-many-to-one access CDATA #IMPLIED>
	<!ATTLIST key-many-to-one class CDATA #IMPLIED>
	<!ATTLIST key-many-to-one entity-name CDATA #IMPLIED>
	<!ATTLIST key-many-to-one column CDATA #IMPLIED>
	<!ATTLIST key-many-to-one foreign-key CDATA #IMPLIED>
	<!ATTLIST key-many-to-one lazy (false|proxy) #IMPLIED>

<!-- An "any" association is a polymorphic association to any table with
the given identifier type. The first listed column is a VARCHAR column 
holding the name of the class (for that row). -->

<!ELEMENT any (meta*,meta-value*,column,column+)>
	<!ATTLIST any id-type CDATA #REQUIRED>
	<!ATTLIST any meta-type CDATA #IMPLIED>			 	<!--- default: Hibernate.STRING -->
	<!ATTLIST any name CDATA #REQUIRED>
	<!ATTLIST any access CDATA #IMPLIED>
	<!ATTLIST any insert (true|false) "true">
	<!ATTLIST any update (true|false) "true">
	<!ATTLIST any cascade CDATA #IMPLIED>
	<!ATTLIST any index CDATA #IMPLIED>					<!-- include the columns spanned by this association in an index -->
	<!ATTLIST any optimistic-lock (true|false) "true">	<!-- only supported for properties of a class (not component) -->
	<!ATTLIST any lazy (true|false) "false">
	<!ATTLIST any node CDATA #IMPLIED>
	
<!ELEMENT meta-value EMPTY>
	<!ATTLIST meta-value value CDATA #REQUIRED>
	<!ATTLIST meta-value class CDATA #REQUIRED>

<!-- A component is a user-defined class, persisted along with its containing entity
to the table of the entity class. JavaBeans style properties of the component are
mapped to columns of the table of the containing entity. A null component reference
is mapped to null values in all columns and vice versa. Components do not support
shared reference semantics. -->

<!ELEMENT component (
	meta*,
	parent?,
	(property|many-to-one|one-to-one|component|dynamic-component|any|map|set|list|bag|array|primitive-array)*
)>
	<!ATTLIST component class CDATA #IMPLIED>
	<!ATTLIST component name CDATA #REQUIRED>
	<!ATTLIST component access CDATA #IMPLIED>
	<!ATTLIST component unique (true|false) "false">
	<!ATTLIST component update (true|false) "true">
	<!ATTLIST component insert (true|false) "true">
	<!ATTLIST component lazy (true|false) "false">
	<!ATTLIST component optimistic-lock (true|false) "true">
	<!ATTLIST component node CDATA #IMPLIED>
	
<!-- A dynamic-component maps columns of the database entity to a java.util.Map 
at the Java level -->

<!ELEMENT dynamic-component (
	(property|many-to-one|one-to-one|component|dynamic-component|any|map|set|list|bag|array|primitive-array)*
)>
	<!ATTLIST dynamic-component name CDATA #REQUIRED>
	<!ATTLIST dynamic-component access CDATA #IMPLIED>
	<!ATTLIST dynamic-component unique (true|false) "false">
	<!ATTLIST dynamic-component update (true|false) "true">
	<!ATTLIST dynamic-component insert (true|false) "true">
	<!ATTLIST dynamic-component optimistic-lock (true|false) "true">
	<!ATTLIST dynamic-component node CDATA #IMPLIED>

<!-- properties declares that the contained properties form an alternate key. The name
attribute allows an alternate key to be used as the target of a property-ref. -->

<!ELEMENT properties (
	(property|many-to-one|component|dynamic-component)*
)>
	<!ATTLIST properties name CDATA #REQUIRED>
	<!ATTLIST properties unique (true|false) "false">
	<!ATTLIST properties insert (true|false) "true">
	<!ATTLIST properties update (true|false) "true">
	<!ATTLIST properties optimistic-lock (true|false) "true">
	<!ATTLIST properties node CDATA #IMPLIED>
	
<!-- The parent element maps a property of the component class as a pointer back to
the owning entity. -->

<!ELEMENT parent EMPTY>
	<!ATTLIST parent name CDATA #REQUIRED>

<!-- Collection declarations nested inside a class declaration indicate a foreign key 
relationship from the collection table to the enclosing class. -->

<!ELEMENT map (
	meta*,
	subselect?,
	cache?,
	synchronize*,
	comment?,
	key, 
	(map-key|composite-map-key|map-key-many-to-many|index|composite-index|index-many-to-many|index-many-to-any), 
	(element|one-to-many|many-to-many|composite-element|many-to-any),
	loader?,sql-insert?,sql-update?,sql-delete?,sql-delete-all?,
	filter*
)>
	<!ATTLIST map name CDATA #REQUIRED>
	<!ATTLIST map access CDATA #IMPLIED>
	<!ATTLIST map table CDATA #IMPLIED>																<!-- default: name -->
	<!ATTLIST map schema CDATA #IMPLIED>															<!-- default: none -->
	<!ATTLIST map subselect CDATA #IMPLIED>
	<!ATTLIST map catalog CDATA #IMPLIED>															<!-- default: none -->
	<!ATTLIST map lazy (true|false) #IMPLIED>
	<!ATTLIST map inverse (true|false) "false">
	<!ATTLIST map sort CDATA "unsorted">														 	<!-- unsorted|natural|"comparator class", default: unsorted -->
	<!ATTLIST map cascade CDATA #IMPLIED>
	<!ATTLIST map order-by CDATA #IMPLIED>													 		<!-- default: none -->
	<!ATTLIST map where CDATA #IMPLIED>																<!-- default: none -->
	<!ATTLIST map batch-size CDATA #IMPLIED>
	<!ATTLIST map outer-join (true|false|auto) #IMPLIED>
	<!ATTLIST map fetch (join|select|subselect) #IMPLIED>
	<!ATTLIST map check CDATA #IMPLIED>																<!-- default: none -->	
	<!ATTLIST map persister CDATA #IMPLIED>														
	<!ATTLIST map collection-type CDATA #IMPLIED>	
	<!ATTLIST map optimistic-lock (true|false) "true">		<!-- only supported for properties of a class (not component) -->
	<!ATTLIST map node CDATA #IMPLIED>
	<!ATTLIST map embed-xml (true|false) "true">
	
<!ELEMENT set (
	meta*,
	subselect?,
	cache?,
	synchronize*,
	comment?,
	key, 
	(element|one-to-many|many-to-many|composite-element|many-to-any),
	loader?,sql-insert?,sql-update?,sql-delete?,sql-delete-all?,
	filter*
)>
	<!ATTLIST set name CDATA #REQUIRED>
	<!ATTLIST set access CDATA #IMPLIED>
	<!ATTLIST set table CDATA #IMPLIED>																<!-- default: name -->
	<!ATTLIST set schema CDATA #IMPLIED>															<!-- default: none -->
	<!ATTLIST set catalog CDATA #IMPLIED>															<!-- default: none -->
	<!ATTLIST set subselect CDATA #IMPLIED>
	<!ATTLIST set lazy (true|false) #IMPLIED>
	<!ATTLIST set sort CDATA "unsorted">														 	<!-- unsorted|natural|"comparator class" -->
	<!ATTLIST set inverse (true|false) "false">
	<!ATTLIST set cascade CDATA #IMPLIED>
	<!ATTLIST set order-by CDATA #IMPLIED>													 		<!-- default: none -->
	<!ATTLIST set where CDATA #IMPLIED>																<!-- default: none -->
	<!ATTLIST set batch-size CDATA #IMPLIED>
	<!ATTLIST set outer-join (true|false|auto) #IMPLIED>
	<!ATTLIST set fetch (join|select|subselect) #IMPLIED>
	<!ATTLIST set persister CDATA #IMPLIED>	
	<!ATTLIST set collection-type CDATA #IMPLIED>														
	<!ATTLIST set check CDATA #IMPLIED>																<!-- default: none -->
	<!ATTLIST set optimistic-lock (true|false) "true">		<!-- only supported for properties of a class (not component) -->
	<!ATTLIST set node CDATA #IMPLIED>
	<!ATTLIST set embed-xml (true|false) "true">

<!ELEMENT bag (
	meta*,
	subselect?,
	cache?,
	synchronize*,
	comment?,
	key, 
	(element|one-to-many|many-to-many|composite-element|many-to-any),
	loader?,sql-insert?,sql-update?,sql-delete?,sql-delete-all?,
	filter*
)>
	<!ATTLIST bag name CDATA #REQUIRED>
	<!ATTLIST bag access CDATA #IMPLIED>
	<!ATTLIST bag table CDATA #IMPLIED>																<!-- default: name -->
	<!ATTLIST bag schema CDATA #IMPLIED>															<!-- default: none -->
	<!ATTLIST bag catalog CDATA #IMPLIED>															<!-- default: none -->
	<!ATTLIST bag subselect CDATA #IMPLIED>
	<!ATTLIST bag lazy (true|false) #IMPLIED>
	<!ATTLIST bag inverse (true|false) "false">
	<!ATTLIST bag cascade CDATA #IMPLIED>
	<!ATTLIST bag order-by CDATA #IMPLIED>													 		<!-- default: none -->
	<!ATTLIST bag where CDATA #IMPLIED>																<!-- default: none -->
	<!ATTLIST bag batch-size CDATA #IMPLIED>
	<!ATTLIST bag outer-join (true|false|auto) #IMPLIED>
	<!ATTLIST bag fetch (join|select|subselect) #IMPLIED>
	<!ATTLIST bag persister CDATA #IMPLIED>															
	<!ATTLIST bag collection-type CDATA #IMPLIED>	
	<!ATTLIST bag check CDATA #IMPLIED>																<!-- default: none -->
	<!ATTLIST bag optimistic-lock (true|false) "true">		<!-- only supported for properties of a class (not component) -->
	<!ATTLIST bag node CDATA #IMPLIED>
	<!ATTLIST bag embed-xml (true|false) "true">

<!ELEMENT idbag (
	meta*,
	subselect?,
	cache?,
	synchronize*,
	comment?,
	collection-id,
	key, 
	(element|many-to-many|composite-element|many-to-any),
	loader?,sql-insert?,sql-update?,sql-delete?,sql-delete-all?,
	filter*
)>
	<!ATTLIST idbag name CDATA #REQUIRED>
	<!ATTLIST idbag access CDATA #IMPLIED>
	<!ATTLIST idbag table CDATA #IMPLIED>															<!-- default: name -->
	<!ATTLIST idbag schema CDATA #IMPLIED>														 	<!-- default: none -->
	<!ATTLIST idbag catalog CDATA #IMPLIED>															<!-- default: none -->
	<!ATTLIST idbag subselect CDATA #IMPLIED>
	<!ATTLIST idbag lazy (true|false) #IMPLIED>
	<!ATTLIST idbag cascade CDATA #IMPLIED>
	<!ATTLIST idbag order-by CDATA #IMPLIED>													 	<!-- default: none -->
	<!ATTLIST idbag where CDATA #IMPLIED>															<!-- default: none -->
	<!ATTLIST idbag batch-size CDATA #IMPLIED>
	<!ATTLIST idbag outer-join (true|false|auto) #IMPLIED>
	<!ATTLIST idbag fetch (join|select|subselect) #IMPLIED>
	<!ATTLIST idbag persister CDATA #IMPLIED>															
	<!ATTLIST idbag collection-type CDATA #IMPLIED>
	<!ATTLIST idbag check CDATA #IMPLIED>															<!-- default: none -->
	<!ATTLIST idbag optimistic-lock (true|false) "true">	<!-- only supported for properties of a class (not component) -->
	<!ATTLIST idbag node CDATA #IMPLIED>
	<!ATTLIST idbag embed-xml (true|false) "true">

<!ELEMENT list (
	meta*,
	subselect?,
	cache?,
	synchronize*,
	comment?,
	key, 
	(index|list-index), 
	(element|one-to-many|many-to-many|composite-element|many-to-any),
	loader?,sql-insert?,sql-update?,sql-delete?,sql-delete-all?,
	filter*
)>
	<!ATTLIST list name CDATA #REQUIRED>
	<!ATTLIST list access CDATA #IMPLIED>
	<!ATTLIST list table CDATA #IMPLIED>														 	<!-- default: name -->
	<!ATTLIST list schema CDATA #IMPLIED>															<!-- default: none -->
	<!ATTLIST list catalog CDATA #IMPLIED>															<!-- default: none -->
	<!ATTLIST list subselect CDATA #IMPLIED>
	<!ATTLIST list lazy (true|false) #IMPLIED>
	<!ATTLIST list inverse (true|false) "false">
	<!ATTLIST list cascade CDATA #IMPLIED>
	<!ATTLIST list where CDATA #IMPLIED>														 	<!-- default: none -->
	<!ATTLIST list batch-size CDATA #IMPLIED>
	<!ATTLIST list outer-join (true|false|auto) #IMPLIED>
	<!ATTLIST list fetch (join|select|subselect) #IMPLIED>
	<!ATTLIST list persister CDATA #IMPLIED>																
	<!ATTLIST list collection-type CDATA #IMPLIED>
	<!ATTLIST list check CDATA #IMPLIED>															<!-- default: none -->
	<!ATTLIST list optimistic-lock (true|false) "true">		<!-- only supported for properties of a class (not component) -->
	<!ATTLIST list node CDATA #IMPLIED>
	<!ATTLIST list embed-xml (true|false) "true">

<!ELEMENT array (
	meta*,
	subselect?,
	cache?,
	synchronize*,
	comment?,
	key, 
	(index|list-index), 
	(element|one-to-many|many-to-many|composite-element|many-to-any),
	loader?,sql-insert?,sql-update?,sql-delete?,sql-delete-all?
)>
	<!ATTLIST array name CDATA #REQUIRED>
	<!ATTLIST array access CDATA #IMPLIED>
	<!ATTLIST array table CDATA #IMPLIED>															<!-- default: name -->
	<!ATTLIST array schema CDATA #IMPLIED>													 		<!-- default: none -->
	<!ATTLIST array catalog CDATA #IMPLIED>															<!-- default: none -->
	<!ATTLIST array subselect CDATA #IMPLIED>
	<!ATTLIST array inverse (true|false) "false">
	<!ATTLIST array element-class CDATA #IMPLIED>
	<!ATTLIST array cascade CDATA #IMPLIED>
	<!ATTLIST array where CDATA #IMPLIED>															<!-- default: none -->
	<!ATTLIST array batch-size CDATA #IMPLIED>
	<!ATTLIST array outer-join (true|false|auto) #IMPLIED>
	<!ATTLIST array fetch (join|select|subselect) #IMPLIED>
	<!ATTLIST array persister CDATA #IMPLIED>															
	<!ATTLIST array collection-type CDATA #IMPLIED>
	<!ATTLIST array check CDATA #IMPLIED>															<!-- default: none -->
	<!ATTLIST array optimistic-lock (true|false) "true">	<!-- only supported for properties of a class (not component) -->
	<!ATTLIST array node CDATA #IMPLIED>
	<!ATTLIST array embed-xml (true|false) "true">

<!ELEMENT primitive-array (
	meta*, 
	subselect?,
	cache?, 
	synchronize*,
	comment?,
	key, 
	(index|list-index), 
	element,
	loader?,sql-insert?,sql-update?,sql-delete?,sql-delete-all?
)>
	<!ATTLIST primitive-array name CDATA #REQUIRED>
	<!ATTLIST primitive-array access CDATA #IMPLIED>
	<!ATTLIST primitive-array table CDATA #IMPLIED>									<!-- default: name -->
	<!ATTLIST primitive-array schema CDATA #IMPLIED>								<!-- default: none -->
	<!ATTLIST primitive-array catalog CDATA #IMPLIED>								<!-- default: none -->
	<!ATTLIST primitive-array subselect CDATA #IMPLIED>
	<!ATTLIST primitive-array where CDATA #IMPLIED>									<!-- default: none -->
	<!ATTLIST primitive-array batch-size CDATA #IMPLIED>
	<!ATTLIST primitive-array outer-join (true|false|auto) #IMPLIED>
	<!ATTLIST primitive-array fetch (join|select|subselect) #IMPLIED>
	<!ATTLIST primitive-array persister CDATA #IMPLIED>																
	<!ATTLIST primitive-array collection-type CDATA #IMPLIED>
	<!ATTLIST primitive-array check CDATA #IMPLIED>									<!-- default: none -->
	<!ATTLIST primitive-array optimistic-lock (true|false) "true">		<!-- only supported for properties of a class (not component) -->
	<!ATTLIST primitive-array node CDATA #IMPLIED>
	<!ATTLIST primitive-array embed-xml (true|false) "true">

<!-- Declares the element type of a collection of basic type -->

<!ELEMENT element (column|formula)*>
	<!ATTLIST element column CDATA #IMPLIED>
	<!ATTLIST element node CDATA #IMPLIED>
	<!ATTLIST element formula CDATA #IMPLIED>
	<!ATTLIST element type CDATA #REQUIRED>
	<!ATTLIST element length CDATA #IMPLIED>
	<!ATTLIST element precision CDATA #IMPLIED>
	<!ATTLIST element scale CDATA #IMPLIED>
	<!ATTLIST element not-null (true|false) "false">
	<!ATTLIST element unique (true|false) "false">

<!-- One to many association. This tag declares the entity-class
element type of a collection and specifies a one-to-many relational model -->

<!ELEMENT one-to-many EMPTY>
	<!ATTLIST one-to-many class CDATA #IMPLIED>
	<!ATTLIST one-to-many not-found (exception|ignore) "exception">
	<!ATTLIST one-to-many node CDATA #IMPLIED>
	<!ATTLIST one-to-many embed-xml (true|false) "true">
	<!ATTLIST one-to-many entity-name CDATA #IMPLIED>
	<!-- No column declaration attributes required in this case. The primary
	key column of the associated class is already mapped elsewhere.-->

<!-- Many to many association. This tag declares the entity-class
element type of a collection and specifies a many-to-many relational model -->

<!ELEMENT many-to-many (meta*,(column|formula)*,filter*)>
	<!ATTLIST many-to-many class CDATA #IMPLIED>
	<!ATTLIST many-to-many node CDATA #IMPLIED>
	<!ATTLIST many-to-many embed-xml (true|false) "true">
	<!ATTLIST many-to-many entity-name CDATA #IMPLIED>
	<!ATTLIST many-to-many column CDATA #IMPLIED>
	<!ATTLIST many-to-many formula CDATA #IMPLIED>
	<!ATTLIST many-to-many not-found (exception|ignore) "exception">
	<!ATTLIST many-to-many outer-join (true|false|auto) #IMPLIED>
	<!ATTLIST many-to-many fetch (join|select) #IMPLIED>
	<!ATTLIST many-to-many lazy (false|proxy) #IMPLIED>
	<!ATTLIST many-to-many foreign-key CDATA #IMPLIED>
	<!ATTLIST many-to-many unique (true|false) "false">
	<!ATTLIST many-to-many where CDATA #IMPLIED>

<!-- A composite element allows a collection to hold instances of an arbitrary 
class, without the requirement of joining to an entity table. Composite elements
have component semantics - no shared references and ad hoc null value semantics. 
Composite elements may not hold nested collections. -->

<!ELEMENT composite-element ( 
	(meta*),
	parent?,
	(property|many-to-one|any|nested-composite-element)* 
)>
	<!ATTLIST composite-element class CDATA #REQUIRED>
	<!ATTLIST composite-element node CDATA #IMPLIED>

<!ELEMENT nested-composite-element ( 
	parent?,
	(property|many-to-one|any|nested-composite-element)* 
)>
	<!ATTLIST nested-composite-element class CDATA #REQUIRED>
	<!ATTLIST nested-composite-element name CDATA #REQUIRED>
	<!ATTLIST nested-composite-element access CDATA #IMPLIED>
	<!ATTLIST nested-composite-element node CDATA #IMPLIED>
	
<!-- Declares the column name of a foreign key. -->

<!ELEMENT key (column*)>
	<!ATTLIST key column CDATA #IMPLIED>
	<!ATTLIST key property-ref CDATA #IMPLIED>
	<!ATTLIST key foreign-key CDATA #IMPLIED>
	<!ATTLIST key on-delete (cascade|noaction) "noaction">
	<!ATTLIST key not-null (true|false) #IMPLIED>
	<!ATTLIST key update (true|false) #IMPLIED>
	<!ATTLIST key unique (true|false) #IMPLIED>
	
<!-- Declares the type and column mapping for a collection index (array or
list index, or key of a map). -->

<!ELEMENT list-index (column?)>
	<!ATTLIST list-index column CDATA #IMPLIED>
	<!ATTLIST list-index base CDATA "0">

<!ELEMENT map-key ((column|formula)*)>
	<!ATTLIST map-key column CDATA #IMPLIED>
	<!ATTLIST map-key formula CDATA #IMPLIED>
	<!ATTLIST map-key type CDATA #REQUIRED>
	<!ATTLIST map-key length CDATA #IMPLIED>
	<!ATTLIST map-key node CDATA #IMPLIED>

<!ELEMENT index (column*)>
	<!ATTLIST index column CDATA #IMPLIED>
	<!ATTLIST index type CDATA #IMPLIED>			<!-- required for maps -->
	<!ATTLIST index length CDATA #IMPLIED>

<!-- Many to many association mapped to the key of a map. ie. a map keyed
on entities. -->

<!ELEMENT map-key-many-to-many ((column|formula)*)>
	<!ATTLIST map-key-many-to-many class CDATA #IMPLIED>
	<!ATTLIST map-key-many-to-many entity-name CDATA #IMPLIED>
	<!ATTLIST map-key-many-to-many column CDATA #IMPLIED>
	<!ATTLIST map-key-many-to-many formula CDATA #IMPLIED>
	<!ATTLIST map-key-many-to-many foreign-key CDATA #IMPLIED>

<!ELEMENT index-many-to-many (column*)>
	<!ATTLIST index-many-to-many class CDATA #REQUIRED>
	<!ATTLIST index-many-to-many entity-name CDATA #IMPLIED>
	<!ATTLIST index-many-to-many column CDATA #IMPLIED>
	<!ATTLIST index-many-to-many foreign-key CDATA #IMPLIED>

<!-- Composite index of a map ie. a map keyed on components. -->

<!ELEMENT composite-map-key ( (key-property|key-many-to-one)+ )>
	<!ATTLIST composite-map-key class CDATA #REQUIRED>

<!ELEMENT composite-index ( (key-property|key-many-to-one)+ )>
	<!ATTLIST composite-index class CDATA #REQUIRED>

<!-- A "many to any" defines a polymorphic association to any table 
with the given identifier type. The first listed column is a VARCHAR column 
holding the name of the class (for that row). -->

<!ELEMENT many-to-any (meta-value*,column, column+)>
	<!ATTLIST many-to-any id-type CDATA #REQUIRED>
	<!ATTLIST many-to-any meta-type CDATA #IMPLIED>			<!--- default: Hibernate.CLASS -->

<!ELEMENT index-many-to-any (column, column+)>
	<!ATTLIST index-many-to-any id-type CDATA #REQUIRED>
	<!ATTLIST index-many-to-any meta-type CDATA #IMPLIED>	<!--- default: Hibernate.CLASS -->

<!ELEMENT collection-id (meta*, column*, generator)>
	<!ATTLIST collection-id column CDATA #REQUIRED>
	<!ATTLIST collection-id type CDATA #REQUIRED>
	<!ATTLIST collection-id length CDATA #IMPLIED>
	
<!-- Generators generate unique identifiers. The class attribute specifies a Java 
class implementing an id generation algorithm. -->

<!ELEMENT generator (param*)>
	<!ATTLIST generator class CDATA #REQUIRED>
<!ELEMENT param (#PCDATA)>
	<!ATTLIST param name CDATA #REQUIRED>

<!-- The column element is an alternative to column attributes and required for 
mapping associations to classes with composite ids. -->

<!ELEMENT column (comment?)>
	<!ATTLIST column name CDATA #REQUIRED>
	<!ATTLIST column length CDATA #IMPLIED>						<!-- default: 255 -->
	<!ATTLIST column precision CDATA #IMPLIED>
	<!ATTLIST column scale CDATA #IMPLIED>
	<!ATTLIST column not-null (true|false) #IMPLIED>		 	<!-- default: false (except for id properties) -->
	<!ATTLIST column unique (true|false) #IMPLIED>			 	<!-- default: false (except for id properties) -->
	<!ATTLIST column unique-key CDATA #IMPLIED>					<!-- default: no unique key -->
	<!ATTLIST column sql-type CDATA #IMPLIED>					<!-- override default column type for hibernate type -->
	<!ATTLIST column index CDATA #IMPLIED>
	<!ATTLIST column check CDATA #IMPLIED>						<!-- default: none -->

<!-- The formula and subselect elements allow us to map derived properties and 
entities. -->

<!ELEMENT formula (#PCDATA)>
<!ELEMENT subselect (#PCDATA)>

<!-- The cache element enables caching of an entity class. -->
<!ELEMENT cache EMPTY>
	<!ATTLIST cache usage (read-only|read-write|nonstrict-read-write|transactional) #REQUIRED>				
	<!ATTLIST cache region CDATA #IMPLIED>						<!-- default: class or collection role name -->

<!-- The comment element allows definition of a database table or column comment. -->

<!ELEMENT comment (#PCDATA)>

<!-- A mapped query-list allows a named query to be attached to a property of the 
domain model -->

<!ELEMENT query-list EMPTY>
	<!ATTLIST query-list name CDATA #REQUIRED>
	<!ATTLIST query-list query-ref CDATA #REQUIRED>

<!ELEMENT loader EMPTY>
	<!ATTLIST loader query-ref CDATA #REQUIRED>

<!-- The query element declares a named Hibernate query string -->

<!ELEMENT query (#PCDATA|representation)*>
	<!ATTLIST query name CDATA #REQUIRED>
	<!ATTLIST query flush-mode (auto|never|always) #IMPLIED>
	<!ATTLIST query cacheable (true|false) "false">
	<!ATTLIST query cache-region CDATA #IMPLIED>
	<!ATTLIST query fetch-size CDATA #IMPLIED>
	<!ATTLIST query timeout CDATA #IMPLIED>

<!ELEMENT representation EMPTY>
	<!ATTLIST representation name (pojo|dom4j|dynamic-map) #REQUIRED>

<!-- The sql-query element declares a named SQL query string -->
<!ELEMENT sql-query (#PCDATA|return-scalar|return|return-join|load-collection|synchronize)*>
	<!ATTLIST sql-query name CDATA #REQUIRED>
	<!ATTLIST sql-query flush-mode (auto|never|always) #IMPLIED>
	<!ATTLIST sql-query cacheable (true|false) "false">
	<!ATTLIST sql-query cache-region CDATA #IMPLIED>
	<!ATTLIST sql-query fetch-size CDATA #IMPLIED>
	<!ATTLIST sql-query timeout CDATA #IMPLIED>
	<!ATTLIST sql-query callable (true|false) "false"> 

<!--
	Defines a return component for a sql-query.  Alias refers to the alias
	used in the actual sql query; lock-mode specifies the locking to be applied
	when the query is executed.  The class, collection, and role attributes are mutually exclusive;
	class refers to the class name of a "root entity" in the object result; collection refers
	to a collection of a given class and is used to define custom sql to load that owned collection
	and takes the form "ClassName.propertyName"; role refers to the property path for an eager fetch
	and takes the form "owningAlias.propertyName"
-->
<!ELEMENT return (return-discriminator?,return-property)*>
	<!ATTLIST return alias CDATA #IMPLIED>
	<!ATTLIST return entity-name CDATA #IMPLIED>
	<!ATTLIST return class CDATA #IMPLIED>
	<!ATTLIST return lock-mode (none|read|upgrade|upgrade-nowait|write) "read">	

<!ELEMENT return-property (return-column*)> 
	<!ATTLIST return-property name CDATA #REQUIRED>
	<!ATTLIST return-property column CDATA #IMPLIED>

<!ELEMENT return-column EMPTY> 
	<!ATTLIST return-column name CDATA #REQUIRED>

<!ELEMENT return-discriminator EMPTY> 
	<!ATTLIST return-discriminator column CDATA #REQUIRED>
	
<!ELEMENT return-join EMPTY> <!-- TODO: (return-property)* -->
	<!ATTLIST return-join alias CDATA #REQUIRED>
	<!ATTLIST return-join property CDATA #REQUIRED>
	<!ATTLIST return-join lock-mode (none|read|upgrade|upgrade-nowait|write) "read">

<!ELEMENT load-collection EMPTY> <!-- TODO: (return-property)* -->
	<!ATTLIST load-collection alias CDATA #REQUIRED>
	<!ATTLIST load-collection role CDATA #REQUIRED>
	<!ATTLIST load-collection lock-mode (none|read|upgrade|upgrade-nowait|write) "read">

<!ELEMENT return-scalar EMPTY>
	<!ATTLIST return-scalar column CDATA #REQUIRED>
	<!ATTLIST return-scalar type CDATA #REQUIRED>

<!ELEMENT synchronize EMPTY>
	<!ATTLIST synchronize table CDATA #REQUIRED>
	
<!-- custom sql operations -->
<!ELEMENT sql-insert (#PCDATA)>
	<!ATTLIST sql-insert callable (true|false) "false">	

<!ELEMENT sql-update (#PCDATA)>
	<!ATTLIST sql-update callable (true|false) "false">	

<!ELEMENT sql-delete (#PCDATA)>
	<!ATTLIST sql-delete callable (true|false) "false">	

<!ELEMENT sql-delete-all (#PCDATA)>
	<!ATTLIST sql-delete-all callable (true|false) "false">