# This file is part of TagSoup and is Copyright 2002-2008 by John Cowan. # # TagSoup is licensed under the Apache License, # Version 2.0. You may obtain a copy of this license at # http://www.apache.org/licenses/LICENSE-2.0 . You may also have # additional legal rights not granted by this license. # # TagSoup is distributed in the hope that it will be useful, but # unless required by applicable law or agreed to in writing, TagSoup # is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS # OF ANY KIND, either express or implied; not even the implied warranty # of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. default namespace = "http://www.ccil.org/~cowan/XML/tagsoup/tssl" start = schema ## A TSSL schema has a namespace, which is applied to the elements by default, ## and a name, which is used solely for documentation. It contains entity ## definitions, a root element, and attributes to be applied to all elements. schema = element schema { attribute ns {xsd:anyURI}, attribute prefix {xsd:NCName}, attribute name {xsd:NCName}, attribute version {"1.0"}, entity*, group+, \element, \attribute* } ## An entity has a name and a Unicode codepoint in hex. entity = element entity { attribute name {xsd:NCName}, attribute codepoint {xsd:string} } ## A group is a named group of elements. Every element belongs to one ## or more groups and has a content model consisting of one or more groups. group = element group { attribute id {xsd:ID} } ## An element has a name and a namespace (currently ignored). ## It can have any of several types of content and can be restartable ## or not. The element is also a member of one or more model groups ## (with arbitrary names), and can contain as children zero or more ## model groups. Elements also have attributes and "natural" children. \element = element element { attribute ns {xsd:anyURI}?, attribute name {xsd:NCName}, attribute type {type}, attribute closeMode { "unclosable" | "restartable" }?, attribute text-parent { "true" | "false" }?, (element memberOf { attribute group {xsd:IDREF}}+ | element isRoot { empty} | element memberOfAny { empty }), element contains { attribute group {xsd:IDREF}}*, \attribute*, \element* } ## Here are the attribute types: type = "element" | "any" | "empty" | "mixed" | "string" | "cdata" ## An attribute has a name and a namespace (currently not supported). ## It also has an optional type and an optional default value. \attribute = element attribute { attribute ns {xsd:anyURI}?, attribute name {xsd:NCName}, attribute type {"ID" | "IDREF" | "IDREFS" | "NMTOKEN" | "BOOLEAN"}?, attribute default {xsd:string}? }