<!-- *********************************************************************** -->
<!-- DirXML DTD                                                              -->
<!-- Novell Inc.                                                             -->
<!-- 1800 South Novell Place                                                 -->
<!-- Provo, UT 84606-6194                                                    -->
<!-- Version=2.0                                                             -->
<!-- Copyright 1999-2005, Novell, Inc.  All rights reserved                  -->
<!-- *********************************************************************** -->
<!ENTITY % Assoc-State "not-associated | associated | disabled | migrate 
						| pending	| manual">
<!ENTITY % Search-Scope "entry | subordinates | subtree">
<!ENTITY % Status-Level "fatal | error | warning | success | retry">
<!ENTITY % Attr-type "string | teleNumber | int | state | counter | dn 
						| interval | octet | time | structured">
<!ENTITY % Read-attr-type "default | xml">
<!ENTITY % Boolean "true | false">
<!ENTITY % dn-format "dot | qualified-dot | slash | qualified-slash | ldap">

<!ELEMENT nds (source?, (input | output))>
<!ATTLIST nds
	ndsversion CDATA #IMPLIED
	dtdversion CDATA #REQUIRED
>
<!ELEMENT source (product?, contact?)>
<!ELEMENT product (#PCDATA)>
<!ATTLIST product
	version CDATA #IMPLIED
	asn1id CDATA #IMPLIED
	build CDATA #IMPLIED
	instance CDATA #IMPLIED
>
<!ELEMENT contact (#PCDATA)>
<!ELEMENT input (add | modify | delete | rename | move | query | query-ex | query-schema | add-association | modify-association | remove-association | init-params | status | check-password | modify-password | check-object-password | sync | get-named-password | generated-password)*>
<!ELEMENT output (status | add-association | modify-association | remove-association | instance | schema-def | init-params | password | query-token)*>
<!ELEMENT sync (association?, operation-data?)>
<!ATTLIST sync
	src-dn CDATA #IMPLIED
	qualified-src-dn CDATA #IMPLIED
	src-entry-id CDATA #IMPLIED
	class-name CDATA #IMPLIED
	class-id CDATA #IMPLIED
	timestamp CDATA #IMPLIED
	from-move (%Boolean;) "false"
>

<!ELEMENT value (#PCDATA | component)*>
<!ATTLIST value
	type (%Attr-type;) #IMPLIED
	association-ref CDATA #IMPLIED
	naming (%Boolean;) "false"
	timestamp CDATA #IMPLIED
>
<!ELEMENT component (#PCDATA)>
<!ATTLIST component
	name CDATA #REQUIRED
	association-ref CDATA #IMPLIED
>
<!ELEMENT association (#PCDATA)>
<!ATTLIST association
	state (%Assoc-State;) #IMPLIED
>
<!ELEMENT parent (association?)>
<!ATTLIST parent
	src-dn CDATA #IMPLIED
	qualified-src-dn CDATA #IMPLIED
	src-entry-id CDATA #IMPLIED
	dest-dn CDATA #IMPLIED
	dest-entry-id CDATA #IMPLIED
>
<!ELEMENT query (association?, (search-class | search-attr | read-attr | read-parent)*, operation-data?)>
<!ATTLIST query
	dest-dn CDATA #IMPLIED
	dest-entry-id CDATA #IMPLIED
	class-name CDATA #IMPLIED
	scope (%Search-Scope;) "subtree"
	event-id CDATA #IMPLIED
>
<!ELEMENT query-ex (association?, query-token?, (search-class | search-attr | read-attr | read-parent)*, operation-data?)>
<!ATTLIST query-ex
	dest-dn CDATA #IMPLIED
	dest-entry-id CDATA #IMPLIED
	class-name CDATA #IMPLIED
	scope (%Search-Scope;) "subtree"
	event-id CDATA #IMPLIED
	max-result-count CDATA #IMPLIED
	cancel (%Boolean;) #IMPLIED
>
<!ELEMENT query-schema (operation-data?) >
<!ATTLIST query-schema
	event-id CDATA #IMPLIED
>
<!ELEMENT search-class EMPTY>
<!ATTLIST search-class
	class-name CDATA #REQUIRED
>
<!ELEMENT search-attr (value)+>
<!ATTLIST search-attr
	attr-name CDATA #REQUIRED
>
<!ELEMENT read-attr EMPTY>
<!ATTLIST read-attr
	attr-name CDATA #IMPLIED
	type (%Read-attr-type;) "default"
>
<!ELEMENT read-parent EMPTY>
<!ELEMENT add (association?, add-attr*, password?, operation-data?)>
<!ATTLIST add
	src-dn CDATA #IMPLIED
	qualified-src-dn CDATA #IMPLIED
	src-entry-id CDATA #IMPLIED
	dest-dn CDATA #IMPLIED
	dest-entry-id CDATA #IMPLIED
	class-name CDATA #REQUIRED
	template-dn CDATA #IMPLIED
	event-id CDATA #IMPLIED
	timestamp CDATA #IMPLIED
>
<!ELEMENT query-token ANY>
<!ELEMENT add-attr (value+)>
<!ATTLIST add-attr
	attr-name CDATA #REQUIRED
	enforce-password-policy (%Boolean;) #IMPLIED
>
<!ELEMENT delete (association?, operation-data?)>
<!ATTLIST delete
	src-dn CDATA #IMPLIED
	qualified-src-dn CDATA #IMPLIED
	src-entry-id CDATA #IMPLIED
	dest-dn CDATA #IMPLIED
	dest-entry-id CDATA #IMPLIED
	class-name CDATA #IMPLIED
	event-id CDATA #IMPLIED
	timestamp CDATA #IMPLIED
>
<!ELEMENT generated-password (association?, password)>
<!ATTLIST generated-password
	src-dn CDATA #IMPLIED
	qualified-src-dn CDATA #IMPLIED
	src-entry-id CDATA #IMPLIED
	dest-dn CDATA #IMPLIED
	dest-entry-id CDATA #IMPLIED
	class-name CDATA #IMPLIED
	event-id CDATA #IMPLIED
	timestamp CDATA #IMPLIED
>
<!ELEMENT modify (association?, modify-attr+, operation-data?)>
<!ATTLIST modify
	src-dn CDATA #IMPLIED
	qualified-src-dn CDATA #IMPLIED
	src-entry-id CDATA #IMPLIED
	dest-dn CDATA #IMPLIED
	dest-entry-id CDATA #IMPLIED
	class-name CDATA #IMPLIED
	event-id CDATA #IMPLIED
	timestamp CDATA #IMPLIED
	from-merge (%Boolean;) "false"
	from-reset (%Boolean;) "false"
>
<!ELEMENT modify-attr (remove-value | remove-all-values | add-value)+>
<!ATTLIST modify-attr
	attr-name CDATA #REQUIRED
	enforce-password-policy (%Boolean;) #IMPLIED
>
<!ELEMENT remove-all-values EMPTY>
<!ELEMENT remove-value (value+)>
<!ELEMENT add-value (value+)>
<!ELEMENT modify-password (association?, old-password?, password, operation-data?)>
<!ATTLIST modify-password
	src-dn CDATA #IMPLIED
	qualified-src-dn CDATA #IMPLIED
	src-entry-id CDATA #IMPLIED
	dest-dn CDATA #IMPLIED
	dest-entry-id CDATA #IMPLIED
	class-name CDATA #IMPLIED
	event-id CDATA #IMPLIED
	timestamp CDATA #IMPLIED
	from-merge (%Boolean;) "false"
>


<!ELEMENT old-password  (#PCDATA)>

<!ELEMENT rename (association?, new-name, operation-data?)>
<!ATTLIST rename
	src-dn CDATA #IMPLIED
	qualified-src-dn CDATA #IMPLIED
	src-entry-id CDATA #IMPLIED
	dest-dn CDATA #IMPLIED
	dest-entry-id CDATA #IMPLIED
	old-src-dn CDATA #IMPLIED
	qualified-old-src-dn CDATA #IMPLIED
	remove-old-name (%Boolean;) "true"
	class-name CDATA #IMPLIED
	event-id CDATA #IMPLIED
	timestamp CDATA #IMPLIED
>
<!ELEMENT new-name (#PCDATA)>
<!ELEMENT move (association?, parent, operation-data?)>
<!ATTLIST move
	src-dn CDATA #IMPLIED
	qualified-src-dn CDATA #IMPLIED
	src-entry-id CDATA #IMPLIED
	dest-dn CDATA #IMPLIED
	dest-entry-id CDATA #IMPLIED
	old-src-dn CDATA #IMPLIED
	qualified-old-src-dn CDATA #IMPLIED
	class-name CDATA #IMPLIED
	event-id CDATA #IMPLIED
	timestamp CDATA #IMPLIED
>
<!ELEMENT instance (association?, parent?, attr*, operation-data?)>
<!ATTLIST instance
	src-dn CDATA #IMPLIED
	qualified-src-dn CDATA #IMPLIED
	src-entry-id CDATA #IMPLIED
	class-name CDATA #REQUIRED
	event-id CDATA #IMPLIED
>
<!ELEMENT attr (value*)>
<!ATTLIST attr
	attr-name CDATA #REQUIRED
>
<!ELEMENT status ANY>
<!ATTLIST status
	level (%Status-Level;) #REQUIRED
	type CDATA #IMPLIED
	event-id CDATA #IMPLIED
>
<!ELEMENT check-password (#PCDATA | operation-data)*>

<!ELEMENT check-object-password (association?, password, operation-data?)>
<!ATTLIST check-object-password
	dest-dn CDATA #IMPLIED
	dest-entry-id CDATA #IMPLIED
	event-id CDATA #IMPLIED
>

<!ELEMENT get-named-password (#PCDATA | operation-data)*>
<!ATTLIST get-named-password
	event-id CDATA #IMPLIED
>

<!ELEMENT add-association (#PCDATA | operation-data)*>
<!ATTLIST add-association
	dest-dn CDATA #REQUIRED
	dest-entry-id CDATA #IMPLIED
	event-id CDATA #IMPLIED
>
<!ELEMENT modify-association (association, association, operation-data?)>
<!ATTLIST modify-association
	event-id CDATA #IMPLIED
>
<!ELEMENT remove-association (#PCDATA | operation-data)*>
<!ATTLIST remove-association
	event-id CDATA #IMPLIED
>
<!ELEMENT init-params (authentication-info?, driver-filter?, driver-options?, subscriber-options?, publisher-options?, driver-state?, subscriber-state?, publisher-state?, operation-data?)>
<!ATTLIST init-params
	src-dn CDATA #IMPLIED
>
<!ELEMENT authentication-info (server?, user?, password?)>
<!ELEMENT server (#PCDATA)>
<!ELEMENT user (#PCDATA)>
<!ELEMENT password (#PCDATA)>
<!ELEMENT driver-filter (allow-class)*>
<!ATTLIST driver-filter
	type (publisher | subscriber) #IMPLIED
>
<!ELEMENT allow-class (allow-attr)*>
<!ATTLIST allow-class
	class-name CDATA #REQUIRED
>
<!ELEMENT allow-attr EMPTY>
<!ATTLIST allow-attr
	attr-name CDATA #REQUIRED
	is-sensitive (%Boolean;) "false"
>
<!ELEMENT driver-config (driver-options?, subscriber-options?, publisher-options?)>
<!ATTLIST driver-config
	name CDATA #IMPLIED
>
<!ELEMENT config-object (query)>
<!ATTLIST config-object
	display-name CDATA #IMPLIED
>
<!ELEMENT driver-options ANY>
<!ELEMENT subscriber-options ANY>
<!ELEMENT publisher-options ANY>
<!ELEMENT driver-state ANY>
<!ELEMENT subscriber-state ANY>
<!ELEMENT publisher-state ANY>
<!ELEMENT schema-def ((class-def)*, operation-data?)>
<!ATTLIST schema-def
	hierarchical (%Boolean;) "true"
	application-name CDATA #IMPLIED
	dn-format (%dn-format;) "slash"
	dn-delims CDATA #IMPLIED
>
<!ELEMENT class-def (attr-def)*>
<!ATTLIST class-def
	class-name CDATA #REQUIRED
	asn1id CDATA #IMPLIED
	container (%Boolean;) "false"
>
<!ELEMENT attr-def EMPTY>
<!ATTLIST attr-def
	attr-name CDATA #REQUIRED
	asn1id CDATA #IMPLIED
	type (%Attr-type;) "string"
	required (%Boolean;) "false"
	naming (%Boolean;) "false"
	multi-valued (%Boolean;) "true"
	case-sensitive (%Boolean;) "false"
	read-only (%Boolean;) "false"
>
<!ELEMENT attr-name-map (attr-name | class-name)*>
<!ELEMENT attr-name (nds-name, app-name)>
<!ATTLIST attr-name
	class-name CDATA #IMPLIED
>
<!ELEMENT class-name (nds-name, app-name)>
<!ELEMENT nds-name (#PCDATA)>
<!ELEMENT app-name (#PCDATA)>
<!ELEMENT create-rules (create-rule)*>
<!ELEMENT create-rule (match-attr*, required-attr*, template?)>
<!ATTLIST create-rule
	class-name CDATA #IMPLIED
	description CDATA #IMPLIED
>
<!ELEMENT required-attr (value)*>
<!ATTLIST required-attr
	attr-name CDATA #REQUIRED
	write-back (%Boolean;) "false"
>
<!ELEMENT match-attr (value)*>
<!ATTLIST match-attr
	attr-name CDATA #REQUIRED
>
<!ELEMENT template EMPTY>
<!ATTLIST template
	template-dn CDATA #REQUIRED
>
<!ELEMENT matching-rules (matching-rule*)>
<!ELEMENT matching-rule (match-class*, match-path?, match-attr*)>
<!ATTLIST matching-rule
	description CDATA #IMPLIED
>
<!ELEMENT match-class EMPTY>
<!ATTLIST match-class
	class-name CDATA #REQUIRED
>
<!ELEMENT match-path EMPTY>
<!ATTLIST match-path
	prefix CDATA #REQUIRED
>
<!ELEMENT placement-rules (placement-rule*)>
<!ATTLIST placement-rules
	src-dn-format (%dn-format;) "slash"
	dest-dn-format (%dn-format;) "slash"
	src-dn-delims CDATA #IMPLIED
	dest-dn-delims CDATA #IMPLIED
>
<!ELEMENT placement-rule (match-class*, match-path*, match-attr*, placement)>
<!ATTLIST placement-rule
	description CDATA #IMPLIED
>
<!ELEMENT placement (#PCDATA | copy-name | copy-attr | copy-path | copy-path-suffix)*>
<!ELEMENT copy-attr EMPTY>
<!ATTLIST copy-attr
	attr-name CDATA #REQUIRED
>
<!ELEMENT copy-name EMPTY>
<!ELEMENT copy-path EMPTY>
<!ELEMENT copy-path-suffix EMPTY>

<!ELEMENT operation-data ANY>
