namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0"
namespace cs = "http://purl.org/net/xbiblio/csl"


## cs:choose - Conditional Statements"
div {
  rendering-element.choose =
    
    ## Use to conditionally render rendering elements.
    element cs:choose { choose.if, choose.else-if*, choose.else? }
  choose.if = element cs:if { condition+, match, rendering-element* }
  choose.else-if =
    element cs:else-if { condition+, match, rendering-element* }
  choose.else = element cs:else { rendering-element+ }
  condition =
    
    ## If used, the element content is only rendered if it disambiguates two
    ## otherwise identical citations. This attempt at disambiguation is only
    ## made after all other disambiguation methods have failed.
    [ a:defaultValue = "true" ] attribute disambiguate { "true" }
    | 
      ## Tests whether the given variables contain numeric text.
      attribute is-numeric {
        list { variables+ }
      }
    | 
      ## Tests whether the given date variables contain approximate dates.
      attribute is-uncertain-date {
        list { variables.dates+ }
      }
    | 
      ## Tests whether the locator matches the given locator types.
      attribute locator {
        list { terms.locator+ }
      }
    | 
      ## Tests whether the cite position matches the given positions.
      attribute position {
        list {
          ("first"
           | "subsequent"
           | "ibid"
           | "ibid-with-locator"
           | "near-note")+
        }
      }
    | 
      ## Tests whether the item matches the given types.
      attribute type {
        list { item-types+ }
      }
    | 
      ## Tests whether the default ("long") forms of the given variables
      ## contain non-empty values.
      attribute variable {
        list { variables+ }
      }
  match =
    
    ## Set the testing logic.
    [ a:defaultValue = "all" ]
    attribute match {
      
      ## Element only tests "true" when all conditions test "true" for all
      ## given test values.
      "all"
      | 
        ## Element tests "true" when any condition tests "true" for any given
        ## test value.
        "any"
      | 
        ## Element only tests "true" when none of the conditions test "true"
        ## for any given test value.
        "none"
    }?
}
