---
name: "XML::Compile::Util"
section: "3pm"
platform: "linux"
package: "libxml-compile-perl"
version: "1.64-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/XML::Compile::Util"
---

# XML::Compile::Util(3pm)

Utility routines for XML::Compile components

## NAME

XML::Compile::Util - Utility routines for XML::Compile components

## INHERITANCE

```
 XML::Compile::Util
   is an Exporter
```

## SYNOPSIS

```
 use XML::Compile::Util;
 my $node_type = pack_type $ns, $localname;
 my ($ns, $localname) = unpack_type $node_type;
```

## DESCRIPTION

The functions provided by this package are used by various XML::Compile components, which on their own may be unrelated.

## FUNCTIONS

### Constants

The following URIs are exported as constants, to avoid typing in the same long URIs each time again: XMLNS, SCHEMA1999, SCHEMA2000, SCHEMA2001, and SCHEMA2001i.

### Packing

- **pack\_id**($ns, $id)

  Translates the two arguments into one compact string representation of the node id.

  example:

  ```
   print pack_id 'http://my-ns', 'my-id';
   # shows:  http://my-ns#my-id
  ```

- **pack\_type**( \[$ns\], $localname )

  Translates the arguments into one compact string representation of the node type.  When the `$ns` is not present, `"undef"`, or an empty string, then no namespace is presumed, and no curly braces part made.

  example:

  ```
   print pack_type 'http://my-ns', 'my-type';
   # shows:  {http://my-ns}my-type
   print pack_type 'my-type';
   print pack_type undef, 'my-type';
   print pack_type '', 'my-type';
   # all three show:   my-type
  ```

- **unpack\_id**($string)

  Returns a LIST of two elements: the name-space and the id, as included in the `$string`.  That `$string` must be compatible with the result of **pack\_id()**.

- **unpack\_type**($string)

  Returns a LIST of two elements: the name-space and the localname, as included in the `$string`.  That `$string` must be compatible with the result of **pack\_type()**.  When no name-space is present, an empty string is used.

### Other

- **add\_duration**( $duration, \[$time\] )

  \[1.44\] Add the `$duration` to the `$time` (defaults to 'now')  This is an expensive operation: in many cases the **duration2secs()** produces useful results as well.

  example:

  ```
     my $now      = time;
     my $deadline = add_duration 'P1M', $now;  # deadline in 1 month
  ```

- **duration2secs**($duration)

  \[1.44\] Translate any format into seconds.  This is an example of a valid duration: `"-PT1M30.5S"`  Average month and year lengths are used.  If you need more precise calculations, then use **add\_duration()**.

- **even\_elements**(LIST)

  Returns the even-numbered elements from the LIST.

- **odd\_elements**(LIST)

  Returns the odd-numbered elements from the LIST.

- **type\_of\_node**($node)

  Translate an XML::LibXML::Node into a packed type.

## SEE ALSO

This module is part of XML-Compile distribution version 1.64, built on October 21, 2024. Website: *http://perl.overmeer.net/xml-compile/*

## LICENSE

Copyrights 2006-2024 by \[Mark Overmeer \<markov@cpan.org\>\]. For other contributors see ChangeLog.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See *http://dev.perl.org/licenses/*
