home *** CD-ROM | disk | FTP | other *** search
/ Chip 2000 May / Chip_2000-05_cd1.bin / zkuste / Perl / ActivePerl-5.6.0.613.msi / 䆊䌷䈹䈙䏵-䞅䞆䞀㡆䞃䄦䠥 / _1cae2e01b56a0e40a6b54a5892da171c < prev    next >
Text File  |  2000-03-15  |  19KB  |  607 lines

  1. #
  2. # XML::PPD
  3. #
  4. # Definition of the PPD file format.
  5. #
  6. ###############################################################################
  7.  
  8. use XML::ValidatingElement;
  9. use Exporter;
  10.  
  11. $XML::PPD::revision = '$Id: PPD.pm,v 1.2 2000/01/27 19:33:17 graham Exp $';
  12. $XML::PPD::VERSION  = '0.01';
  13.  
  14. ###############################################################################
  15. # Set up XML::PPD to export it's sub-packages so that we can use them in other
  16. # XML documents without too much effort.
  17. ###############################################################################
  18. package XML::PPD;
  19. @ISA = qw( Exporter );
  20. %EXPORT_TAGS = ( 'elements' =>
  21.                  [ '%SOFTPKG::', '%IMPLEMENTATION::', '%DEPENDENCY::',
  22.                    '%TITLE::', '%ABSTRACT::', '%AUTHOR::',
  23.                    '%LANGUAGE::', '%LICENSE::', '%OS::',
  24.                    '%OSVERSION::', '%PERLCORE::', '%PROCESSOR::',
  25.                    '%CODEBASE::', '%INSTALL::', '%UNINSTALL::',
  26.                    '%ARCHITECTURE::',
  27.                  ] );
  28. Exporter::export_ok_tags( 'elements' );
  29.  
  30. ###############################################################################
  31. # PPD Element: SOFTPKG
  32. ###############################################################################
  33. package XML::PPD::SOFTPKG;
  34. @ISA = qw( XML::ValidatingElement );
  35. @oattrs = qw( VERSION );
  36. @rattrs = qw( NAME );
  37. @okids  = qw( ABSTRACT AUTHOR IMPLEMENTATION LICENSE TITLE INSTALL UNINSTALL );
  38.  
  39. ###############################################################################
  40. # PPD Element: TITLE
  41. ###############################################################################
  42. package XML::PPD::TITLE;
  43. @ISA = qw( XML::ValidatingElement );
  44.  
  45. ###############################################################################
  46. # PPD Element: ABSTRACT
  47. ###############################################################################
  48. package XML::PPD::ABSTRACT;
  49. @ISA = qw( XML::ValidatingElement );
  50.  
  51. ###############################################################################
  52. # PPD Element: AUTHOR
  53. ###############################################################################
  54. package XML::PPD::AUTHOR;
  55. @ISA = qw( XML::ValidatingElement );
  56.  
  57. ###############################################################################
  58. # PPD Element: LICENSE
  59. ###############################################################################
  60. package XML::PPD::LICENSE;
  61. @ISA = qw( XML::ValidatingElement );
  62. @rattrs = qw( HREF );
  63.  
  64. ###############################################################################
  65. # PPD Element: IMPLEMENTATION
  66. ###############################################################################
  67. package XML::PPD::IMPLEMENTATION;
  68. @ISA = qw( XML::ValidatingElement );
  69. @okids = qw( DEPENDENCY INSTALL LANGUAGE OS OSVERSION PERLCORE PROCESSOR
  70.              UNINSTALL ARCHITECTURE );
  71. @rkids = qw( CODEBASE );
  72.  
  73. ###############################################################################
  74. # PPD Element: OS
  75. ###############################################################################
  76. package XML::PPD::OS;
  77. @ISA = qw( XML::ValidatingElement );
  78. @rattrs = qw( VALUE );
  79. sub validate_possible_attrs
  80. {
  81.     my $self = shift;
  82.     $self->compatibility_check();
  83.     $self->SUPER::validate_possible_attrs( @_ );
  84. }
  85.  
  86. sub validate_required_attrs
  87. {
  88.     my $self = shift;
  89.     $self->compatibility_check();
  90.     $self->SUPER::validate_required_attrs( @_ );
  91. }
  92.  
  93. sub compatibility_check
  94. {
  95.     my $self = shift;
  96.     if (exists $self->{NAME})
  97.     {
  98.         $self->{VALUE} = $self->{NAME};
  99.         delete $self->{NAME};
  100.     }
  101. }
  102.  
  103. ###############################################################################
  104. # PPD Element: OSVERSION
  105. ###############################################################################
  106. package XML::PPD::OSVERSION;
  107. @ISA = qw( XML::ValidatingElement );
  108. @rattrs = qw( VALUE );
  109. sub validate_possible_attrs
  110. {
  111.     my $self = shift;
  112.     $self->compatibility_check();
  113.     $self->SUPER::validate_possible_attrs( @_ );
  114. }
  115.  
  116. sub validate_required_attrs
  117. {
  118.     my $self = shift;
  119.     $self->compatibility_check();
  120.     $self->SUPER::validate_required_attrs( @_ );
  121. }
  122.  
  123. sub compatibility_check
  124. {
  125.     my $self = shift;
  126.     if (exists $self->{NAME})
  127.     {
  128.         $self->{VALUE} = $self->{NAME};
  129.         delete $self->{NAME};
  130.     }
  131. }
  132.  
  133. ###############################################################################
  134. # PPD Element: PROCESSOR
  135. ###############################################################################
  136. package XML::PPD::PROCESSOR;
  137. @ISA = qw( XML::ValidatingElement );
  138. @rattrs = qw( VALUE );
  139. sub validate_possible_attrs
  140. {
  141.     my $self = shift;
  142.     $self->compatibility_check();
  143.     $self->SUPER::validate_possible_attrs( @_ );
  144. }
  145.  
  146. sub validate_required_attrs
  147. {
  148.     my $self = shift;
  149.     $self->compatibility_check();
  150.     $self->SUPER::validate_required_attrs( @_ );
  151. }
  152.  
  153. sub compatibility_check
  154. {
  155.     my $self = shift;
  156.     if (exists $self->{NAME})
  157.     {
  158.         $self->{VALUE} = $self->{NAME};
  159.         delete $self->{NAME};
  160.     }
  161. }
  162.  
  163. ###############################################################################
  164. # PPD Element: ARCHITECTURE
  165. ###############################################################################
  166. package XML::PPD::ARCHITECTURE;
  167. @ISA = qw( XML::ValidatingElement );
  168. @rattrs = qw( VALUE );
  169. sub validate_possible_attrs
  170. {
  171.     my $self = shift;
  172.     $self->compatibility_check();
  173.     $self->SUPER::validate_possible_attrs( @_ );
  174. }
  175.  
  176. sub validate_required_attrs
  177. {
  178.     my $self = shift;
  179.     $self->compatibility_check();
  180.     $self->SUPER::validate_required_attrs( @_ );
  181. }
  182.  
  183. sub compatibility_check
  184. {
  185.     my $self = shift;
  186.     if (exists $self->{NAME})
  187.     {
  188.         $self->{VALUE} = $self->{NAME};
  189.         delete $self->{NAME};
  190.     }
  191. }
  192.  
  193. ###############################################################################
  194. # PPD Element: CODEBASE
  195. ###############################################################################
  196. package XML::PPD::CODEBASE;
  197. @ISA = qw( XML::ValidatingElement );
  198. @oattrs = qw( FILENAME );
  199. @rattrs = qw( HREF );
  200.  
  201. ###############################################################################
  202. # PPD Element: DEPENDENCY
  203. ###############################################################################
  204. package XML::PPD::DEPENDENCY;
  205. @ISA = qw( XML::ValidatingElement );
  206. @rattrs = qw( NAME );
  207. @oattrs = qw( VERSION );
  208.  
  209. ###############################################################################
  210. # PPD Element: LANGUAGE
  211. ###############################################################################
  212. package XML::PPD::LANGUAGE;
  213. @ISA = qw( XML::ValidatingElement );
  214. @rattrs = qw( VALUE );
  215.  
  216. ###############################################################################
  217. # PPD Element: PERLCORE
  218. ###############################################################################
  219. package XML::PPD::PERLCORE;
  220. @ISA = qw( XML::ValidatingElement );
  221. @rattrs = qw( VERSION );
  222.  
  223. ###############################################################################
  224. # PPD Element: INSTALL
  225. ###############################################################################
  226. package XML::PPD::INSTALL;
  227. @ISA = qw( XML::ValidatingElement );
  228. @oattrs = qw( HREF EXEC );
  229.  
  230. ###############################################################################
  231. # PPD Element: UNINSTALL
  232. ###############################################################################
  233. package XML::PPD::UNINSTALL;
  234. @ISA = qw( XML::ValidatingElement );
  235. @oattrs = qw( HREF EXEC );
  236.  
  237. __END__
  238.  
  239. ###############################################################################
  240. # POD
  241. ###############################################################################
  242.  
  243. =head1 NAME
  244.  
  245. XML::PPD - PPD file format and XML parsing elements
  246.  
  247. =head1 SYNOPSIS
  248.  
  249.  use XML::Parser;
  250.  use XML::PPD;
  251.  
  252.  $p = new XML::Parser( Style => 'Objects', Pkg => 'XML::PPD' );
  253.  ...
  254.  
  255. =head1 DESCRIPTION
  256.  
  257. This module provides a set of classes for parsing PPD files using the
  258. C<XML::Parser> module.  Each of the classes is derived from
  259. C<XML::ValidatingElement>, with optional/required attributes/children
  260. enforced.
  261.  
  262. =head1 MAJOR ELEMENTS
  263.  
  264. =head2 SOFTPKG
  265.  
  266. Defines a Perl Package.  The root of a PPD document is B<always> a SOFTPKG
  267. element.  The SOFTPKG element allows for the following attributes:
  268.  
  269. =over 4
  270.  
  271. =item NAME
  272.  
  273. Required attribute.  Name of the package (e.g. "Foobar").
  274.  
  275. =item VERSION
  276.  
  277. Version number of the package, in comma-delimited format (e.g. "1,0,0,0").
  278.  
  279. =back
  280.  
  281. =head2 IMPLEMENTATION
  282.  
  283. Child of SOFTPKG, used to describe a particular implementation of the Perl
  284. Package.  Multiple instances are valid, and should be used to describe
  285. different implementations/ports for different operating systems or
  286. architectures.
  287.  
  288. =head2 DEPENDENCY
  289.  
  290. Child of SOFTPKG or IMPLEMENTATION, used to indicate a dependency this Perl
  291. Package has on another Perl Package.  Multiple instances are valid.  The
  292. DEPENDENCY element allows for the following attributes:
  293.  
  294. =over 4
  295.  
  296. =item NAME
  297.  
  298. Name of the package that this implementation is dependant upon.
  299.  
  300. =item VERSION
  301.  
  302. Version number of the dependency, in comma-delimited format (e.g. "1,0,0,0").
  303.  
  304. =back
  305.  
  306. =head1 MINOR ELEMENTS
  307.  
  308. =head2 TITLE
  309.  
  310. Child of SOFTPKG, used to state the title of the Perl Package.  Only one
  311. instance should be present.
  312.  
  313. =head2 ABSTRACT
  314.  
  315. Child of SOFTPKG, used to provide a short description outlining the nature and
  316. purpose of the Perl Package.  Only one instance should be present.
  317.  
  318. =head2 AUTHOR
  319.  
  320. Child of SOFTPKG, used to provide information about the author(s) of the Perl
  321. Package.  Multiple instances are valid.
  322.  
  323. =head2 LANGUAGE
  324.  
  325. Child of IMPLEMENTATION, used to specify the language used within the given
  326. implementation of the Perl Package.  Only one instance should be present.
  327.  
  328. =head2 LICENSE
  329.  
  330. Child of SOFTPKG, indicating the location of the appropriate license agreement
  331. or copyright notice for the Perl Package.  Only one instance should be
  332. present.  The LICENSE element allows for the following attributes:
  333.  
  334. =over 4
  335.  
  336. =item HREF
  337.  
  338. Required attribute.  A reference to the location of the license agreement or
  339. copyright notice for this package.
  340.  
  341. =back
  342.  
  343. =head2 OS
  344.  
  345. Child of IMPLEMENTATION, used to outline the operating system required for this
  346. implementation of the Perl Package.  Multiple instances are valid.  Valid
  347. values can be taken from the OSD Specification and it's OS element.  The OS
  348. element allows for the following attributes:
  349.  
  350. =over 4
  351.  
  352. =item VALUE
  353.  
  354. The name of the operating system required for this implementation of the Perl
  355. Package.  This value should be obtained from Config.pm as 'osname'.
  356.  
  357. =back
  358.  
  359. Note that previous versions of the PPD format used a 'NAME' attribute.  It's
  360. use has been deprecated in preference of the 'VALUE' attribute.  Also note that
  361. during validation, this element will automatically convert any existing 'NAME'
  362. attribute to be a 'VALUE' attribute.
  363.  
  364. =head2 OSVERSION
  365.  
  366. Child of IMPLEMENTATION, used to outline the required version of the operating
  367. system required for this implementation of the Perl Package.  Only one instance
  368. should be present.  The OSVERSION element allows for the following attributes:
  369.  
  370. =over 4
  371.  
  372. =item VALUE
  373.  
  374. The version of the operating system required for installation of this
  375. implementation of the package, in a comma-delimited format (e.g. "3,1,0,0").
  376.  
  377. =back
  378.  
  379. Note that previous versions of the PPD format used a 'NAME' attribute.  It's
  380. use has been deprecated in preference of the 'VALUE' attribute.  Also note that
  381. during validation, this element will automatically convert any existing 'NAME'
  382. attribute to be a 'VALUE' attribute.
  383.  
  384. =head2 PERLCORE
  385.  
  386. Child of IMPLEMENTATION, used to specify the minimum version of the Perl core
  387. distribution that this Perl Package is to be used with.  Only one instance
  388. should be present.  The PERLCORE element allows for the following attributes:
  389.  
  390. =over 4
  391.  
  392. =item VERSION
  393.  
  394. Version of the Perl core that is required for this implementation of the Perl
  395. Package.
  396.  
  397. =back
  398.  
  399. =head2 PROCESSOR
  400.  
  401. Child of IMPLEMENTATION, outlining the cpu required for this implementation
  402. of the Perl Package.  Only one instance should be present.  The PROCESSOR
  403. element allows for the following attributes:
  404.  
  405. =over 4
  406.  
  407. =item VALUE
  408.  
  409. CPU required for the installation of this implementation of the Perl Package.
  410. The following values are all valid according to the OSD Specification:
  411.  
  412.  x86 alpha mips sparc 680x0
  413.  
  414. =back
  415.  
  416. Note that previous versions of the PPD format used a 'NAME' attribute.  It's
  417. use has been deprecated in preference of the 'VALUE' attribute.  Also note that
  418. during validation, this element will automatically convert any existing 'NAME'
  419. attribute to be a 'VALUE' attribute.
  420.  
  421. =head2 CODEBASE
  422.  
  423. Child of IMPLEMENTATION, indicating a location where an archive of the Perl
  424. Package can be retrieved.  Multiple instances are valid, and can be used to
  425. indicate multiple possible locations where the same version of the Perl Package
  426. can be retrieved.  The CODEBASE element allows for the following attributes:
  427.  
  428. =over 4
  429.  
  430. =item FILENAME
  431.  
  432. ???
  433.  
  434. =item HREF
  435.  
  436. Required attribute.  A reference to the location of the Perl Package
  437. distribution.
  438.  
  439. =back
  440.  
  441. =head2 INSTALL
  442.  
  443. Child of IMPLEMENTATION, used to provide either a reference to an
  444. installation script or a series of commands which can be used to install
  445. the Perl Package once it has been retrieved.  If the EXEC attribute is not
  446. specified, the value is assumed to be one or more commands, separated by
  447. `;;'.  Each such command will be executed by the Perl `system()' function.
  448. Only one instance should be present.  The INSTALL element allows for
  449. the following attributes:
  450.  
  451. =over 4
  452.  
  453. =item HREF
  454.  
  455. Reference to an external script which should be retrieved and run as part
  456. of the installation process.  Both filenames and URLs should be considered
  457. valid.
  458.  
  459. =item EXEC
  460.  
  461. Name of interpreter/shell used to execute the installation script.
  462. If the value of EXEC is `PPM_PERL', the copy of Perl that is executing
  463. PPM itself ($^X) is used to execute the install script.
  464.  
  465. =back
  466.  
  467. =head2 UNINSTALL
  468.  
  469. Child of IMPLEMENTATION, used to provide either a reference to an
  470. uninstallation script or a raw Perl script which can be used to uninstall the
  471. Perl Package at a later point.  Only one instance should be present.  The
  472. UNINSTALL element allows for the following attributs:
  473.  
  474. =over 4
  475.  
  476. =item HREF
  477.  
  478. Reference to an external script which should be retrieved and run as part of
  479. the removal process.  Both filenames and URLs should be considered valid.
  480.  
  481. =item EXEC
  482.  
  483. Name of interpreter/shell used to execute the uninstallation script.
  484. If the value of EXEC is `PPM_PERL', the copy of Perl that is executing
  485. PPM itself ($^X) is used to execute the install script.
  486.  
  487. =back
  488.  
  489. =head1 DOCUMENT TYPE DEFINITION
  490.  
  491. The DTD for PPD documents is available from the ActiveState website and the
  492. latest version can be found at http://www.ActiveState.com/PPM/DTD/ppd.dtd
  493.  
  494. This revision of the C<XML::PPD> module implements the following DTD:
  495.  
  496.  <!ELEMENT SOFTPKG   (ABSTRACT | AUTHOR | IMPLEMENTATION | LICENSE | TITLE)*>
  497.  <!ATTLIST SOFTPKG   NAME    CDATA #REQUIRED
  498.                      VERSION CDATA #IMPLIED>
  499.  
  500.  <!ELEMENT TITLE     (#PCDATA)>
  501.  
  502.  <!ELEMENT ABSTRACT  (#PCDATA)>
  503.  
  504.  <!ELEMENT AUTHOR    (#PCDATA)>
  505.  
  506.  <!ELEMENT LICENSE   EMPTY>
  507.  <!ATTLIST LICENSE   HREF     CDATA #REQUIRED>
  508.  
  509.  <!ELEMENT IMPLEMENTATION    (CODEBASE | DEPENDENCY | LANGUAGE | OS |
  510.                               OSVERSION | PERLCORE | PROCESSOR | INSTALL |
  511.                               UNINSTALL) *>
  512.  
  513.  <!ELEMENT CODEBASE  EMPTY>
  514.  <!ATTLIST CODEBASE  FILENAME CDATA #IMPLIED
  515.                      HREF     CDATA #REQUIRED>
  516.  
  517.  <!ELEMENT DEPENDENCY EMPTY>
  518.  <!ATTLIST DEPENDENCY VERSION CDATA #IMPLIED
  519.                       NAME CDATA #REQUIRED>
  520.  
  521.  <!ELEMENT LANGUAGE  EMPTY>
  522.  <!ATTLIST LANGUAGE  VALUE CDATA #REQUIRED>
  523.  
  524.  <!ELEMENT OS        EMPTY>
  525.  <!ATTLIST OS        VALUE CDATA #REQUIRED>
  526.  
  527.  <!ELEMENT OSVERSION EMPTY>
  528.  <!ATTLIST OSVERSION VALUE CDATA #REQUIRED>
  529.  
  530.  <!ELEMENT PERLCORE  EMPTY>
  531.  <!ATTLIST PERLCORE  VERSION CDATA #REQUIRED>
  532.  
  533.  <!ELEMENT PROCESSOR EMPTY>
  534.  <!ATTLIST PROCESSOR VALUE CDATA #REQUIRED>
  535.  
  536.  <!ELEMENT INSTALL   (#PCDATA)>
  537.  <!ATTLIST INSTALL   HREF  CDATA #IMPLIED
  538.                      EXEC  CDATA #IMPLIED>
  539.  
  540.  <!ELEMENT UNINSTALL (#PCDATA)>
  541.  <!ATTLIST UNINSTALL HREF  CDATA #IMPLIED
  542.                      EXEC  CDATA #IMPLIED>
  543.  
  544. =head1 SAMPLE PPD FILE
  545.  
  546. The following is a sample PPD file describing the C<Math-MatrixBool> module.
  547. Note that this may B<not> be a current/proper description of this module and is
  548. for sample purposes only.
  549.  
  550.  <SOFTPKG NAME="Math-MatrixBool" VERSION="4,2,0,0">
  551.      <TITLE>Math-MatrixBool</TITLE>
  552.      <ABSTRACT>Easy manipulation of matrices of booleans (Boolean Algebra)</ABSTRACT>
  553.      <AUTHOR>Steffen Beyer (sb@sdm.de)</AUTHOR>
  554.      <LICENSE HREF="http://www.ActiveState.com/packages/Math-MatrixBool/license.html" />
  555.      <IMPLEMENTATION>
  556.          <OS VALUE="WinNT" />
  557.          <OS VALUE="Win95" />
  558.          <PROCESSOR VALUE="x86" />
  559.          <CODEBASE HREF="http://www.ActiveState.com/packages/Math-MatrixBool/Math-MatrixBool-4.2-bin-1-Win32.tar.gz" />
  560.          <DEPENDENCY NAME="Bit-Vector" />
  561.          <INSTALL>
  562.          </INSTALL>
  563.          <UNINSTALL>
  564.          </UNINSTALL>
  565.      </IMPLEMENTATION>
  566.  
  567.      <IMPLEMENTATION>
  568.          <DEPENDENCY NAME="Bit-Vector" />
  569.          <CODEBASE HREF="&CPAN;/CPAN/modules/by-module/Math/Math-MatrixBool-4.2.tar.gz" />
  570.          <INSTALL>
  571.              system("make"); ;;
  572.              system("make test"); ;;
  573.              system("make install"); ;;
  574.          </INSTALL>
  575.      </IMPLEMENTATION>
  576.  </SOFTPKG>
  577.  
  578. =head1 KNOWN BUGS/ISSUES
  579.  
  580. Elements which are required to be empty (e.g. LICENSE) are not enforced as
  581. such.
  582.  
  583. Notations above about elements for which "only one instance" or "multiple
  584. instances" are valid are not enforced; this primarily a guideline for
  585. generating your own PPD files.
  586.  
  587. =head1 AUTHORS
  588.  
  589. Graham TerMarsch <grahamt@activestate.com>
  590.  
  591. Murray Nesbitt <murrayn@activestate.com>
  592.  
  593. Dick Hardt <dick_hardt@activestate.com>
  594.  
  595. =head1 HISTORY
  596.  
  597. v0.1 - Initial release
  598.  
  599. =head1 SEE ALSO
  600.  
  601. L<XML::ValidatingElement>,
  602. L<XML::Element>,
  603. L<XML::Parser>,
  604. OSD Specification (http://www.microsoft.com/standards/osd/)
  605.  
  606. =cut
  607.