namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0"
namespace rng = "http://relaxng.org/ns/structure/1.0"

# Schema generated 2006-01-30T20:23:54Z
# Copyright 2005 TEI Consortium.
# This is free software; you can redistribute it and/or
#	    modify it under the terms of the GNU General Public
#	    License as published by the Free Software Foundation;
#	    either version 2 of the License, or (at your option) any
#	    later version.
# This material is distributed in the hope that it will be
#	    useful, but WITHOUT ANY WARRANTY; without even the implied
#	    warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
#	    PURPOSE. See the GNU General Public License for more
#	    details.
# You should have received a copy of the GNU General Public
#	    License along with this file; if not, write to the Free
#	    Software Foundation, Inc., 59 Temple Place, Suite 330,
#	    Boston, MA 02111-1307, USA.
# To contact the TEI Consortium use the following addresses.
#	    For general (non-technical) enquiries: 
#		  target="mailto:info@tei-c.org"/>info@tei-c.orgFor membership enquiries: membership@tei-c.orgFor technical enquiries, particularly about the
#		Guidelines, DTDs, schemas, or software available from
#		the TEI-C: editors@tei-c.orgFor up to date information, consult the TEI web site at http://www.tei-c.org/P5

# Definitions from module drama

# Set predeclared macros
mix.drama |= model.divPart.stage
# 0. predeclared macros
mix.drama |= model.divPart.stage
# 1. classes
model.divPart.stage = notAllowed
# 2. elements

actor =
  ## (actor) Name of an actor appearing within a cast list.
  element actor { actor.content, actor.attributes }
actor.content = macro.phraseSeq
actor.attributes = att.global.attributes, empty

camera =
  ## describes a particular camera angle or viewpoint in a screen play.
  element camera { camera.content, camera.attributes }
camera.content = macro.paraContent
camera.attributes = att.global.attributes, att.typed.attributes, empty
model.stageLike |= camera

caption =
  ## contains the text of a caption or other text displayed as part of
  ## a film script or screenplay.
  element caption { caption.content, caption.attributes }
caption.content = macro.paraContent
caption.attributes = att.global.attributes, empty
model.stageLike |= caption

castGroup =
  ## (Cast list grouping) groups one or more individual castItem
  ## elements within a cast list.
  element castGroup { castGroup.content, castGroup.attributes }
castGroup.content =
  model.global*,
  (head, model.global*)?,
  ((castItem | castGroup), model.global*)+,
  (trailer, model.global*)?
castGroup.attributes = att.global.attributes, empty

castItem =
  ## (Cast list item) contains a single entry within a cast list, describing
  ## either a single role or a list of non-speaking roles.
  element castItem { castItem.content, castItem.attributes }
castItem.content =
  (text
   | model.gLike
   | role
   | roleDesc
   | actor
   | model.phrase
   | model.global)*
castItem.attributes =
  att.global.attributes,
  ## characterizes the cast item.
  [ a:defaultValue = "role" ]
  attribute type {
    ## (the item describes a single role.
    ##        ) 
    "role" | ## (the item describes a list of non-speaking roles.
      ##    ) 
      "list"
  }?,
  empty

castList =
  ## (cast list) contains a single cast list or dramatis personae.
  element castList { castList.content, castList.attributes }
castList.content =
  (model.divWrapper | model.global)*,
  (macro.component, model.global*)*,
  ((castItem | castGroup), model.global*)+,
  (macro.component, model.global*)*
castList.attributes = att.global.attributes, empty
model.divPart.stage |= castList
model.inter |= castList
model.frontPart.drama |= castList

epilogue =
  ## contains the epilogue to a drama,  typically spoken by an actor
  ## out of character, possibly in association with a particular performance
  ## or venue.
  element epilogue { epilogue.content, epilogue.attributes }
epilogue.content =
  (model.divWrapper | model.global)*,
  (macro.component, model.global*)+,
  (model.divWrapper.bottom, model.global*)*
epilogue.attributes = att.global.attributes, empty
model.frontPart.drama |= epilogue

move =
  ## (Movement) marks the actual entrance or exit of one or more characters on stage.
  element move { move.content, move.attributes }
move.content = empty
move.attributes =
  att.global.attributes,
  att.ascribed.attributes,
  ## characterizes the movement, for example as an entrance or exit.
  attribute type { data.enumerated }?,
  ## specifies the direction of a stage movement.
  attribute where { data.names }?,
  ## identifies the performance or performances in which this movement
  ##		occurred as specified.
  attribute perf { data.pointers }?,
  empty
model.stageLike |= move

performance =
  ## contains a section of front or back matter describing how a
  ## dramatic piece is to be performed in general or how it was performed
  ## on some specific occasion. 
  element performance { performance.content, performance.attributes }
performance.content =
  (model.divWrapper | model.global)*,
  (macro.component, model.global*)+,
  (model.divWrapper.bottom, model.global*)*
performance.attributes = att.global.attributes, empty
model.frontPart.drama |= performance

prologue =
  ## contains the prologue to a drama,  typically spoken by an actor out of
  ## character, possibly in association with a particular performance or venue.
  element prologue { prologue.content, prologue.attributes }
prologue.content =
  (model.divWrapper | model.global)*,
  (macro.component, model.global*)+,
  (model.divWrapper.bottom, model.global*)*
prologue.attributes = att.global.attributes, empty
model.frontPart.drama |= prologue

role =
  ## the name of a dramatic role, as given in a cast list.
  element role { role.content, role.attributes }
role.content = macro.phraseSeq
role.attributes = att.global.attributes, empty

roleDesc =
  ## (role description) describes a character's role in a drama.
  element roleDesc { roleDesc.content, roleDesc.attributes }
roleDesc.content = macro.phraseSeq
roleDesc.attributes = att.global.attributes, empty

set =
  ## contains a description of the setting, time, locale, appearance,
  ## etc., of the action of a play, typically found in the front matter of
  ## a printed performance text (not a stage direction).
  element set { set.content, set.attributes }
set.content = model.global*, head?, (macro.component, model.global*)*
set.attributes = att.global.attributes, empty
model.frontPart.drama |= set

sound =
  ## describes a sound effect or musical sequence specified within a
  ## screen play or radio script.
  element sound { sound.content, sound.attributes }
sound.content = macro.paraContent
sound.attributes =
  att.global.attributes,
  ## categorizes the sound in some respect, e.g. as music, special
  ## effect, etc.
  attribute type { data.enumerated }?,
  ## indicates whether the sound overlaps the surrounding speeches
  ## or interrupts them.
  [ a:defaultValue = "unknown" ]
  attribute discrete {
    ## (the sound is heard between the surrounding speeches) 
    "true" | ## (the sound overlaps the surrounding speeches) 
      "false" | ## (unknown or inapplicable) 
      "unknown"
  }?,
  empty
model.stageLike |= sound

tech =
  ## (Technical stage direction) describes a special-purpose stage direction that is not
  ## meant for the actors.
  element tech { tech.content, tech.attributes }
tech.content = macro.paraContent
tech.attributes =
  att.global.attributes,
  ## categorizes the technical stage direction.
  attribute type {
    ## (a lighting cue) 
    "light" | ## (a sound cue) 
      "sound" | ## (a prop cue) 
      "prop" | ## (a blocking instruction) 
      "block"
  }?,
  ## identifies the performance or performances to which this
  ## technical direction applies.
  attribute perf { data.enumerated }?,
  empty
model.stageLike |= tech

view =
  ## describes the visual context of some part of a screen play in
  ## terms of what the spectator sees, generally independent of any
  ## dialogue.
  element view { view.content, view.attributes }
view.content = macro.specialPara
view.attributes = att.global.attributes, empty
model.stageLike |= view
# 3. macros
