Article
An article represents a piece of content created in the content management
system. Different types of content like text or video articles share
the same message structure, they can be distinguished by the
Article.Type
field.
Text articles (type = Article.Type.ARTICLE
) also have
Article.SubType
to differentiate its purpose and form.
Teaser
To improve performance of database access and during network transmission tapir
is using a lightweight representation of Article
in some places.
Depending on the service used to retrieve an article, the Article
message might
only contain data required on section pages:
Article.body
set tonull
Article.elements
filtered byElement.relations
to only containTEASER
, but neitherOPENER
norSOCIAL
Thus, not containing any data that is only required on detail pages.
This lightweight representation is sometimes referred to as Teaser
.
Field name | Type | Description |
---|---|---|
id | int64 | Unique ID of the article defined by the content management system (required). |
type | Type | Main content type of the article (required). See list of supported [ContentType ][ct] |
sub_type | SubType | Subtype of the article. For ARTICLE this field holds a sub_type , for others like GALLERY it may not. |
section_tree | Reference | Hierarchical section tree information of the article (required). |
fields | map<string, string> | Generic map containing general content and configuration information of the article (required). See fields |
bodies | repeated Body | Recursive textual body of the article to be rendered on detail pages. May be null for Teaser. |
metadata | Metadata | The articles Metadata, containing state and various timestamps. |
elements | repeated Element | Element s required to render the teaser, such as IMAGE , VIDEO or AUTHOR |
keywords | repeated Keyword | Extracted keywords from the article body like persons, locations, organizations etc. |
onwards | int64 | IDs of articles related to this article. Related articles are defined manually in the content management system by the editorial department. |
variants | map<string, Article> | Variants of this article, e.g. for headline testing. |
entities | string [deprecated] | Extracted entities from the article body like persons, locations, organizations etc. deprecated — use keywords instead. |
authors | repeated Author | Authors and or Agencies ƒor this content |
related_articles | repeated Article | Editorial articles, which are related to the main article. May only be an empty unresolved article (not all services will resolve these). |
references | repeated Reference [] | References, e.g. URLs belonging to this article. |
message Article {
int64 id = 1;
Type type = 2;
SubType sub_type = 3;
stroeer.core.v1.Reference section_tree = 4;
map<string, string> fields = 5;
repeated Body bodies = 6;
Metadata metadata = 7;
repeated Element elements = 8;
repeated Keyword keywords = 9;
repeated int64 onwards = 10 [deprecated = true];
map<string, Article> variants = 11;
repeated Author authors = 12;
repeated Article related_articles = 13;
repeated Reference references = 14;
repeated string entities = 100 [deprecated = true];
fields
The entry set is defined by the content management system and will vary depending on the main type of the article.
⚠ Clients must be resilient to unknown or missing entries. ⚠
For Article.Type.ARTICLE
this map will contain the following data:
key | mandatory | description |
---|---|---|
headline | * | the headline for this content |
top_line | * | "dachzeile" |
ref_path | * | URL path for this article e.g. /${section_tree}/id_${id}/${title}.html |
ref_canonical | * | Canonical URL of this article, may differ if external, e.g. https://www.example.com/external.html |
summary | summary for this content | |
teaser_text | used on teasers, overrides summary | |
meta_robots | ||
social_headline | used for social markup, overrides headline | |
headline_short | used for "Schlagzeilen", overrides headline | |
meta_title | HTML <meta title> | |
expert_line | ||
social_description | ||
meta_description | HTML <meta description> | |
reading_time_minutes | estimated reading time in minutes | |
flag:hidden | this content must be excluded from automated curations (CMS: no auto-content /manuell kuratieren ) |
For Article.Type.GALLERY
this map will contain the following data:
key | mandatory | description |
---|---|---|
headline | * | the headline for this content |
enum Type
Enum value | Description |
---|---|
TYPE_UNSPECIFIED | unspecified |
ARTICLE | A text article, usually sub typed |
IMAGE | [deprecated] An image article, unused, deprecated |
VIDEO | A video article, contains HLS-videos, as well as external live str |
GALLERY | A gallery article |
EMBED | An embed article including an oembed or edge_side_include element |
AUTHOR | An author article, currently not implemented |
AGENCY | [deprecated] An agency article, unused, deprecated |
EXTERNAL | An external article (teaser-like external article) |
INTERNAL | Used for internal purposes only. |
CLUSTER | a thematically grouped cluster for various amount of articles, resolved Trails embedded via related_articles |
enum Type {
TYPE_UNSPECIFIED = 0;
ARTICLE = 1;
IMAGE = 2 [deprecated = true];
VIDEO = 3;
GALLERY = 4;
EMBED = 5;
AUTHOR = 6;
AGENCY = 7 [deprecated = true];
EXTERNAL = 8;
CLUSTER = 9;
INTERNAL = 100;
}
enum SubType
Content with Type.ARTICLE
is usually sub typed to alter its form and purpose.
Enum value | Description |
---|---|
SUB_TYPE_UNSPECIFIED | unspecified |
NEWS | Meldung/Nachricht — this is the default |
COLUMN | Kolumne |
COMMENTARY | Kommentar |
INTERVIEW | Interview |
CONTROVERSY | Pro und Kontra/Streitgespräch |
TAGESANBRUCH | Tagesanbruch |
EVERGREEN | Evergreen |
AGENCY_IMPORT | Content originally imported from agency/tickers by the CMS |
ADVERTORIAL | Advertorial |
QUIZ | Quiz |
GAME | (Browser)Game |
COMPLIANCE | Internal company articles like an imprint or contact forms |
RECIPE | Cooking recipe |
enum SubType {
SUB_TYPE_UNSPECIFIED = 0;
NEWS = 1;
COLUMN = 2;
COMMENTARY = 3;
INTERVIEW = 4;
CONTROVERSY = 5;
TAGESANBRUCH = 6;
EVERGREEN = 7;
AGENCY_IMPORT = 8;
ADVERTORIAL = 9;
QUIZ = 10;
GAME = 11;
COMPLIANCE = 12;
RECIPE = 13;
}