dtd-types (empty) → 0.0.0.1
raw patch · 4 files changed
+355/−0 lines, 4 filesdep +basedep +textdep +xml-typessetup-changed
Dependencies added: base, text, xml-types
Files
- Data/XML/DTD/Types.hs +274/−0
- Setup.hs +2/−0
- dtd-types.cabal +51/−0
- license.txt +28/−0
+ Data/XML/DTD/Types.hs view
@@ -0,0 +1,274 @@+------------------------------------------------------------------------------+-- |+-- Module : Data.XML.DTD.Types+-- Copyright : Suite Solutions Ltd., Israel 2011+--+-- Maintainer : Yitzchak Gale <gale@sefer.org>+-- Portability : portable+--+-- This module provides types to represent an XML Document Type+-- Declaration (DTD) as defined in W3C specifications+-- (<http://www.w3.org/XML/Core/#Publications>). It is intended to be+-- compatible with and extend the set of types in "Data.XML.Types"+-- provided by the xml-types package.+--+-- Following the philosophy of @Data.XML.Types@, the types in this+-- module are not intended to be a strict and complete representation+-- of the model in the W3C specifications; rather, they are intended+-- to be convenient and type-safe for the kinds of processing of DTDs+-- that are commonly done in practice. As such, this model is+-- compatible with both Version 1.0 and Version 1.1 of the XML+-- specification.+--+-- Therefore, these types are not suitable for type-level validation+-- of the syntax of a DTD. For example: these types are more+-- lenient than the specs about the characters that are allowed in+-- various locations in a DTD; entities of various kinds only appear+-- as distinct syntactic elements in places where they are commonly+-- needed when processing DTDs; etc.+--+-- Conditional sections are not represented in these types. They+-- should be handled directly by parsers and renderers, if needed.++{-+Copyright (c) 2011 Suite Solutions Ltd., Israel. All rights reserved.++For licensing information, see the BSD3-style license in the file+license.txt that was originally distributed by the author together+with this file.+-}++module Data.XML.DTD.Types+ ( -- * DTD structure+ DTD (..)+ , DTDTextDecl (..)+ , DTDComponent (..)+ + -- * Entity declarations and references+ , EntityDecl (..)+ , PEContent (..)+ , PERef++ -- * Element declarations+ , ElementDecl (..)+ , ContentModel (..)+ , Repeat (..)++ -- * Attribute declarations+ , AttrList (..)+ , AttrDecl (..)+ , AttrType (..)+ , AttrDefault (..)++ -- * Notation declarations+ , Notation (..)+ , NotationSource (..)+ ) + where++import Data.Text (Text)+import Data.Typeable ( Typeable, TypeRep, typeOf+ , mkTyConApp, mkTyCon)+import Data.XML.Types (ExternalID)++-- | A 'DTD' is a sequence components in any order.+data DTD = DTD+ { dtdTextDecl :: DTDTextDecl+ , dtdComponents :: [DTDComponent]+ }+ deriving (Show, Eq)++instance Typeable DTD where+ typeOf = typeString "DTD"++-- | The @?xml@ text declaration at the beginning of a DTD.+data DTDTextDecl =+ DTDTextDecl+ { dtdXMLVersion :: Maybe Text+ , dtdEncoding :: Text+ }+ deriving (Show, Eq)++instance Typeable DTDTextDecl where+ typeOf = typeString "DTDTextDecl"++-- | The kinds of components that can appear in a 'DTD'.+data DTDComponent =+ DTDEntityDecl EntityDecl -- ^ Entity declaration+ | DTDElementDecl ElementDecl -- ^ Element declaration+ | DTDAttrList AttrList -- ^ List of attribute declarions for+ -- an element+ | DTDNotation Notation -- ^ A notation declaration+ | DTDPERef PERef -- ^ A parameter entity reference in+ -- the top-level flow of the DTD+ | DTDComment Text -- ^ A comment+ deriving (Show, Eq)++instance Typeable DTDComponent where+ typeOf = typeString "DTDComponent"++-- | A declaration of an entity. An entity is a textual substitution+-- variable. General entities can be referenced in an XML document+-- conforming to the DTD, and parameter entities can be referenced in+-- the DTD itself. The value of an unparsed entity is not specified in+-- the DTD; it is specified by external syntax declared as a notation+-- elsewhere in the DTD.+data EntityDecl =+ InternalEntityDecl -- ^ An internal general entity+ { entityDeclName :: Text+ , entityDeclValue :: Text+ }+ | ExternalEntityDecl -- ^ An external general+ -- entity, parsed or+ -- unparsed. It is unparsed+ -- if a notation is+ -- specified.+ { entityDeclName :: Text+ , entityDeclID :: ExternalID+ , entityDeclNotation :: Maybe Text+ }+ | ParameterEntityDecl -- ^ A parameter entity+ { entityDeclName :: Text+ , peDeclValue :: [PEContent]+ }+ deriving (Show, Eq)++instance Typeable EntityDecl where+ typeOf = typeString "EntityDecl"++-- | Parameter entities need to be recursively resolved, so we+-- represent their content as a mixture of nested parameter entity+-- references and free text.+data PEContent =+ PEText Text+ | PENested PERef+ deriving (Show, Eq)++instance Typeable PEContent where+ typeOf = typeString "PEContent"++-- | A parameter entity reference+type PERef = Text++-- | A declaration of an element.+data ElementDecl =+ ElementDecl+ { eltDeclName :: Text+ , eltDeclContent :: ContentDecl+ }+ deriving (Show, Eq)++instance Typeable ElementDecl where+ typeOf = typeString "ElementDecl"++-- | The content that can occur in an element.+data ContentDecl =+ ContentEmpty -- ^ No content+ | ContentAny -- ^ Unrestricted content+ | ContentElement ContentModel -- ^ Structured element content+ | ContentMixed [Text] -- ^ A mixture of text and elements+ deriving (Show, Eq)++instance Typeable ContentDecl where+ typeOf = typeString "ContentDecl"++-- | A model of structured content for an element.+data ContentModel =+ CMName Text Repeat -- ^ Element name+ | CMChoice [ContentModel] Repeat -- ^ Choice, delimited by @\"|\"@+ | CMSeq [ContentModel] Repeat -- ^ Sequence, delimited by @\",\"@+ deriving (Show, Eq)++instance Typeable ContentModel where+ typeOf = typeString "ContentModel"++-- | The number of times a production of content model syntax can+-- repeat.+data Repeat = One | ZeroOrOne | ZeroOrMore | OneOrMore+ deriving (Show, Eq)++instance Typeable Repeat where+ typeOf = typeString "Repeat"++-- | A list of attribute declarations for an element.+data AttrList =+ AttrList+ { attrListElementName :: Text -- ^ The name of the element to+ -- which the attribute+ -- declarations apply+ , attrListDecls :: [AttrDecl]+ }+ deriving (Show, Eq)++instance Typeable AttrList where+ typeOf = typeString "AttrList"++-- | A declaration of an attribute that can occur in an element.+data AttrDecl =+ AttrDecl+ { attrDeclName :: Text -- ^ The name of the attribute+ , attrDeclType :: AttrType -- ^ The type of the attribute+ , attrDeclDefault :: AttrDefault -- ^ The default value specification+ }+ deriving (Show, Eq)++instance Typeable AttrDecl where+ typeOf = typeString "AttrDecl"++-- | The type of value that an attribute can take.+data AttrType =+ AttrStringType -- ^ Any text+ | AttrIDType -- ^ A unique ID+ | AttrIDRefType -- ^ A reference to an ID+ | AttrIDRefsType -- ^ One or more references to IDs+ | AttrEntityType -- ^ An unparsed external entity+ | AttrEntitiesType -- ^ One or more unparsed external entities+ | AttrNmTokenType -- ^ A name-like token+ | AttrNmTokensTYpe -- ^ One or more name-like tokens+ | AttrEnumType [Text] -- ^ One of the given values+ | AttrNotationType [Text] -- ^ Specified by external syntax+ -- declared as a notation+ deriving (Show, Eq)++instance Typeable AttrType where+ typeOf = typeString "AttrType"++-- | A default value specification for an attribute.+data AttrDefault =+ AttrRequired -- ^ No default value; the attribute must always+ -- be supplied+ | AttrImplied -- ^ No default value; the attribute is optional+ | AttrFixed Text -- ^ When supplied, the attribute must have the+ -- given value+ | AttrDefaultValue Text -- ^ The attribute has the given default value+ -- when not supplied+ deriving (Show, Eq)++instance Typeable AttrDefault where+ typeOf = typeString "AttrDefault"++-- | A declaration of a notation.+data Notation =+ Notation+ { notationName :: Text,+ notationSource :: NotationSource+ }+ deriving (Show, Eq)++instance Typeable Notation where+ typeOf = typeString "Notation"++-- | A source for a notation. We do not use the usual 'ExternalID'+-- type here, because for notations it is only optional, not required,+-- for a public ID to be accompanied also by a system ID.+data NotationSource =+ NotationSysID Text -- ^ A system ID+ | NotationPubID Text -- ^ A public ID+ | NotationPubSysID Text Text -- ^ A public ID with a system ID+ deriving (Show, Eq)++instance Typeable NotationSource where+ typeOf = typeString "NotationSource"++typeString :: String -> a -> TypeRep+typeString str _ = mkTyConApp (mkTyCon ("Data.XML.DTD.Types." ++ str)) []
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ dtd-types.cabal view
@@ -0,0 +1,51 @@+name: dtd-types+version: 0.0.0.1+synopsis: Basic types for representing XML DTDs+description:+ This package provides types to represent an XML Document Type+ Declaration (DTD) as defined in W3C specifications+ (<http://www.w3.org/XML/Core/#Publications>). It is intended to be+ compatible with and extend the set of types in "Data.XML.Types"+ provided by the xml-types package.+ .+ Following the philosophy of @Data.XML.Types@, the types in this+ module are not intended to be a strict and complete representation+ of the model in the W3C specifications; rather, they are intended+ to be convenient and type-safe for the kinds of processing of DTDs+ that are commonly done in practice. As such, this model is+ compatible with both Version 1.0 and Version 1.1 of the XML+ specification.+ .+ Therefore, these types are not suitable for type-level validation+ of the syntax of a DTD. For example: these types are more+ lenient than the specs about the characters that are allowed in+ various locations in a DTD; entities of various kinds only appear+ as distinct syntactic elements in places where they are commonly+ needed when processing DTDs; etc.+ .+ Conditional sections are not represented in these types. They+ should be handled directly by parsers and renderers, if needed.++license: BSD3+license-file: license.txt+author: Yitzchak Gale+maintainer: gale@sefer.org+category: Data, Text, XML+build-type: Simple+cabal-version: >=1.6+category: Text, XML+stability: experimental+bug-reports: mailto:gale@sefer.org++source-repository head+ type: darcs+ location: http://code.haskell.org/dtd/dtd-types/++library+ build-depends:+ base >=3 && < 5+ , text+ , xml-types ==0.3.*++ exposed-modules:+ Data.XML.DTD.Types
+ license.txt view
@@ -0,0 +1,28 @@+Copyright (c) 2011 Suite Solutions Ltd., Israel. All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++ * Redistributions of source code must retain the above copyright+ notice, this list of conditions and the following disclaimer.++ * Redistributions in binary form must reproduce the above+ copyright notice, this list of conditions and the following+ disclaimer in the documentation and/or other materials provided+ with the distribution.++ * Neither the name of Yitzchak Gale nor the names of other+ contributors may be used to endorse or promote products derived+ from this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.