Abstract: | This specification provides an alternative to XHTML-IM with rigid separation of content and markup information, improving the resilience against spoofing and injection attacks. |
Author: | Konstzntin Kozlov |
Copyright: | © 1999 – 2018 XMPP Standards Foundation. SEE LEGAL NOTICES. |
Status: | Deferred |
Type: | Standards Track |
Version: | 0.2.1 |
Last Updated: | 2019-01-05 |
WARNING: This document has been automatically Deferred after 12 months of inactivity in its previous Experimental state. Implementation of the protocol described herein is not recommended for production systems. However, exploratory implementations are encouraged to resume the standards process.
1. Introduction
2. Requirements
3. Glossary
4. Use Cases
4.1. Transport inline markup
4.2. Transport code blocks
4.3. Transport itemized lists
4.4. Transport blockquotes
5. Business Rules
6. Implementation Notes
7. Accessibility Considerations
8. Internationalization Considerations
9. Security Considerations
10. IANA Considerations
11. XMPP Registrar Considerations
12. XML Schema
13. Acknowledgements
Appendices
A: Document Information
B: Author Information
C: Legal Notices
D: Relation to XMPP
E: Discussion Venue
F: Requirements Conformance
G: Notes
H: Revision History
Currently, XHTML-IM (XEP-0071) [1] or ad-hoc text-based formats are used to provide styling and semantic information in messages sent over the XMPP network.
These approaches have several drawbacks, including but not limited to:
OPTIONAL.
Inline markup is declared with the <span/> element.
<message> <body>There is really no reason to worry.</body> <markup xmlns="urn:xmpp:markup:0"> <span start="9" end="15"> <emphasis/> </span> </markup> </message>
The following child elements are defined for <span/>:
The start and end attributes define the range at which the span is applied. They are in units of unicode code points in the character data if the body element. The first affected codepoint is the one at start (where the first codepoint of a message has index 0) and the last affected codepoint is the one just before end. The above example could render in HTML as:
There is really no reason to worry.
Code blocks are declared with the <bcode/> element:
<message> <body>Just run this command: $ cowsay XMPP is awesome.</body> <markup xmlns="urn:xmpp:markup:0"> <bcode start="23" end="48"/> </markup> </message>
The start and end attributes work just like for <span/>.
The suggested rendering of code blocks is as block-level elements with monospaced font. The above example could render in HTML as:
Just run this command:
$ cowsay XMPP is awesome.
Itemized lists are declared with the <list/> and <li/> elements:
<message> <body>This XEP supports many things: * inline markup * code blocks * lists * and possibly more!</body> <markup xmlns="urn:xmpp:markup:0"> <list start="31" end="89"> <li start="31"/> <li start="47"/> <li start="61"/> <li start="69"/> </list> </markup> </message>
The start and end attributes of <list/> define the scope of the list. The start of the <li/> elements denote the start of a new list item. A list item continues until the end of the list or the start of the next list item. The first <li/> in a <list/> MUST have a start value equal to the start value of the <list/>.
The above example could render in HTML as:
This XEP supports many things:
A block quote is declared with a <bquote/> element:
<message> <body>He said: > Thou shalt not pass! and raised his hand.</body> <markup xmlns="urn:xmpp:markup:0"> <bquote start="9" end="32"/> </markup> </message>
In addition, References (XEP-0372) [3] or a similar mechanism MAY be used to attribute the origin of the quote. The above example could render in HTML as:
He said:
> Thou shalt not pass!
and raised his hand.
A nested quotation can be created by adding two <bquote/> elements where the start/end range is nested. If plain text quotation markers are used, the start of the blockquote MUST be placed at the first quotation marker of the outer quote.
<message> <body>> He said: >> Thou shalt not pass! > and raised his hand. Isn't this from some famous movie?</body> <markup xmlns="urn:xmpp:markup:0"> <bquote start="0" end="57"/> <bquote start="11" end="34"/> </markup> </message>
The above example could render in HTML as:
> He said:>> Thou shalt not pass!> and raised his hand.
Isn't this from some famous movie?
OPTIONAL.
Entities are encouraged use the semantic information to make the presentation of the textual content more precise, for example by applying spoken emphasis to passages marked with an <emphasis/> <span/>.
Since a message may have multiple <body/> elements in different languages, there MAY be multiple <markup/> elements, one for each of the <body/> elements. There is no requirement to include a <markup/> element for each language.
REQUIRED.
This document requires no interaction with the Internet Assigned Numbers Authority (IANA) [4].
This specification defines the following XML namespaces:
REQUIRED for protocol specifications.
Thanks to Georg Lukas and Emmanuel Gil Peyrot for feedback on the initial idea of this XEP.
Series: XEP
Number: 0394
Publisher: XMPP Standards Foundation
Status:
Deferred
Type:
Standards Track
Version: 0.2.1
Last Updated: 2019-01-05
Approving Body: XMPP Council
Dependencies: None
Supersedes: None
Superseded By: None
Short Name: markup
Source Control:
HTML
This document in other formats:
XML
PDF
Email:
yagiza@yandex.ru
JabberID:
yagiza@isgeek.info
The Extensible Messaging and Presence Protocol (XMPP) is defined in the XMPP Core (RFC 6120) and XMPP IM (RFC 6121) specifications contributed by the XMPP Standards Foundation to the Internet Standards Process, which is managed by the Internet Engineering Task Force in accordance with RFC 2026. Any protocol defined in this document has been developed outside the Internet Standards Process and is to be understood as an extension to XMPP rather than as an evolution, development, or modification of XMPP itself.
The primary venue for discussion of XMPP Extension Protocols is the <standards@xmpp.org> discussion list.
Discussion on other xmpp.org discussion lists might also be appropriate; see <http://xmpp.org/about/discuss.shtml> for a complete list.
Errata can be sent to <editor@xmpp.org>.
The following requirements keywords as used in this document are to be interpreted as described in RFC 2119: "MUST", "SHALL", "REQUIRED"; "MUST NOT", "SHALL NOT"; "SHOULD", "RECOMMENDED"; "SHOULD NOT", "NOT RECOMMENDED"; "MAY", "OPTIONAL".
1. XEP-0071: XHTML-IM <https://xmpp.org/extensions/xep-0071.html>.
2. Security Issues with XHTML-IM (again) <https://mail.jabber.org/pipermail/standards/2017-October/033546.html>.
3. XEP-0372: References <https://xmpp.org/extensions/xep-0372.html>.
4. The Internet Assigned Numbers Authority (IANA) is the central coordinator for the assignment of unique parameter values for Internet protocols, such as port numbers and URI schemes. For further information, see <http://www.iana.org/>.
Note: Older versions of this specification might be available at http://xmpp.org/extensions/attic/
First draft approved by the XMPP Council.
(XEP Editor (ssw))First draft.
(jwi)END