diff --git a/podcast.xsd b/podcast.xsd new file mode 100644 index 0000000..e0a9687 --- /dev/null +++ b/podcast.xsd @@ -0,0 +1,378 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + This tag is used to link to a transcript or closed captions file. Multiple tags can be present for multiple transcript formats. + + + + + + URL of the podcast transcript. + + + + + + Mime type of the file such as text/plain, text/html, application/srt, text/vtt, application/json + + + + + + The language of the linked transcript. If there is no language attribute given, the linked file is assumed to be the same language that is specified by the RSS language element. + + + + + + If the rel="captions" attribute is present, the linked file is considered to be a closed captions file, regardless of what the mime type is. In that scenario, time codes are assumed to be present in the file in some capacity. + + + + + + + + + T + his tag may be set to yes or no. The purpose is to tell other podcast platforms whether they are allowed to import this feed. A value of yes means that any attempt to import this feed into a new platform should be rejected. + + + + + + + + + The owner attribute is an email address that can be used to verify ownership of this feed during move and import operations. This could be a public email or a virtual email address at the hosting provider that redirects to the owner's true email address. This is a critical element, and it's expected that podcast hosting providers (if not providing virtual addresses) will allow setting this element's value in their GUI with an emphasis to their users of how important it is to have this be a valid, working email address. + + + + + + + + + + + + This tag lists possible donation/funding links for the podcast. The content of the tag is the recommended string to be used with the link. + + + + + + + + + The URL to be followed to fund the podcast. + + + + + + + + + + + + Links to an external file (see example file) containing chapter data for the episode. See the jsonChapters.md file for a description of the chapter file syntax. And, see the example.json example file for a real world example. + + + + + + + The URL where the chapters file is located. + + + + + + + Mime type of file - JSON prefered, 'application/json+chapters'. + + + + + + + + + + Mime type of file - JSON prefered, 'application/json+chapters'. + + + + + + + + + The time where the soundbite begins + + + + + + + How long is the soundbite (recommended between 15 and 120 seconds) + + + + + + + Used as free form string from the podcast creator to specify a title for the soundbite (null defaults to episode title) + + + + + + + + + + + + This element specifies a person of interest to the podcast. It is primarily intended to identify people like hosts, co-hosts and guests. Although, it is flexible enough to allow fuller credits to be given using the roles and groups that are listed in the Podcast Taxonomy Project + + + + + + + + This is the full name or alias of the person. This value cannot be blank. + + + + + + Used to identify what role the person serves on the show or episode. This should be a reference to an official role within the Podcast Taxonomy Project list (see below). If role is missing then "host" is assumed. + + + + + + + This should be a reference to an official group within the Podcast Taxonomy Project list. If group is not present, then "cast" is assumed. + + + + + + + This is the url of a picture or avatar of the person. + + + + + + + The url to a relevant resource of information about the person, such as a homepage or third-party profile platform. Please see the example feed for possible choices of what to use here. + + + + + + + + + + + + This tag is intended to describe the location of editorial focus for a podcast's content (i.e. "what place is this podcast about?"). The tag has many use cases and is one of the more complex ones. You are highly encouraged to read the full implementation document before starting to code for it. + + + + + + + + + This is a latitude and longitude given in "geo" notation (i.e. "geo:30.2672,97.7431"). Optional but recommended. + + + + + + + The Open Street Map identifier of this place, given using the OSM notation (i.e. "R113314"). Optional but recommended. + + + + + + + + + + + + This element allows for identifying which episodes in a podcast are part of a particular "season", with an optional season name attached. + + + + + + + + + This is the "name" of the season. If this attribute is present, applications are free to not show the season number to the end user, and may use it simply for chronological sorting and grouping purposes. Please do not exceed 128 characters for the name attribute. + + + + + + + + + + + + + + + This element exists largely for compatibility with the season tag. But, it also allows for a similar idea to what "name" functions as in that element. + + + + + + + + + If this attribute is present, podcast apps and aggregators are encouraged to show it's value instead of the purely numerical node value. This attribute is a string. Please do not exceed 32 characters for the display attribute. + + + + + + + + + + + + + + + designates the cryptocurrency or payment layer that will be used, the transport method for transacting the payments, and a suggested amount denominated in the given cryptocurrency. + + + + + + + + + + A free-form string that designates who or what this recipient is. Recommended. + + + + + + + The name of a custom record key to send along with the payment. + + + + + + + A custom value to pass along with the payment. This is considered the value that belongs to the customKey. + + + + + + + A slug that represents the type of receiving address that will receive the payment. + + + + + + + This denotes the receiving address of the payee. + + + + + + + The number of shares of the payment this recipient will receive. + + + + + + + The fee attribute tells apps whether this split should be treated as a "fee", or a normal split. + + + + + + + + + + This is the service slug of the cryptocurrency or protocol layer. + + + + + + + This is the transport mechanism that will be used. + + + + + + + This is an optional suggestion on how much cryptocurrency to send with each payment. + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/proposal-docs/xml-schema/podcast-schema.md b/proposal-docs/xml-schema/podcast-schema.md index 45087d5..6e63c32 100644 --- a/proposal-docs/xml-schema/podcast-schema.md +++ b/proposal-docs/xml-schema/podcast-schema.md @@ -2,11 +2,13 @@ A schema in XML is a definition of the elements and attributes in a particular realm known as a namespace. The namespace for the Podcast Index extension is `https://podcastindex.org/namespace/1.0`. -The namespace has a formal definition, called the XML Schema (XSD), which is designed to be readable by a machine. It also has an informal definition, which is the list of elements and their function and use. This is human-readable, and helps the developer to understand the namespace elements' purpose and use. The Podcast Index informal schema is found at `https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md`. This was originally called the "document type definition", but has been renamed to avoid confusion with an older, less versatile, XML schema language of the same name. +The namespace has a formal definition, called the XML Schema (XSD), which is designed to be readable by a machine. It also has an informal definition, which is the list of elements and their function and use. This is human-readable, and helps the developer to understand the namespace elements' purpose and use. The Podcast Index informal schema is found at `https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md`. This was originally called the "document type definition", but has been renamed to avoid confusion with an older, less versatile, XML schema syntax of the same name. #Getting Started -First, you'll need have the formal XML Schema document (`podcast.xsd`) on your machine. When an XML document is created, it must have a root element. Since the Podcast namespace elements are designed to exist within the RSS document namespace, the Podcast namespace doesn't need, and doesn't have, a root element. +These instructions assume you are using Microsoft Visual Studio Code (https://code.visualstudio.com/download), a free programming editor. You'll also need the Redhat XML extension to VS Code, `redhat.vscode-xml`. This can be found from within the VS Code Marketplace or at https://marketplace.visualstudio.com/items?itemName=redhat.vscode-xml. + +Then, you'll need have the formal XML Schema document (`podcast.xsd`) on your machine. This is the formal specification of the Podcast Index namespace. To get started, you should know that, when an XML document is created, it must have a root element. Since the Podcast namespace elements are designed to exist within the RSS document namespace, the Podcast namespace doesn't need, and doesn't have, a root element. For this reason, there's another XML Schema document, `podcast-wrapper.xsd`. This is simply a wrapper schema that defines a non-canonical element called `` that acts as the root. Inside this element can appear any of the other Podcast Index namespace tags. The wrapper schema is strictly for understanding and manually authoring the tags of the Podcast Index. @@ -52,7 +54,7 @@ In the top of a document, you can specify the namespace and give it a (hopefully ```xml + xmlns:yearbook="http://yearbook.com/namespace"> Person in the Podcast namespace Person in the Yearbook namespace ``` @@ -63,7 +65,7 @@ Note that the namespace alias is local to the document. The following snippet is ```xml + xmlns:y="http://yearbook.com/namespace"> Person in the Podcast namespace Person in the Yearbook namespace ``` @@ -72,7 +74,7 @@ You can also specify a namespace to be the default namespace. Any element or att ```xml + xmlns="http://yearbook.com/namespace"> Person in the Podcast namespace Person in the Yearbook namespace ``` diff --git a/proposal-docs/xml-schema/strip-annotation.xslt b/proposal-docs/xml-schema/strip-annotation.xslt new file mode 100644 index 0000000..3261926 --- /dev/null +++ b/proposal-docs/xml-schema/strip-annotation.xslt @@ -0,0 +1,13 @@ + + + + + + + + + + + +