TT NewsML spec

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.

Revision history

  • 1.8 changed to NewsML-G2 2.30
  • 1.7 changed to NewsML-G2 2.28.
  • 1.6 added <bylines>
  • 1.5 added <contentMetaExtProperty> for date, datetime, enddate and enddatetime.
  • 1.4 added <revisions> section.
  • 1.3 fixed literal in <contentMetaExtProperty> and use of <remoteContentExtProperty>
  • 1.2 <altId> to <contentMetaExtProperty>. <groupRef> on the same level as <itemRef>
  • 1.1 updated with <newsMessage> and <packageItem>
  • 1.0 initial revision

XML outline

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.

Finding the relevant newsItem

To navigate the xml-structure and find the main <newsItem> do the following:

  1. Look in <packageItem> for <groupSet> descendant <group> with attribute role="role:main".
  2. In that group find an <itemRef>
  3. The URI for that itemRef is in attribute residref="[uri here]"
  4. That URI is used to match a <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]

Text with images

<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>

Video, graphics, etc

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

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>

The XML explained

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>

Event XML

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>

Planning XML

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>