XML::NewsML_G2 - generate NewsML-G2 news items
0.3.0
use XML::NewsML_G2; my $provider = XML::NewsML_G2::Provider->new (qcode => 'nsa', name => 'News Somewhere Agency'); my $ni = XML::NewsML_G2::News_Item_Text->new (title => 'My first NewsML-G2 news item', language => 'en', provider => $provider); my $writer = XML::NewsML_G2::Writer::News_Item->new(news_item => $ni); my $dom = $writer->create_dom(); print $dom->serialize(1);
This module tries to implement the creation of XML files conforming to the NewsML-G2 specification as published by the IPTC. It does not aim to implement the complete standard, but to cover the most common use cases in a best-practice manner.
For the full specification of the format, visit http://www.newsml-g2.org/. For a quick introduction, you might prefer the Quick Start Guides.
To start, you need to create an instance of the item class of your choice, e.g. XML::NewsML_G2::News_Item_Text for a text story, or XML::NewsML_G2::News_Item_Picture for an image. Each of these classes might have some required attributes (e.g. title, language, provider), which you will have to provide when creating the instance, as well as a number of optional ones (e.g. note). While for some attributes scalar values will do, others will require further instances of classes, e.g. for provider you will need an instance of XML::NewsML_G2::Provider. Please see each class' documentation for details.
title
language
provider
note
Once you're done setting up your data structure, you have to create a writer instance in order to retrieve your DOM. For simple news items like text or picture, XML::NewsML_G2::Writer::News_Item will be the writer class to use.
The implementation currently supports text, picture, video, audio, graphics, as well as multimedia packages and slideshows.
Version 2.18 is the latest version of the standard supported by this software, and should be your first choice. Using versions 2.9, 2.12 and 2.15 is deprecated, and support for it will beremoved in future releases.
Before starting to use schemes or catalogs with this module, read the chapter 13 of the NewsML-G2 implementation guide. Go on, do it now. I'll wait.
You don't need to use either schemes or catalogs in order to use this module, unless you are required to do so by the NewsML-G2 standard (e.g. the service attribute). If you specify a value for such an attribute and don't add a corresponding scheme, creating the DOM tree will die.
service
For all attributes where a scheme is not required by the standard, you can start without specifying anything. In that case, a literal attribute will be created, with the value you specified in the qcode attribute. For instance:
literal
qcode
my $org = XML::NewsML_G2::Organisation->new(name => 'Google', qcode => 'gogl'); $ni->add_organisation($org);
will result in this output:
<subject type="cpnat:organisation" literal="org#gogl"> <name>Google</name> </subject>
If the qcodes used in your organisation instances are part of a controlled vocabulary, you can convey this information by creating a XML::NewsML_G2::Scheme instance, specifying a custom, unique uri for your vocabulary, and registering it with the XML::NewsML_G2::Scheme_Manager:
uri
my $os = XML::NewsML_G2::Scheme->new(alias => 'xyzorg', uri => 'http://xyz.org/cv/org'); my $sm = XML::NewsML_G2::Scheme_Manager->new(org => $os);
The output will now contain an inline catalog with your scheme:
<catalog> <scheme alias="xyzorg" uri="http://xyz.org/cv/org"/> </catalog>
and the literal will be replaced by a qcode:
<subject type="cpnat:organisation" qcode="xyzorg:gogl"> <name>Google</name> </subject>
If you have multiple schemes, you can package them together into a single catalog, which you publish on your website. Simply specify the URL of the catalog when creating the XML::NewsML_G2::Scheme instance:
my $os = XML::NewsML_G2::Scheme->new(alias => 'xyzorg', catalog => 'http://xyz.org/catalog_1.xml');
and the inline catalog will be replaced with a link:
<catalogRef href="http://xyz.org/catalog_1.xml"/>
Moose, XML::LibXML, DateTime, DateTime::Format::XSD, UUID::Tiny, Module::Runtime
No bugs have been reported.
Please report any bugs or feature requests at https://github.com/apa-it/xml-newsml-g2/issues.
Be aware that the API for this module will change with each upcoming release.
<philipp.gortan@apa.at>
<mario.paumann@apa.at>
<christian.eder@apa.at>
<stefan.hrdlicka@apa.at>
Copyright (c) 2013-2015, APA-IT. All rights reserved.
This module is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This module is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this module. If not, see http://www.gnu.org/licenses/.
To install XML::NewsML_G2, copy and paste the appropriate command in to your terminal.
cpanm
cpanm XML::NewsML_G2
CPAN shell
perl -MCPAN -e shell install XML::NewsML_G2
For more information on module installation, please visit the detailed CPAN module installation guide.