TTRPG•ML
Sketch for a tabletop role-playing
game markup language

-
By David Moles
-
School of Communication and Information
-
Rutgers, The State University of New Jersey
-
17:610:524:90 Metadata for the Information Professional
-
Jessica Yi-Yun Cheng, Ph.D., Instructor
-
Fall 2023
I myself am a dilettante when it comes to tabletop role-playing games
(RPGs), more of a collector than a player and more of an accumulator than a
collector, but I find the theory of game design and the history of games
and gaming interesting, and include among my friends many more serious
hobbyists, including some successful independent game designers.
For my project, I propose to develop a metadata schema for describing
tabletop RPG systems—that is, not games themselves, but families of games
defined by shared rules, design decisions, and in some cases (e.g. Alder,
n.d.) even theme and emotional tone. Some, such as the d20
System published by Wizards of the Coast as a derivative of
the long-running Dungeons & Dragons series, are rigidly defined, intended
and licensed for commercial use; others, such as Vincent Baker’s Powered by
the Apocalypse, are more like philosophical approaches to game
design open for adoption and adaptation, in whole or in part, by both
amateur and professional designers.
Each system captures a set of design decisions and intentions that
differentiate the systems from one another while creating commonalities
among games based on the same system, and systems also are related to one
another both historically and structurally; these characteristics seem
amenable to capture and description in a controlled, structured way,
perhaps drawing on work such as that of Zagal and Deterding on gameplay
design patterns.
Potential users of the metadata schema include game designers, scholars of
RPG studies (a growing field which now includes its own peer-reviewed
journals, such as the International Journal of Role-Playing
published by the Department of Game Design at Uppsala University),
developers of websites or databases collecting RPG information, and serious
bibliographers of RPGs (the last two categories likely having some
overlap). Some of these audiences might find the process of taxonomizing
systems and creating controlled vocabularies more valuable than the
documents produced; the schema would nonetheless facilitate doing so in a
structured way. Some of these audiences might find the schema useful for
(meta)data collection and analysis; others as an interchange format, or as
the basis for a display system; a URI-addressable reference database of RPG
systems might also be a linked data resource for other collections of
linked data on role-playing games and gaming.
Schema | Namespace URI |
Dublin Core Terms | http://purl.org/dc/terms/ |
DataCite 4 | https://schema.datacite.org/meta/kernel-4.4/ |
MODS | http://www.loc.gov/mods/v3 |
I have chosen to include here only very general XML schemas that
I either leveraged directly, or that inspired some elements of the design.
The Dublin Core Terms schema is referenced directly for
domain-agnostic metadata such as creator, date, rights, and so on. However,
certain elements that might appear similar to elements from Dublin Core Terms,
such as <identifier>
and
<rights>
, are defined separately in order
to allow for more structure than the simple string values of Dublin Core.
The use of an <alt-title>
element to
represent abbreviations, nicknames,
and so on, and an associated attribute @alt-title-type
to represent the
semantics of the alternate title, is inspired by the <Title>
element and
@titleType
attribute from DataCite 4, but I decided
against incorporating the DataCite element and attribute directly in order
to separate main and alternate titles, and to be able to incorporate
additional (alternate) title types.
I also considered including MODS to represent bibliographic
references for specific game publications, such as the game book in which a
particular system was introduced, or later games based on the same system,
but in the end decided to keep bibliographic information minimal, pro tem.
I found no previous work on representing tabletop role-playing game systems
or rulesets, and only a limited amount of work on representing the games
themselves, or even related works such as boardgames; what I did find was
generally not oriented toward XML, e.g. McCulloch, on
cataloging boardgames with MARC, or Franco et al., on
representing semantics of either computer or tabletop role-playing games in
UML. There is a considerable if scattershot literature on representing
video games, including computer role playing games, and some on
representing rules or game semantics, including again Franco et al., and
also e.g. Zagal et al. on identifying game design elements and
their relationships; but again, none of it is XML-based (most, in fact,
seems to give very little consideration to interoperability or reuse at
all).
That said, there is also a rich if informal literature among gameplayers
and designers discussing game systems, rules, and mechanics, and essays
like Edwards on the relevance of mechanics to gameplay or
Mary Kuhner’s “threefold model” seem likely to provide fruitful
avenues for developing taxonomy and vocabulary.
Note: The TTRPG•ML schema uses both original elements and
embedded elements from Dublin Core Terms.
Element | Definition |
rpg-systems | Container type for a collection of RPG systems. |
rpg-system | A tabletop role-playing game system (as distinguished from particular games using the system). |
alt-title | An alternative title for a game or game system, such as a nickname, abbreviation, subtitle, or translated title. |
edition | An edition of a game or system. |
identifier | An identifier for a game or system. |
scope | The size and scope of a game, e.g. the required/suggested number of players, time per session, whether or not the game is intended for a multi-session campaign, etc. |
resp-stmt | A statement of responsibility for a game or system. |
rights | Rights information for a game or system. |
style | A style of play associated with a game or system. |
style-name | The name of a play style, such as gamist, narrativist, or simulationist. |
style-note | An explanatory note regarding play style. |
games | A collection of games associated with a game system. |
game | A tabletop role-playing game. |
copyright | Copyright information for a game or system. |
note | An explanatory note attached to other elements. |
| |
Label | rpg-systems |
URI | https://dmoles.info/ttrpgml-0.1/rpg-systems |
Definition | Container type for a collection of RPG systems. |
Cardinality | Not repeatable. |
Note: The systems in the collection may bear some intellectual
relationship to one another or be organized simply for convenience.
Empty collections are allowed.
| |
Label | rpg-system |
URI | https://dmoles.info/ttrpgml-0.1/rpg-system |
Definition | A tabletop role-playing game system (as distinguished from particular games using the system). |
Cardinality | Repeatable. |
Note: These properties, with the exception of style
,
and games
, can also be specified at the game
level.
Properties not specified for a game
are presumed to be inherited from
the parent rpg-system
.
| |
Label | alt-title |
URI | https://dmoles.info/ttrpgml-0.1/alt-title |
Definition | An alternative title for a game or game system, such as a nickname, abbreviation, subtitle, or translated title. |
Text content | Any string |
Attribute | Values |
alt-title-type (required) | abbreviation , nickname , subtitle , translation , or other . |
| |
Label | edition |
URI | https://dmoles.info/ttrpgml-0.1/edition |
Definition | An edition of a game or system. |
Text content | Any string |
Note: Different editions of a game or system should be recorded as
individual game
or rpg-system
elements.
| |
Label | identifier |
URI | https://dmoles.info/ttrpgml-0.1/identifier |
Definition | An identifier for a game or system. |
Text content | Any string |
Attribute | Values |
type (required) | The identifier type or source (e.g. wikidata , LCCN ) |
| |
Label | scope |
URI | https://dmoles.info/ttrpgml-0.1/scope |
Definition | The size and scope of a game, e.g. the required/suggested number of players, time per session, whether or not the game is intended for a multi-session campaign, etc. |
Text content | Any string |
Attribute | Values |
players (optional) | The required or suggested number of players of a game. Often expressed as a range, e.g. 3-6 |
session-time (optional) | The required or suggested time for a game session. Often expressed as a range, e.g. 2-3 hours . |
campaign (optional) | Whether or not the game is intended to be played as a multi-session campaign, expressed as a boolean value |
| |
Label | resp-stmt |
URI | https://dmoles.info/ttrpgml-0.1/resp-stmt |
Definition | A statement of responsibility for a game or system. |
Note: At least one of dct:creator
, dct:contributor
, or dct:publisher
must be specified;
however, any number can be specified, in any order.
| |
Label | rights |
URI | https://dmoles.info/ttrpgml-0.1/rights |
Definition | Rights information for a game or system. |
| |
Label | style |
URI | https://dmoles.info/ttrpgml-0.1/style |
Definition | A style of play associated with a game or system. |
| |
Label | style-name |
URI | https://dmoles.info/ttrpgml-0.1/style-name |
Definition | The name of a play style, such as gamist, narrativist, or simulationist. |
Text content | gamist , narrativist , simulationist , or freeform |
Note: For other play styles not captured by this controlled vocabulary, use
style-note
.
| |
Label | style-note |
URI | https://dmoles.info/ttrpgml-0.1/style-note |
Definition | An explanatory note regarding play style. |
Text content | Any string. |
| |
Label | games |
URI | https://dmoles.info/ttrpgml-0.1/games |
Definition | A collection of games associated with a game system. |
Child element | Cardinality |
game | 0 or more |
Note: Empty collections are allowed.
| |
Label | game |
URI | https://dmoles.info/ttrpgml-0.1/game |
Definition | A tabletop role-playing game. |
Note: This is the same set of properties as rpg-system
,
except that style
and games
are omitted.
Properties not specified for a game
are assumed to be inherited from the
parent rpg-system
.
| |
Label | copyright |
URI | https://dmoles.info/ttrpgml-0.1/copyright |
Definition | Copyright information for a game or system. |
Text content | Any string. |
| |
Label | rights-uri |
URI | https://dmoles.info/ttrpgml-0.1/rights-uri |
Definition | URI for rights information for a game or system, such as a canonical identifier or link to license text. |
Text content | Any URI. |
| |
Label | note |
URI | https://dmoles.info/ttrpgml-0.1/note |
Definition | An explanatory note attached to other elements. |
Text content | Any string. |
| |
Label | dct:creator |
URI | http://purl.org/dc/terms/creator |
Definition | A creator of a game or system. |
Text content | Any string, but note that the Dublin Core Terms creator documentation recommmends using a URI if possible. |
| |
Label | dct:contributor |
URI | http://purl.org/dc/terms/contributor |
Definition | A contributor to a game or system. |
Text content | Any string. |
| |
Label | dct:publisher |
URI | http://purl.org/dc/terms/publisher |
Definition | The publisher of a game or system. |
Text content | Any string. |
| |
Label | dct:date |
URI | http://purl.org/dc/terms/date |
Definition | A date, time, or period associated with a game or system. |
Text content | Any date, time, or date/time range. See the Dublin Core Terms date documentation for recommended formats. |
| |
Label | dct:title |
URI | http://purl.org/dc/terms/title |
Definition | The title of a game or system. |
Text content | Any string. |
| |
Label | dct:source |
URI | http://purl.org/dc/terms/source |
Definition | The source of information about a game or system. |
Text content | Any string, but note that the Dublin Core Terms source documentation recommmends using a URI or an identifier. |
| |
Label | dct:description |
URI | http://purl.org/dc/terms/description |
Definition | A description of a game or system. |
Text content | Any string. |
Download schema file
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
xmlns:dct="http://purl.org/dc/terms/"
xmlns:html="http://www.w3.org/1999/xhtml"
xmlns:xml="http://www.w3.org/XML/1998/namespace"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
vc:minVersion="1.1"
xmlns="https://dmoles.info/ttrpgml-0.1"
elementFormDefault="qualified"
targetNamespace="https://dmoles.info/ttrpgml-0.1"
>
<xs:import namespace="http://purl.org/dc/terms/" schemaLocation="https://www.dublincore.org/schemas/xmls/qdc/2008/02/11/dcterms.xsd"/>
<xs:import namespace="http://www.w3.org/1999/xhtml" schemaLocation="https://www.w3.org/2002/08/xhtml/xhtml1-strict.xsd"/>
<xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd"/>
<xs:element name="rpg-systems">
<xs:annotation>
<xs:documentation>
Container type for a collection of RPG systems. The
collection may bear some intellectual relationship to one
another or be organized simply for convenience. Note that
empty collections are allowed.
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="rpg-system"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="rpg-system">
<xs:annotation>
<xs:documentation>
A tabletop role-playing game system (as distinguished from
particular games using the system).
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:complexContent>
<xs:extension base="game-or-system">
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="style"/>
</xs:choice>
<xs:element minOccurs="0" ref="games">
<xs:annotation>
<xs:documentation>
<html:strong>Note:</html:strong>
<html:code>game</html:code> properties not specified are assumed
to be inherited from the parent <html:code>rpg-system</html:code>.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="alt-title">
<xs:annotation>
<xs:documentation>
An alternative title for a game or game system, such as a nickname,
abbreviation, subtitle, or translated title.
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="type" type="alt-title-type" use="required"/>
<xs:attribute ref="xml:lang"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="edition">
<xs:annotation>
<xs:documentation>
An edition of a game or system. Different editions of a game
or system should be recorded as individual
<html:code>game</html:code>
or <html:code>rpg-system</html:code> elements.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="identifier">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="type" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="scope">
<xs:annotation>
<xs:documentation>
The size and scope of a game, e.g. the required/suggested number of players,
time per session, whether or not the game is intended for a multi-session
campaign, etc.
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="players">
<xs:annotation>
<xs:documentation>
The required or suggested number of players of a game. Often
expressed as a range, e.g. <html:code>3-6</html:code>.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="session-time">
<xs:annotation>
<xs:documentation>
The required or suggested time for a game session. Often
expressed as a range, e.g. <html:code>2-3 hours</html:code>.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="campaign" type="xs:boolean">
<xs:annotation>
<xs:documentation>
Whether or not the game is intended to be played as a multi-session
campaign.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="resp-stmt">
<xs:annotation>
<xs:documentation>
A statement of responsibility for a game or system.
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:choice maxOccurs="unbounded">
<xs:element ref="dct:creator"/>
<xs:element ref="dct:contributor"/>
<xs:element ref="dct:publisher"/>
</xs:choice>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="dct:date"/>
<xs:element minOccurs="0" ref="note"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="rights">
<xs:annotation>
<xs:documentation>
Rights information for a game or system.
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="copyright"/>
<xs:element name="rights-uri" type="xs:anyURI"/>
</xs:choice>
<xs:element minOccurs="0" ref="note"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="style">
<xs:complexType>
<xs:choice>
<xs:element ref="style-note"/>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="style-name"/>
<xs:element minOccurs="0" ref="style-note"/>
</xs:sequence>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="style-name">
<xs:annotation>
<xs:documentation>
A style of play associated with a game or system, e.g.
gamist, narrativist, or simulationist.
<html:strong>Note:</html:strong>
For other play styles not
captured by this controlled vocabulary, use
<html:code>style-note</html:code>
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="gamist"/>
<xs:enumeration value="narrativist"/>
<xs:enumeration value="simulationist"/>
<xs:enumeration value="freeform"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="style-note">
<xs:annotation>
<xs:documentation>
An explanatory note regarding play style.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="games">
<xs:annotation>
<xs:documentation>
A collection of games associated with a game system.
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="game"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="game">
<xs:annotation>
<xs:documentation>
A tabletop role-playing game.
<html:strong>Note:</html:strong>
properties not specified are assumed
to be inherited from the parent <html:code>rpg-system</html:code>.
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:complexContent>
<xs:extension base="game-or-system"/>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="copyright">
<xs:annotation>
<xs:documentation>
Copyright information for a game or system.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="note">
<xs:annotation>
<xs:documentation>
An explanatory note attached to other elements.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="game-or-system">
<xs:sequence>
<xs:element ref="dct:title"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="alt-title"/>
<xs:element minOccurs="0" ref="edition"/>
<xs:element minOccurs="0" ref="identifier"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="dct:source"/>
<xs:element minOccurs="0" ref="scope"/>
<xs:element ref="dct:description"/>
<xs:element minOccurs="0" ref="resp-stmt"/>
<xs:element minOccurs="0" ref="rights"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="alt-title-type">
<xs:annotation>
<xs:documentation>
Controlled values for the <html:code>alt-title</html:code> element's
<html:code>title-type</html:code>
attribute.
Inspired by
<html:a href="https://schema.datacite.org/meta/kernel-4.4/">DataCite 4</html:a>'s
<html:code>titleType</html:code>.
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:enumeration value="abbreviation"/>
<xs:enumeration value="nickname"/>
<xs:enumeration value="subtitle"/>
<xs:enumeration value="translation"/>
<xs:enumeration value="other"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
- Alder, A. & Rosenbaum, B. (2021) Belonging Outside Belonging.
- Tweet et al. (2000). The d20 System.
Download ttrpgml-0.1-example-1.xml
<?xml version="1.0" encoding="UTF-8" ?>
<rpg-system
xmlns="https://dmoles.info/ttrpgml-0.1"
xmlns:dct="http://purl.org/dc/terms/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://dmoles.info/ttrpgml-0.1 https://dmoles.info/ttrpgml-0.1.xsd http://purl.org/dc/terms/ https://www.dublincore.org/schemas/xmls/qdc/2008/02/11/dcterms.xsd"
>
<dct:title>Belonging Outside Belonging</dct:title>
<alt-title type="abbreviation">BoB</alt-title>
<identifier type="wikidata">Q109853477</identifier>
<dct:source>https://buriedwithoutceremony.com/belonging</dct:source>
<dct:description>
A narrativist, "no dice, no masters" system about marginalized groups establishing
community in resistance to or evasion of a dominant culture.
</dct:description>
<resp-stmt>
<dct:creator>Avery Alder</dct:creator>
<dct:creator>Benjamin Rosenbaum</dct:creator>
<dct:date>2021</dct:date>
<note>
Originally developed by Avery Alder for the prototype of Dream Askew,
further developed in partnership with Benjamin Rosenbaum for dual
publication with Dream Apart.
</note>
</resp-stmt>
<style>
<style-name>narrativist</style-name>
<style-note>collaborative worldbuilding</style-note>
</style>
<games>
<game>
<dct:title>Dream Askew</dct:title>
<dct:source>https://buriedwithoutceremony.com/dream-askew</dct:source>
<scope players="3-6" session-time="3-4 hours" campaign="false"/>
<dct:description>
A game about a close-knit group of queers forming an enclave on the edges
of a society falling apart.
</dct:description>
</game>
<game>
<dct:title>Dream Apart</dct:title>
<dct:source>https://buriedwithoutceremony.com/dream-apart</dct:source>
<scope players="3-6" session-time="3-4 hours" campaign="false"/>
<dct:description>
A game about Jewish survival in a fantastical reimagining of the
Eastern European shtetl.
</dct:description>
</game>
</games>
</rpg-system>
Download ttrpgml-0.1-example-2.xml
<?xml version="1.0" encoding="UTF-8" ?>
<rpg-system
xmlns="https://dmoles.info/ttrpgml-0.1"
xmlns:dct="http://purl.org/dc/terms/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
https://dmoles.info/ttrpgml-0.1 https://dmoles.info/ttrpgml-0.1.xsd
http://purl.org/dc/terms/ https://www.dublincore.org/schemas/xmls/qdc/2008/02/11/dcterms.xsd
"
>
<dct:title>d20 System</dct:title>
<alt-title type="abbreviation">d20</alt-title>
<identifier type="wikidata">Q284471</identifier>
<dct:source>https://web.archive.org/web/20040414045127/http://www.wizards.com/default.asp?x=d20/article/srd35</dct:source>
<scope campaign="true">
Originally intended for ongoing campaigns with a party of 3-6 players
and one game master (the "Dungeon Master", or "DM"), d20 games have
been adapted to solo play, one-shot tournament play, and other variations.
</scope>
<dct:description>
A simulationist, dice-based system with a core mechanic based on rolling a
20-sided die, applying various situational modifiers, and comparing the result
to a target value.
</dct:description>
<resp-stmt>
<dct:creator>Jonathan Tweet</dct:creator>
<dct:creator>Monte Cook</dct:creator>
<dct:creator>Skip Williams</dct:creator>
<dct:date>2000</dct:date>
</resp-stmt>
<rights>
<copyright>Copyright 2000 Wizards of the Coast, Inc.</copyright>
<rights-uri>http://opengamingfoundation.org/ogl.html</rights-uri>
<rights-uri>https://creativecommons.org/licenses/by/4.0/legalcode</rights-uri>
<note>
Originally licensed under the Open Gaming License 1.0a. Some later versions are
dual-licensed under the Open Gaming License and Creative Commons Attribution
4.0 International.
</note>
</rights>
<style>
<style-name>simulationist</style-name>
</style>
<games>
<game>
<dct:title>Dungeons &amp; Dragons</dct:title>
<edition>3rd</edition>
<dct:description>
The third major edition of the long-running Dungeons & Dragons franchise,
and the first published by Wizards of the Coast.
</dct:description>
<resp-stmt>
<dct:publisher>Wizards of the Coast, Inc.</dct:publisher>
<dct:date>2000</dct:date>
</resp-stmt>
</game>
<game>
<dct:title>Pathfinder</dct:title>
<dct:description>
A standalone game developed to be compatible with material published for
Dungeons & Dragons 3.5.
</dct:description>
<resp-stmt>
<dct:publisher>Paizo Publishing</dct:publisher>
<dct:date>2009</dct:date>
</resp-stmt>
</game>
</games>
</rpg-system>