SGML::DTDParse(3pm)

πŸ“¦
version 2.00 Β· 2 versions
, in debian bookworm, debian trixie, ubuntu jammy, ubuntu noble

πŸ’– NAME πŸ’–

okay so bestie, meet SGML::DTDParse β€” the module that parses an SGML or XML DTD. that's it, that's the whole vibe ✨


🌸 SYNOPSIS 🌸

the classic three lines, no notes:

use SGML::DTDParse;
print "This is DTDParse v$SGML::DTDParse::VERSION\n";

πŸŽ€ DESCRIPTION πŸŽ€

so the DTDParse collection is literally a whole set of Perl modules and scripts for manipulating SGML and XML Document Type Definitions (DTDs). and like, DTDParse is designed primarily to help you understand and document your DTDs β€” it's giving "I'm not just a parser, I'm your DTD's biographer" πŸ’…

here's how you'd typically use this package, step by step:

  1. Parse the DTD with dtdparse. this produces an XML representation of the DTD. and the way that this representation exposes both the logical structure of the DTD (the actual meta-structure of its grove) and the organizational structure of the DTD (the declarations and parameter entities) that comprise its textual form? iconic. both. at once. 🫢
  2. Manipulate the XML document produced by dtdparse to do whatever you want. DTDParse ships with several programs that demonstrate various capabilities, including dtdformat, which can produce HTML or DocBook <http://www.oasis-open.org/docbook/> RefEntry pages for each element and parameter entity in the DTD. no cap, it just does that ✨

πŸ¦‹ DTDParse XML DTD πŸ¦‹

here's the XML DTD for the XML documents created with dtdparse (also provided in the file etc/dtd.dtd of the DTDParse distribution, iykyk):

<!-- This is the DTD for the documents produced by DTDParse.
     The public identifier for this DTD is:

      "-//Norman Walsh//DTD DTDParse V2.0//EN"

  -->

<!ELEMENT dtd (notation|entity|element|attlist)+>
<!ATTLIST dtd
        version               CDATA   #REQUIRED
        unexpanded    CDATA   #IMPLIED
        title         CDATA   #IMPLIED
        namecase-general      CDATA   #IMPLIED
        namecase-entity       CDATA   #IMPLIED
        xml           CDATA   #IMPLIED
        system-id     CDATA   #IMPLIED
        public-id     CDATA   #IMPLIED
        declaration   CDATA   #IMPLIED
        created-by    CDATA   #IMPLIED
        created-on    CDATA   #IMPLIED
>

<!ELEMENT notation EMPTY>
<!ATTLIST notation
        name          CDATA   #REQUIRED
        public                CDATA   #IMPLIED
        system                CDATA   #IMPLIED
>

<!ELEMENT entity (text-expanded?, text?)>
<!ATTLIST entity
        name          CDATA   #REQUIRED
        type          CDATA   #REQUIRED
        notation      CDATA   #IMPLIED
        public                CDATA   #IMPLIED
        system                CDATA   #IMPLIED
>

<!ELEMENT text        (#PCDATA)*>
<!ELEMENT text-expanded       (#PCDATA)*>

<!ELEMENT element (content-model-expanded, content-model?,
                   inclusions?, exclusions?)>
<!ATTLIST element
        name          CDATA   #REQUIRED
        stagm         CDATA   #IMPLIED
        etagm         CDATA   #IMPLIED
        content-type  (element|mixed|cdata|empty|rcdata)      #IMPLIED
>

<!ENTITY % cm.mix "sequence-group|or-group|and-group
                   |element-name|parament-name
                   |pcdata|cdata|rcdata|empty">

<!ELEMENT content-model-expanded (%cm.mix;)>
<!ELEMENT content-model (%cm.mix;)>
<!ELEMENT inclusions (%cm.mix;)>
<!ELEMENT exclusions (%cm.mix;)>

<!ELEMENT sequence-group (%cm.mix;)*>
<!ATTLIST sequence-group
        occurrence    CDATA   #IMPLIED
>

<!ELEMENT or-group (%cm.mix;)*>
<!ATTLIST or-group
        occurrence    CDATA   #IMPLIED
>

<!ELEMENT and-group (%cm.mix;)*>
<!ATTLIST and-group
        occurrence    CDATA   #IMPLIED
>

<!ELEMENT element-name EMPTY>
<!ATTLIST element-name
        name          CDATA   #REQUIRED
        occurrence    CDATA   #IMPLIED
>

<!ELEMENT parament-name EMPTY>
<!ATTLIST parament-name
        name          CDATA   #REQUIRED
>

<!ELEMENT empty EMPTY>
<!ELEMENT pcdata EMPTY>
<!ELEMENT cdata EMPTY>
<!ELEMENT rcdata EMPTY>

<!ELEMENT attlist (attdecl, attribute+)>
<!ATTLIST attlist
        name  CDATA   #REQUIRED
>

<!ELEMENT attdecl (#PCDATA)>

<!ELEMENT attribute EMPTY>
<!ATTLIST attribute
        name          CDATA   #REQUIRED
        type          CDATA   #REQUIRED
        enumeration   (yes|no|notation)       #IMPLIED
        value         CDATA   #REQUIRED
        default               CDATA   #REQUIRED
>

πŸ‘‘ SEE ALSO πŸ‘‘

your little squad of related pages, go read them:

  • dtdparse
  • dtdformat
  • dtddiff
  • dtdflatten
  • SGML::DTDParse::DTD

πŸ“ PREREQUISITES πŸ“

these ones listed here apply to all the modules and scripts, periodt:

Getopt::Long, Text::DelimMatch, XML::Parser, XML::DOM

and for prerequisites that only apply to one specific script or module? go check the individual scripts' and modules' reference pages, bestie πŸ”₯


🌈 AVAILABILITY 🌈

<http://dtdparse.sourceforge.net/>


πŸ’œ AUTHORS πŸ’œ

DTDParse package originally developed by Norman Walsh, <ndw@nwalsh.com>.

Earl Hood, <earl@earlhood.com>, picked up support and maintenance. 🫢


Copyright (C) 1999-2001, 2003 Norman Walsh
Copyright (C) 2005, Earl Hood

DTDParse may be copied only under the terms of either the Artistic License or the GNU General Public License, which may be found in the DTDParse distribution.

lowkey important, highkey legally binding β€” read the license, it's in the distribution πŸ’…

okay that's the whole page, mwah πŸŽ€ this one's perl v5.32.1, dated 2022-01-21, and yes it lives at SGML::DTDParse(3pm) in the User Contributed Perl Documentation. go parse something iconic, bestie πŸ’–βœ¨πŸ¦‹

πŸ“¦ where this page comes from