<!-- 
  CMIF Document Type Definition. 
  Refer to this document type with the public identifier:
  "-//CWI//DTD CMIF//EN"

  Authors: Jacco van Ossenbruggen <jrvosse@cs.vu.nl>
           Lynda Hardman          <lynda@cwi.nl>

  Version: 0.04 - Thu Aug 17 16:44:43 MET DST 1995
-->

<!-- The following processing instructions declare the required HyTime options -->
<?HyTime VERSION "ISO/IEC 10744:1992" HYQCNT=32 >
<?HyTime MODULE base>
<?HyTime MODULE measure dimref markfun>
<?HyTime MODULE locs>
<?HyTime MODULE links>
<?HyTime MODULE sched manyaxes splitfcs> 
<?HyTime MODULE rend project profun scaleref>

<!ENTITY % graphics	PUBLIC "+//ISBN 0-7923-9432-1::Graphic Notation//TEXT Graphical Notation Names//EN">
<!ENTITY % measuredefs	PUBLIC "+//ISO/IEC 10744:1992//TEXT Useful Measurement Domain Definitions//EN">
<!ENTITY % cwinot	PUBLIC "-//CWI//TEXT  Private Notations//EN">
%graphics;
%measuredefs
%cwinot;

<!ENTITY % AtomicNode    "Immediate | External" >
<!ENTITY % CompositeNode  "Serial | Parallel | Choice " >
<!ENTITY % Node          "%AtomicNode; | %CompositeNode; " >

<!ELEMENT HyFunk	- O (#PCDATA) >
<!ATTLIST HyFunk
	HyTime		NAME	#FIXED		markfun
	notation	NAME	#FIXED		HyFunk
	delims		CDATA	#IMPLIED
	fn		NAME	#IMPLIED
	usefn		NAME	#CONREF
	args		CDATA	#IMPLIED
>

<!ELEMENT Cmif  	
			- O (Channel+, Timeaxis, Presentation, Extentdefs, Hyperlinks, (%Node;)) 
>
<!ATTLIST Cmif
	HyTime		NAME	#FIXED		HyDoc
	id		ID	#IMPLIED	-- Default: none --
	boslevel	NUMBER	#IMPLIED	-- Default: application BOS --
	unmspace	(unified|separate)	separate

	CMIF		NAME	#FIXED		CmifDoc
	version		CDATA	#IMPLIED 	-- Document release version --
>

<!ELEMENT Presentation	- - (Evsched)+ >
<!ATTLIST Presentation	-- Finite Coordinate Space --
	HyTime		NAME	#FIXED		fcs
	id		ID	#IMPLIED	-- Default: none --
	fcsmdu		CDATA	#FIXED		"SIsecond 1 1000"
	axisdefs	NAMES	#FIXED		Timeaxis
>

<!ELEMENT Hyperlinks - - (forwardlink|backwardlink|bidirectlink)*>
<!ENTITY % linkattrs  -- common attributes for links --
        'HyTime		NAME	#FIXED		ilink
	linkends	IDREFS	#REQUIRED	-- both src and dest required --
	endterms	IDREFS  #REQUIRED	-- contexts required --
	id		ID	#IMPLIED
        -- CMIF: -- 
	transition	(replace|continue) replace -- replace is default --'
>

<!ELEMENT Forwardlink - O EMPTY >
<!ATTLIST Forwardlink
	%linkattrs
	anchrole	CDATA	#FIXED		"source destination"
	CMIF		NAME	#fixed		ForwardHyperlink
	
>
<!ELEMENT BackwardLink - O EMPTY >
<!ATTLIST BackwardLink
	%linkattrs
	anchrole	CDATA	#FIXED		"destination source"
	CMIF		NAME	#fixed		BackwardHyperlink
>
<!ELEMENT BirectLink - O EMPTY >
<!ATTLIST BirectLink
	%linkattrs
	anchrole	CDATA	#FIXED		"anchor1 anchor2"
	CMIF		NAME	#fixed		TwoWayHyperlink
>

<!ELEMENT TimeAxis - O (HyFunk*)>
<!ATTLIST TimeAxis
	HyTime		NAME	#FIXED		axis
	id		ID	#IMPLIED	-- Default: none --
	axismeas	CDATA	#FIXED		SIsecond
	axisdim		CDATA	#FIXED		4294967295 -- (2**32 -1) quite long  --
>

<!ELEMENT Evsched - O (NodeEvent*) >
<!ATTLIST Evsched
	HyTime		NAME	#FIXED		evsched
	id		ID	#IMPLIED	-- Default: none --
	channelref	IDREF	#REQUIRED	
>	
<!ELEMENT Channel	- O EMPTY >
<!ATTLIST Channel
	id		ID	#REQUIRED	-- because nodes will refer to channels --

	CMIF		NAME	#FIXED		channel
	type		CDATA	#REQUIRED	-- cmif type attribute -- 
	name		CDATA	#IMPLIED	-- cmif name attribute --
	comment		CDATA	#IMPLIED	-- cmif comment attribute --
	basechannel IDREF	"undefined"	-- cmif base attribute --
>

<!ELEMENT NodeEvent	- O (Presentation*) >
<!ATTLIST NodeEvent
	HyTime		NAME	#FIXED		event
	id		ID	#IMPLIED	-- Default: None --
	exspec		IDREFS	#REQUIRED

	noderef		IDREF	#IMPLIED 	-- associated node --
>
	


<!-- Composite Nodes: Serial, Parallel and Choice -->
<!ELEMENT Serial - - (%Node;)* >
<!ELEMENT Parallel - - (%Node;)* >
<!ELEMENT Choice - - (%Node;)* >
<!ATTLIST (%CompositeNode;)
	HyTime		NAME	#FIXED		"HyBrid"
	CMIF		NAME	#FIXED		"CompositeNode"
	Id			ID		#IMPLIED  
	Name		CDATA	#IMPLIED
	Comment		CDATA	#IMPLIED	-- cmif comment attribute --
>
<!-- Atomic Nodes: External and Immediate (channel required!) -->
<!ELEMENT External - O EMPTY>
<!ATTLIST External
	HyTime		NAME	#FIXED		"HyBrid"
	CMIF		NAME	#FIXED		"ExternalNode"
	Id			ID		#IMPLIED  
	Entity		ENTITY	#REQUIRED	-- External data --
	Name		CDATA	#IMPLIED	-- cmif name attributea --
	Comment		CDATA	#IMPLIED	-- cmif comment attribute --
>
<!ELEMENT Immediate - - (#PCDATA) +(Anchor)>
<!ATTLIST Immediate
	HyTime		NAME	#FIXED		"HyBrid"
	CMIF		NAME	#FIXED		"ImmediateNode"
	Id			ID		#IMPLIED  
	Name		CDATA	#IMPLIED
	Comment		CDATA	#IMPLIED	-- cmif comment attribute --
>
<!ELEMENT Anchor - - (#PCDATA) -- Simple text anchor used in immediate nodes -->
<!ATTLIST Anchor
	HyTime		NAME	#FIXED		"HyBrid"
	id		ID	#REQUIRED

	CMIF		NAME	#FIXED		"TextAnchor"
>

<!ELEMENT Extentdefs - - (extlist+) -- container for all extent definitions -->
<!ATTLIST Extentdefs HyTime NAME #FIXED "HyBrid">

<!ENTITY % marker  -- Element type forms allowed in axis marker lists --
                   "marklist | dimref | HyFunk ">
<!ELEMENT marklist -- List of axis markers or their equivalents --
                   -- Constraint: nested marklists merge into single list --
                   -- Constraint: calspec permitted only in calendars --
                   O O      (%marker; | #PCDATA)* -- lextype(snzi*) -->
<!ATTLIST Marklist HyTime   NAME     marklist >
<!ELEMENT Extlist  -- Scheduled extent list --
                   -- Constraint: derives dimspecs from marker pairs and
                      extents from dimspec sequences (one per axis) and
                      interspersed syntactic extents --
                   -- Constraint: nested marklist/dimlist/extlist merge into
                      single list with effect of
                      "(((marker1,marker2) | dimspec)+ | extent)+" --
                   -- Constraint: calspec permitted only in calendars --
                   O O     (extlist | extent | dimlist | dimspec
                            | %marker; | #PCDATA)* -- lextype(snzi*) -->
<!ATTLIST Extlist  HyTime   NAME     extlist
                   id       ID       #IMPLIED  -- Default: none -- >



<!ELEMENT Extent O O (dimlist+) >
<!ATTLIST Extent 
	HyTime		NAME	#FIXED		"extent"
	id		ID	#IMPLIED
>

<!ELEMENT DimList O O	(dimspec*) >
<!ATTLIST DimList	
	HyTime		NAME	#FIXED		"dimlist"
	id		ID	#IMPLIED
>

<!ELEMENT Dimspec O O	(marklist, marklist?) >
<!ATTLIST DimSpec	
	HyTime		NAME	#FIXED		"dimspec"
	id		ID	#IMPLIED
>



<!ELEMENT dimref   -- Dimension reference --
                   - O      EMPTY >
<!ATTLIST dimref   HyTime   NAME     dimref
                   id       ID       #IMPLIED  -- Default: none --
                   elemref  -- Element referenced --
                            IDREF    #REQUIRED
                   extref   -- Extent referenced --
                            -- 1=first or only extent --
                            NUMBER   1
                   axisref  -- Axis referenced --
                            -- Constraint: must be axis of referenced event --
                            -- lextype(GI) --
                            NAME     #IMPLIED  -- Default: dimspec or 1 axis --
                   projectr -- Event projector --
                            -- For reference to projected dimension of an event
                               or an evgrp, the projector that will create it --
                            -- Constraint: in same pevsched as reference --
                            -- reftype(projectr) --
                            IDREF    #IMPLIED  -- Default: not projected --
                   selcomp  -- Selected component of dimension --
                           (first | last | qcnt) qcnt
                   flip     -- Last is normally counted from end of range
                               (negative sign), and first from start of range
                               (positive).  Qcnt is also normally positive.
                               Flip counts last from start of range (making it
                               positive), and first from end of range (making
                               it negative). Flip also makes qcnt negative. --
                            (flip | noflip) noflip
                   calevref -- Calendar event reference --
                            -- For reference to calendar event from within a
                               calendar event, returns dimension component in
                               this schedule with same calspec as referenced
                               element has in its schedule. --
                               (calevref | normal) normal >



