TT:s main content format is ttninjs. The XML variant is a IPTC NewsML G2 2.30 compliant translation of ttninjs where each field somehow relates back to the original ttninjs.
<bylines>
<contentMetaExtProperty>
for date
, datetime
, enddate
and enddatetime
.<revisions>
section.<contentMetaExtProperty>
and use of <remoteContentExtProperty>
<altId>
to <contentMetaExtProperty>
. <groupRef>
on the same level as <itemRef>
<newsMessage>
and <packageItem>
All TT<newsItem>
s are wrapped in <newsMessage>
envelopes – also single ones. This is because most TT produced texts have associated images, and the only way to represent that structure in NewsML G2 is by providing multiple <newsItem>
– one for the text and one for each image.
To navigate the xml-structure and find the main <newsItem>
do the following:
<packageItem>
for <groupSet>
descendant <group>
with attribute role="role:main"
.<itemRef>
residref="[uri here]"
<newsItem guid="[match uri here]">
in the <itemSet>
.Pseudocode with XPATH.
uri = /itemSet/packageItem/groupSet/group[@role="role:main"]/itemRef/@residref
mainitem = /itemSet/newsItem[@guid=$uri]
<newsMessage>
<header>...</header>
<itemSet>
<packageItem>...[describes relationship of newsItems below]...</packageItem>
<newsItem guid="[text uri]">...</newsItem>
<newsItem guid="[image1 uri]">...</newsItem>
<newsItem guid="[image2 uri]">...</newsItem>
...
</itemSet>
</newsMessage>
For items without associated content, we still provide the <packageItem>
since a consumer of our XML should be able to have one way of parsing the content regardless of whether it's single or multiple <newsItem>
s.
<newsMessage>
<header>...</header>
<itemSet>
<packageItem>...[provided for consistency]...</packageItem>
<newsItem guid="[image/video/graphics uri]">...</newsItem>
</itemSet>
</newsMessage>
Events and planning work the same way in the xml representation. The root element is a <newsMessage>
and the <packageItem>
point at the main item. The difference is that for events the main item is a <conceptItem>
and for planning it is a <planningItem>
.
<newsMessage>
<header>...</header>
<itemSet>
<packageItem>...[provided for consistency]...</packageItem>
<conceptItem guid="[uri]">...</newsItem>
</itemSet>
</newsMessage>
<newsMessage>
<header>...</header>
<itemSet>
<packageItem>...[provided for consistency]...</packageItem>
<planningItem guid="[uri]">...</newsItem>
</itemSet>
</newsMessage>
This example with comments is focused on a text with images. The general layout is the same for other types of objects. Major differences will be shown below.
<newsMessage>
<!-- spec at http://spec.tt.se/ -->
<header>
<!-- time this xml was sent/generated -->
<sent>2015-05-19T14:36:11+02:00</sent>
<!-- always tt.se -->
<sender>tt.se</sender>
<!-- always the same. signifies that all items must be considered
together as a package. -->
<signal qcode="nmsig:atomic"/>
</header>
<itemSet>
<!-- for <newsItem> that have associated content, like news texts
with inline/associated images, the <packageItem> conveyes the
relationship between the main (text) <newsItem> and the
associated (image) <newsItem> -->
<!-- guid is the main items uri with a "-pack" suffix, however
this should not be "parsed" or interpreted. -->
<!-- xml:lang set to whatever ttninjs.language is set to and may
be omitted. -->
<packageItem guid="http://tt.se/media/text/150410-elephantuv2-85160-pack"
version="1" standard="NewsML-G2"
standardversion="2.30" xml:lang="sv">
<!-- see <newsItem> below -->
<catalogRef
href="http://www.iptc.org/std/catalog/catalog.IPTC-G2-Standards_33.xml"/>
<!-- see <newsItem> below -->
<catalogRef href="http://tt.se/spec/catalog/catalog.tt-g2.1_0.xml"/>
<!-- same <itemMeta> as in the main <newsItem>, see definition below. -->
<itemMeta>
<itemClass qcode="ninat:text"/>
<provider qcode="nprov:TT"/>
<versionCreated>2015-05-19T08:35:48+02:00</versionCreated>
<pubStatus qcode="stat:usable"/>
</itemMeta>
<groupSet root="root">
<group id="root" role="group:main">
<!-- uri reference to the main <newsItem> (i.e. the text),
which can be found as <newsItem guid="<uri>" below -->
<itemRef residref="http://tt.se/media/text/150410-elephantuv2-85160"/>
<!-- tells us that the whole "media" group is structurally
part of the main text. -->
<groupRef idref="media"/>
</group>
<!-- group of media beloning to the main text -->
<group id="media" role="group:package" mode="pgrmod:bag">
<!-- image 1. uri reference to the first associated image -->
<itemRef residref="http://tt.se/media/image/07CB2F5B68...BED5B008E49">
<!-- the association id found in the original
ttninjs.associations JSON object. -->
<altId type="tt:associd">a000</altId>
</itemRef>
<!-- image 2 -->
<itemRef residref="http://tt.se/media/image/EA5981F5BAF...D7930B23E">
<altId type="tt:associd">a001</altId>
</itemRef>
...
</group>
</groupSet>
</packageItem>
<!-- guid is always ttninjs.uri -->
<!-- when doing news texts with associated images the first
<newsItem> will be the text followed by more <newsItem> for
the images. The itemClass will also be ninat:text for the text item. -->
<newsItem guid="http://tt.se/media/text/150410-elephantuv2-85160"
version="1"
standard="NewsML-G2"
standardversion="2.30"
xml:lang="sv">
<!-- catalog for ninat:, nprov:, irel:, cpnat:, drol:, etc... -->
<catalogRef
href="http://www.iptc.org/std/catalog/catalog.IPTC-G2-Standards_33.xml"/>
<!-- catalogRef for tt:, ttstat:, ttext:, etc... -->
<catalogRef href="http://tt.se/spec/catalog/catalog.tt-g2.1_0.xml"/>
<rightsInfo>
<copyrightHolder uri="http://tt.se/copyright">
<!-- value is ttninjs.copyrightholder -->
<name>TT Nyhetsbyrån</name>
</copyrightHolder>
<!-- value is ttninjs.copyrightnotice -->
<copyrightNotice>
(c) Copyright 2015 TT Nyhetsbyrån, all rights reserved
</copyrightNotice>
</rightsInfo>
<itemMeta>
<!-- ttninjs.type prefixed with ninat: unless ttninjs.type is
'planning' in which case the qcode is 'plinat:newscoverage'
MANDATORY
-->
<itemClass qcode="ninat:text"/>
<!-- as defined http://cv.iptc.org/newscodes/newsprovider/
MANDATORY -->
<provider qcode="nprov:TT"/>
<!-- value is ttninjs.versioncreated MANDATORY -->
<versionCreated>2015-04-10T16:25:32+02:00</versionCreated>
<!-- value is ttninjs.embargoed optional -->
<embargoed>2015-04-12T12:00:00Z</embargoed>
<!-- value is ttninjs.pubstatus prefixed with stat: unless we use
the special TT states "replaced" and "commissioned" in which
case the qcode is prefixed tt: MANDATORY for main <newsItem> -->
<pubStatus qcode="stat:usable"/>
<!-- value is ttninjs.description_usage optional -->
<edNote>
Removed some spelling mistakes and updated the images.
</edNote>
<!-- for each uri in ttninjs.replacing array there is a <link>
element where the href is the uri. optional -->
<link rel="irel:previousVersion"
href="http://tt.se/media/text/20150410:150410-elephant-85140"/>
<link rel="irel:previousVersion"
href="http://tt.se/media/text/20150410:150410-elephantuv1-85142"/>
<!--Publish Advice: lifetime (short) Other possible values are evergreen or a specific datetime when publishing should end of the item.
Note the tt-namespace -->
<advice xmlns="http://tt.se/spec/newsml"
role="adviceRole:publish">
<lifetime qcode="advice-lifetime:short"/>
</advice>
</itemMeta>
<contentMeta>
<!-- value is ttninjs.urgency MANDATORY if news text -->
<urgency>4</urgency>
<!-- same as <versionCreated>. MANDATORY for main <newsItem> -->
<contentCreated>2015-04-10T16:25:32+02:00</contentCreated>
<!-- An xml describing an image can have keyword-elements here: -->
<keyword>målvakt</keyword>
<keyword>nhl</keyword>
<!-- tag is ttninjs.language. optional -->
<language tag="sv"/>
<!-- for each value in ttninjs.subject with subref uri one
<subject>. each qcode is prefixed medtop: these are
controlled subject categorisations. optional -->
<subject type="cpnat:abstract" qcode="medtop:01000000"
typeuri="http://tt.se/spec/subref/1.0/">
<name>Konst, kultur och nöje</name>
</subject>
<subject type="cpnat:abstract" qcode="medtop:08000000"
typeuri="http://tt.se/spec/subref/1.0/">
<name>Mänskligt</name>
</subject>
<!-- for each value in ttninjs.product one <subject> with uri
http://tt.se/spec/product/1.0/ MANDATORY -->
<subject type="tt:product" literal="TTUTR"
typeuri="http://tt.se/spec/product/1.0/">
<name>Utrikes</name>
</subject>
<!-- for each value in ttninjs.person one <subject> with uri
http://tt.se/spec/person/1.0/ optional -->
<subject type="cpnat:person" typeuri="http://tt.se/spec/person/1.0/">
<name>Ingemar Stenmark</name>
</subject>
<!-- for each value in ttninjs.organisation one <subject> with uri
http://tt.se/spec/organisation/1.0/ optional -->
<subject type="cpnat:organisation"
typeuri="http://tt.se/spec/organisation/1.0/">
<name>Acme Panda Ltd</name>
</subject>
<!-- for each value in ttninjs.place one <subject> with uri
http://tt.se/spec/place/1.0/ optional -->
<!-- if we have a geo area the attribute literal is an
identifier that can be found in <assert literal="...">
with the geo area below. if no geo area the literal is
omitted. -->
<subject type="cpnat:place" typeuri="http://tt.se/spec/place/1.0/"
literal="plc_helsingfors">
<name>Helsingfors</name>
</subject>
<!-- for each value in ttninjs.object one <subject> with uri
http://tt.se/spec/object/1.0/ optional -->
<subject type="cpnat:object" typeuri="http://tt.se/spec/object/1.0/">
<name>Nytorgsfontänen</name>
</subject>
<!-- for each value in ttninjs.event one <subject> with uri
http://tt.se/spec/event/1.0/ optional -->
<subject type="cpnat:event" typeuri="http://tt.se/spec/event/1.0/">
<name>Påsk</name>
</subject>
<!-- value is ttninjs.slug optional -->
<slugline>elephantUV2</slugline>
<!-- value is ttninjs.headline. MANDATORY -->
<headline>Elephant baby stray on the road, cause minor chaos</headline>
<!-- In ttninjs there is a "byline" property both for text and images. In ttnewsml this information is placed in the by element in contentMeta.
But also see the bylines structure further down. -->
<by>Martin Algesten/TT</by>
<!-- value is ttninjs.description_text optional -->
<description role="drol:caption">A baby elephant strayed on to a
busy intersection in the wee morning hours.</description>
<!-- value is ttninjs.profile MANDATORY for main <newsItem> -->
<contentMetaExtProperty type="ttext:profile" literal="PUBL"/>
<!-- value is ttninjs.representationtype optional -->
<contentMetaExtProperty type="ttext:representationtype" literal="complete"/>
<!-- value is ttninjs.job optional -->
<contentMetaExtProperty type="ttext:job" literal="150410"/>
<!-- value is ttninjs.webprio optional -->
<contentMetaExtProperty type="ttext:webprio" literal="3"/>
<!-- value is ttninjs.commissioncode optional -->
<contentMetaExtProperty type="ttext:commissioncode" literal="4412"/>
<!-- value is ttninjs.commissionedby optional -->
<contentMetaExtProperty type="ttext:commissionedby" literal="5123"/>
<!-- value is ttninjs.charcount optional -->
<contentMetaExtProperty type="ttext:charcount" literal="741"/>
<!-- value is ttninjs.originaltransmissionreference optional -->
<contentMetaExtProperty type="ttext:originaltransmissionreference" literal="85160"/>
<!-- value is ttninjs.week optional -->
<contentMetaExtProperty type="ttext:week" literal="21"/>
<!-- value is ttninjs.date optional. See http://spec.tt.se/dates.html -->
<contentMetaExtProperty type="ttext:date" literal="2015-12-28"/>
<!-- value is ttninjs.datetime optional. See http://spec.tt.se/dates.html -->
<contentMetaExtProperty type="ttext:datetime" literal="2015-12-28T15:56:12+02:00"/>
<!-- value is ttninjs.enddate optional. See http://spec.tt.se/dates.html -->
<contentMetaExtProperty type="ttext:enddate" literal="2015-12-29"/>
<!-- value is ttninjs.enddatetime optional. See http://spec.tt.se/dates.html -->
<contentMetaExtProperty type="ttext:enddatetime" literal="2015-12-29T15:56:15+02:00"/>
<!-- revision history of document. Note the tt-namespace. See http://spec.tt.se/revisions.html -->
<revisions xmlns="http://tt.se/spec/newsml">
<revisionItem reluri="http://tt.se/media/text/150410-elephant-85140">
<slug>elephant</slug>
<versionCreated>2015-04-10T10:25:32+02:00<versionCreated>
</revisionItem>
<revisionItem reluri="http://tt.se/media/text/150410-elephantuv-85142">
<slug>elephantUV</slug>
<versionCreated>2015-04-10T10:28:32+02:00<versionCreated>
</revisionItem>
<revisionItem reluri="http://tt.se/media/text/150410-elephantuv2-85160">
<slug>elephantUV2</slug>
<replacing reluri="http://tt.se/media/text/150410-elephant-85140"/>
<replacing reluri="http://tt.se/media/text/150410-elephantuv-85142"/>
<versionCreated>2015-04-10T16:25:32+02:00<versionCreated>
</revisionItem>
</revisions>
<!-- bylines for document. Follow the structure of ttninjs. Note the tt-namespace.-->
<bylines xmlns="http://tt.se/spec/newsml">
<bylineItem>
<byline>Martin Algesten/TT</byline>
<firstname>Martin</firstname>
<lastname>Algesten</lastname>
<role>Photographer</role>
<email>martin.algesten@acme.com</email>
<jobtitle>Editor in chief</jobtitle>
<phone>+46555123456</phone>
<initials>mag</initials>
<affiliation>TT</affiliation>
</bylineItem>
</bylines>
<!-- lifetime in advice indicate the timeframe this item is newsworthy. The value short should be interpreted as a day.
Evergreen mean it is a timeless thing that can be used whenever. The third possible value is a date-time. That mead the item is not very useful when
after that date and time. One example being a text about an upcoming event, which become quite pointless when the event has started, or even finished. -->
<advice xmlns="http://tt.se/spec/newsml">
<lifetime literal="short"/>
</advice>
</contentMeta>
<!-- When a <subject type="cpnat:place"> above has an associated
geo area, the actual details for that geo area is found
here. The attribute literal="" ties the two together. -->
<assert literal="plc_helsingfors">
<type qcode="cpnat:geoArea"/>
<name>Helsingfors</name>
<geoAreaDetails>
<position latitude="60.1708" longitude="24.9375"/>
</geoAreaDetails>
</assert>
<contentSet>
<!-- This is specific to text items. Events and planning handle content differently. -->
<inlineXML contenttype="text/html" contenttypevariant="html5">
<!-- value is ttninjs.body_html5. content is not xhtml but
rather html5 ensured to be xml compliant.
See http://tt.se/spec/body_html5 -->
<html>
<head>
<title>Elephant baby stray on the road, cause minor chaos</title>
</head>
<body>
...
<!-- each image in the text is wrapped in <figure> -->
<figure>
<!-- src="" points to a square cropped thumbnail
suitable for overviews. notice that access to
the image requires a tt.se login, and TT is
(currently) not hosting these images publicly on
behalf of our clients. -->
<!-- data-assoc-ref is a reference to the
association-key in the ttninjs.associations
(JSON) object. this key can correlated to an
image in the <packageItem> part -->
<!-- data-uri is the image uri which can be found in
the guid attribute of the corresponding image
<newsItem guid=""> -->
<!-- data-preview-src is a link to a larger preview of
the image. again this is behind a tt.se login
and is not hosted publicly. -->
<img src="https://tt.se/.../6207/a002_CroppedThumbnail.jpg"
data-assoc-ref="a002"
data-uri="http://tt.se/media/image/6699D...4D30EA158"
data-preview-src="https://.../6207/a002_NormalPreview.jpg"/>
<!-- image caption to go underneath the image -->
<figcaption>Bild 3: Sara Zetterström, bloggare.</figcaption>
<!-- photographer byline. to be displayed in relation
to the image -->
<div class="byline">Martin Algesten/TT</div>
</figure>
...
</body>
</html>
</inlineXML>
<!-- From 2020 TT publishes an alternative html5, called richhtml5, with more features than the 'normal' html5. -->
<inlineXML contenttype="text/html" contenttypevariant="richhtml5">
<!-- value is ttninjs.body_html5. content is not xhtml but
rather html5 ensured to be xml compliant.
See http://tt.se/spec/body_richhtml5 -->
...
</inlineXML>
<!-- <remoteContent> is only used for alternative renderings
of the same content, like in various renditions of
images/video/graphics. -->
<!--
@rendition is set to ttninjs/rendition/usage
Hires = rnd:highRes
Preview = rnd:preview
Thumbnail = rnd:thumbnail -->
<!--
@href is ttninjs/rendition/href -->
<!--
@size is ttninjs/rendition/sizeinbytes -->
<!--
@contenttype is ttninjs/rendition/mimetype -->
<!--
@height/width is corresponding ttninjs height/width in
pixels -->
<remoteContent rendition="rnd:highRes"
href="https://app.tt.se/media/.../a000_NormalHires.jpg"
size="65789"
contenttype="image/jpeg"
width="640" height="427">
<!-- ttrend:variant is the value of
ttninjs/rendition/variant specified here
https://github.com/ttab/ttspec/blob/master/variantusage.js#L19
-->
<remoteContentExtProperty
type="ttrend:variant" literal="Normal"/>
<!-- ttrend:usage is the intended usage of the rendition,
similar concept to rnd:highRes, rnd:preview. possible
values are specified here:
https://github.com/ttab/ttspec/blob/master/variantusage.js#L20
-->
<remoteContentExtProperty
type="ttrend:usage" literal="Preview"/>
</remoteContent>
<!-- Remote content element for a video -->
<!--
@rendition is set to ttninjs/rendition/usage
Hidef = ttrend:hiDef
Hires = ttrend:hiRes
Preview = ttrend:preview
Thumbnail = ttrend:thumbnail -->
<!--
@href is ttninjs/rendition/href -->
<!--
@size is ttninjs/rendition/sizeinbytes -->
<!--
@contenttype is ttninjs/rendition/mimetype -->
<!--
@height/width is corresponding ttninjs height/width in pixels -->
<!--
@duration is is ttninjs/rendition/duration time in seconds. -->
<!--
@durationunit is always "timeunit:seconds" -->
<remoteContent rendition="ttrend:rndhidef"
href="https://app.tt.se/media/.../a000_NormalHires.mp4"
size="6578941"
contenttype="video/mp4"
duration="140"
durationunit="timeunit:seconds"
width="720" height="576">
<!-- ttrend:variant is the value of
ttninjs/rendition/variant specified here
https://github.com/ttab/ttspec/blob/master/variantusage.js#L19
-->
<remoteContentExtProperty
type="ttrend:variant" literal="Normal"/>
<!-- ttrend:usage is the intended usage of the rendition,
similar concept to rnd:highRes, rnd:preview. possible
values are specified here:
https://github.com/ttab/ttspec/blob/master/variantusage.js#L20
-->
<remoteContentExtProperty
type="ttrend:usage" literal="Preview"/>
</remoteContent>
</contentSet>
</newsItem>
</itemSet>
</newsMessage>
The XML representation of an event have the same overall structure with a <newsMessage>
holding an <itemSet>
with a <packageItem>
pointing at the main item.
The big difference is that the main item for an event is a <conceptItem>
.
<conceptItem guid="http://tt.se/media/event/F2C5A247-6F5E-40CA-8B91-F75E709EAF17" version="3" standard="NewsML-G2" standardversion="2.30">
<!-- Removed elements that work the same for events as for other items -->
<itemMeta>
<itemClass qcode="cinat:concept"/>
</itemMeta>
<contentMeta>
<!-- Removed elements that work the same for events as for other items -->
<!-- The displayable content summary of events can be found in the body_html5 or the body_richhtml5 elements. Note the tt-namespace. -->
<contentWrapper xmlns="http://tt.se/spec/newsml">
<body_html5 contenttype="text/html">
<html><body><article><section>
<h1>Näthat från vuxna vanligt för unga som kämpar för en bättre miljö</h1>
...
</section></article></body></html>
</body_html5>
<body_richhtml5 contenttype="text/html">
<html><body><article><section>
<h1>Näthat från vuxna vanligt för unga som kämpar för en bättre miljö</h1>
...
</section></article></body></html>
</body_richhtml5>
</contentWrapper>
</contentMeta>
<concept>
<conceptId created="2019-10-24T08:10:40+00:00" qcode="ttevent:F2C5A247-6F5E-40CA-8B91-F75E709EAF17" modified="2019-11-22T01:11:57+00:00"/>
<!-- An event is represented as a conceptItem with the type event -->
<type qcode="cpnat:event"/>
<name>Näthat från vuxna vanligt för unga som kämpar för en bättre miljö</name>
<!-- A conceptItem of type event can have eventDetails -->
<eventDetails>
<dates>
<start>2019-11-27T09:00:00+00:00</start>
<end>2019-11-27T09:00:00+00:00</end>
</dates>
<registration>Journalister är välkomna att delta under konferensen, anmälan till press@mucf.se eller 010-160 10 20</registration>
<location><name>, Stockholm,</name></location>
<organiser><name>Myndigheten för ungdoms- och civilsamhällesfrågor (MUCF)</name></organiser>
</eventDetails>
</concept>
</conceptItem>
The XML representation of a planning object have the same overall structure with a <newsMessage>
holding an <itemSet>
with a <packageItem>
pointing at the main item.
The big difference is that the main item for a planning object is a <planningItem>
.
<planningItem standard="NewsML-G2" standardversion="2.30" guid="http://tt.se/media/job/f709edd1-dc3b-4673-82c3-f29601635ec5" version="8">
<!-- Removed elements that work the same for events as for other items -->
<itemMeta>
<itemClass qcode="plinat:newscoverage"/>
<!-- If the planning is realted to an event that relation is shown here. -->
<link rel="ttrel:event" title="Untitled" residref="http://tt.se/media/event/19C5FD77-11CD-4096-9D71-A9B0E569F556"/>
</itemMeta>
<contentMeta>
<!-- If the planning is realted to an event that relation is also shown here. -->
<subject type="cpnat:event" typeuri="http://tt.se/spec/event/text/1.0">
<name>19C5FD77-11CD-4096-9D71-A9B0E569F556</name>
</subject>
<!-- The displayable content summary of planning can be found in the body_html5 or the body_richhtml5 elements. Note the tt-namespace. -->
<contentWrapper xmlns="http://tt.se/spec/newsml">
<body_html5 contenttype="text/html">
<html><body><article><section>
<h1>Ny teknik ger SOS exakt position</h1>
</section></article></body></html>
</body_html5>
<body_richhtml5 contenttype="text/html">
<html><body><article><section>
<h1>Ny teknik ger SOS exakt position</h1>
</section></article></body></html>
</body_richhtml5>
</contentWrapper>
</contentMeta>
<!-- If the planning have associated assignments these are listed in the newsCoverageSet with one newsCoverage per assignment
The itemClass of of each newsCoverage/planning show what type of object is planned.
Each newsCoverge may contain a delivery structure with href's to planned objects. But there is no guarantee that they are already published.-->
<newsCoverageSet>
<newsCoverage>
<planning modified="2019-11-26T10:33:15+01:00">
<itemClass qcode="ninat:video"/>
<headline>SOS Alarm presenterar en säkrare 112-tjänst</headline>
<planningExtProperty type="ttext:guid" literal="53c23277-e3ea-4e26-9bda-40428c07e48c"/>
<planningExtProperty type="ttext:planning" literal="f709edd1-dc3b-4673-82c3-f29601635ec5"/>
</planning>
</newsCoverage>
<newsCoverage>
<planning modified="2019-11-26T10:33:15+01:00">
<itemClass qcode="ninat:graphic"/>
<headline>SOS Alarm presenterar en säkrare 112-tjänst</headline>
<planningExtProperty type="ttext:guid" literal="8e71dd80-9d8b-4531-b0c0-0adbc51fa84c"/>
<planningExtProperty type="ttext:planning" literal="f709edd1-dc3b-4673-82c3-f29601635ec5"/>
</planning>
</newsCoverage>
<newsCoverage>
<planning modified="2019-11-26T10:33:15+01:00">
<itemClass qcode="ninat:text"/>
<headline>SOS Alarm presenterar en säkrare 112-tjänst</headline>
<planningExtProperty type="ttext:guid" literal="0d787e45-97c5-4e71-b430-2c12049112e7"/>
<planningExtProperty type="ttext:planning" literal="f709edd1-dc3b-4673-82c3-f29601635ec5"/>
</planning>
<delivery>
<deliveredItemRef href="http://tt.se/media/text/829f0b61-0c8d-4f73-a074-09f69cfaa190" rel="ttext:article"/>
<deliveredItemRef href="http://tt.se/media/text/febb9dfd-ab1b-4626-b287-cda833b69b0c" rel="ttext:article"/>
</delivery>
</newsCoverage>
</newsCoverageSet>
</planningItem>