{"id":29760820,"url":"https://github.com/verkaro/xspf-prose","last_synced_at":"2025-08-09T23:09:10.684Z","repository":{"id":303280651,"uuid":"1014954242","full_name":"verkaro/xspf-prose","owner":"verkaro","description":"This document specifies a method for embedding multi-paragraph, Markdown-formatted prose within an XSPF (XML Shareable Playlist Format) file.","archived":false,"fork":false,"pushed_at":"2025-07-06T18:55:16.000Z","size":8,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-26T23:02:23.751Z","etag":null,"topics":["markdown","playlist","prose","xspf"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/verkaro.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-06T18:21:39.000Z","updated_at":"2025-07-06T18:53:34.000Z","dependencies_parsed_at":"2025-07-06T19:40:16.291Z","dependency_job_id":null,"html_url":"https://github.com/verkaro/xspf-prose","commit_stats":null,"previous_names":["verkaro/xspf-prose"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/verkaro/xspf-prose","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/verkaro%2Fxspf-prose","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/verkaro%2Fxspf-prose/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/verkaro%2Fxspf-prose/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/verkaro%2Fxspf-prose/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/verkaro","download_url":"https://codeload.github.com/verkaro/xspf-prose/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/verkaro%2Fxspf-prose/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269649848,"owners_count":24453541,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-09T02:00:10.424Z","response_time":111,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["markdown","playlist","prose","xspf"],"created_at":"2025-07-26T20:22:16.700Z","updated_at":"2025-08-09T23:09:10.676Z","avatar_url":"https://github.com/verkaro.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# XSPF Prose Extension Specification v1.1\n\n**Namespace URI:** `https://github.com/verkaro/xspf-prose/tree/v1.1`\n\n## 1. Introduction\n\nThis document specifies a method for embedding multi-paragraph, Markdown-formatted prose within an XSPF (XML Shareable Playlist Format) file. It uses the standard XSPF `\u003cextension\u003e` element to ensure that documents using this specification remain fully compliant with the base XSPF v1 standard. Playlists using this extension will be functional in any standard XSPF player, which will safely ignore the extension.\n\n## 2. Conformance\n\nA conforming document MUST use the `\u003cextension\u003e` element with its `application` attribute set to the exact Namespace URI specified above.\n\n## 3. Specification\n\nThe Prose Extension is defined by the following structure within an XSPF `\u003ctrack\u003e` element.\n\n### 3.1. The Extension Element\n\n  * **Element:** `\u003cextension\u003e`\n  * **`application` Attribute:** MUST be `https://github.com/verkaro/xspf-prose/tree/v1.1`.\n\n### 3.2. The Content Element\n\n  * The `\u003cextension\u003e` element MUST contain one child element in the same namespace.\n  * **Element Name:** `\u003cprose:content\u003e` (where `prose` is the prefix mapped to the Namespace URI).\n  * **Content:** The content of this element MUST be wrapped in a `\u003c![CDATA[...]]\u003e` section to prevent parsing errors. The character data within this section should be interpreted as Markdown, preferably compliant with the [CommonMark](https://commonmark.org/) specification.\n\n## 4. Complete Example\n\nHere is a complete, valid XSPF playlist demonstrating the use of the Prose Extension.\n\n```xml\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003cplaylist \n  version=\"1\" \n  xmlns=\"http://xspf.org/ns/0/\"\n  xmlns:prose=\"https://github.com/verkaro/xspf-prose/tree/v1.1\"\u003e\n  \n  \u003ctitle\u003ePlaylist with Embedded Prose\u003c/title\u003e\n  \n  \u003ctrackList\u003e\n    \u003ctrack\u003e\n      \u003clocation\u003ehttps://archive.org/download/some-track/track.mp3\u003c/location\u003e\n      \u003ctitle\u003eA Track with a Story\u003c/title\u003e\n      \u003cextension application=\"https://github.com/verkaro/xspf-prose/tree/v1.1\"\u003e\n        \u003cprose:content\u003e\n          \u003c![CDATA[\n### The Story of This Track\n\nThis is the first paragraph of prose that tells a story about the track. It can contain multiple lines and paragraphs.\n\n* Use lists for key points.\n* Use *emphasis* or **bolding** for effect.\n* Even include [links](https://example.com) for more information.\n          ]]\u003e\n        \u003c/prose:content\u003e\n      \u003c/extension\u003e\n    \u003c/track\u003e\n  \u003c/trackList\u003e\n\u003c/playlist\u003e\n```\n\n## 5. Implementation Guidance for Parsers\n\n1.  When parsing an XSPF `\u003ctrack\u003e`, check for an `\u003cextension\u003e` element where the `application` attribute matches the Namespace URI (`https://github.com/verkaro/xspf-prose/tree/v1.1`).\n2.  If found, retrieve the string data from the `CDATA` section of its `\u003cprose:content\u003e` child.\n3.  Process this string through a standard Markdown renderer before displaying it in the application's user interface.\n4.  If the extension is not present, no prose is associated with the track. The UI view for prose should not be displayed.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fverkaro%2Fxspf-prose","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fverkaro%2Fxspf-prose","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fverkaro%2Fxspf-prose/lists"}