{"id":847,"date":"2008-05-05T18:56:56","date_gmt":"2008-05-05T16:56:56","guid":{"rendered":"http:\/\/notizblog.org\/?p=847"},"modified":"2024-04-12T12:22:17","modified_gmt":"2024-04-12T10:22:17","slug":"xrds-simple-eine-einfuehrung","status":"publish","type":"post","link":"https:\/\/notiz.blog\/2008\/05\/05\/xrds-simple-eine-einfuehrung\/","title":{"rendered":"XRDS-Simple, eine Einf\u00fchrung"},"content":{"rendered":"\n<p>Da <a href=\"https:\/\/web.archive.org\/web\/20090227100639\/http:\/\/xrds-simple.net\/\">XRDS-Simple<\/a> auch eine zentrale Rolle bei <a href=\"https:\/\/de.wikipedia.org\/wiki\/Dataportability#Das_Projekt\">DataPortability<\/a> spielen wird, hab ich mir das Format <a href=\"https:\/\/notiz.blog\/2008\/04\/15\/xrds-simple-und-dataportability\/\">nochmal<\/a> vorgenommen. (Im folgenden Text setze ich, der Einfachheit halber, XRDS mit XRDS-Simple gleich auch wenn es technisch nicht ganz korrekt ist)<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/notiz.blog\/wp-content\/uploads\/2008\/05\/xrds-simple-large.png\" alt=\"XRDS-Simple-Large.png\"\/><\/figure><\/div>\n\n\n\n<p>XRDS-Simple ist in erster Linie eine <strong>einfache<\/strong> Form der Service-Discovery, von der Idee her \u00e4hnlich wie z.B. die <a href=\"https:\/\/de.wikipedia.org\/wiki\/Web_Services_Description_Language\">Web Services Description Language<\/a> (WSDL).<br\/> XRDS beschr\u00e4nkt sich, im Gegensatz zu dem wesentlich komplexeren <abbr title=\"Web Services Description Language\">WSDL<\/abbr>, auf die Beschreibung der Service <abbr title=\"Uniform Resource Locator\">URL<\/abbr>s\/<abbr title=\"Uniform Resource Identifier\">URI<\/abbr>s und wie man sie nutzt (<a href=\"https:\/\/en.wikipedia.org\/wiki\/HTTP\">POST oder GET<\/a>).<\/p>\n\n\n\n<p>Vom Aufbau her ist XRDS-Simple dem <a href=\"https:\/\/web.archive.org\/web\/20120101104945\/http:\/\/yadis.org:80\/wiki\/Yadis_1.0_(HTML)\">YADIS Format<\/a> (OpenID-Autodetection) sehr \u00e4hnlich:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">XRDS<\/span> <span class=\"hljs-attr\">xmlns<\/span>=<span class=\"hljs-string\">\"xri:\/\/$xrds\"<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">XRD<\/span> <span class=\"hljs-attr\">xmlns:simple<\/span>=<span class=\"hljs-string\">\"http:\/\/xrds-simple.net\/core\/1.0\"<\/span>\n          <span class=\"hljs-attr\">xmlns<\/span>=<span class=\"hljs-string\">\"xri:\/\/$XRD*($v*2.0)\"<\/span> <span class=\"hljs-attr\">version<\/span>=<span class=\"hljs-string\">\"2.0\"<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">Type<\/span>&gt;<\/span>xri:\/\/$xrds*simple<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">Type<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">Service<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">Type<\/span>&gt;<\/span>http:\/\/example.net\/some_type<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">Type<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">URI<\/span> <span class=\"hljs-attr\">simple:httpMethod<\/span>=<span class=\"hljs-string\">\"POST\"<\/span>&gt;<\/span>\n        http:&#47;&#47;example.com\/resource\n      <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">URI<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">Service<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">XRD<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">XRDS<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Der wichtigste Teil eines <code>Services<\/code> ist der <code>Type<\/code> welcher den Typ der URI beschreibt und die <code>URI<\/code> welche beschreibt unter welcher URI der Service zu erreichen ist.<\/p>\n\n\n\n<p>Ein paar Beispiele f\u00fcr ein paar klassische Services:<\/p>\n\n\n\n<dl>\n<dt>FOAF<\/dt>\n<dd>\n<dl>\n<dt>type<\/dt>\n<dd>http:\/\/xmlns.com\/foaf\/0.1\/<\/dd>\n<dt>url<\/dt>\n<dd>https:\/\/web.archive.org\/web\/20090825215938\/http:\/\/www.mybloglog.com:80\/buzz\/members\/pfefferle\/foaf\/<\/dd>\n<\/dl>\n<\/dd>\n<dt>hCard<\/dt>\n<dd>\n<dl>\n<dt>type<\/dt>\n<dd>http:\/\/purl.org\/uF\/hCard\/1.0\/<\/dd>\n<dt>url<\/dt>\n<dd>https:\/\/web.archive.org\/web\/20100413121636\/http:\/\/www.mybloglog.com:80\/buzz\/members\/pfefferle\/hcard<\/dd>\n<\/dl>\n<\/dd>\n<dt>APML<\/dt>\n<dd>\n<dl>\n<dt>type<\/dt>\n<dd>https:\/\/github.com\/apml\/spec-0.6<\/dd>\n<dt>url<\/dt>\n<dd>http:\/\/notizblog.org\/apml\/<\/dd>\n<\/dl>\n<\/dd>\n<dt>OPML<\/dt>\n<dd>\n<dl>\n<dt>type<\/dt>\n<dd>http:\/\/www.opml.org\/spec2<\/dd>\n<dt>url<\/dt>\n<dd>http:\/\/ma.gnolia.com\/opml\/default\/people\/pfefferle<\/dd>\n<\/dl>\n<\/dd>\n<\/dl>\n\n\n\n<p>Neben dem <code>&lt;Type><\/code> kann f\u00fcr die URI auch noch ein <code>&lt;MediaType><\/code> (nichts anderes als der <abbr title=\"Multipurpose Internet Mail Extensions\">MIME<\/abbr>-Type (<a href=\"https:\/\/datatracker.ietf.org\/doc\/html\/rfc2046\">RFC2046<\/a>)) gesetzt werden, der beschreibt um was es sich bei dem Verlinkten handelt. <\/p>\n\n\n\n<p>Beispiel: <code>&lt;MediaType>text\/html&lt;\/MediaType><\/code><\/p>\n\n\n\n<p>Mit diesem einfachen Prinzip lassen sich auf einfache Weise nahezu alle Services beschreiben.<\/p>\n\n\n\n<p>Vorteile von XRDS-Simple? Meiner Meinung nach gibt es zwei wesentliche Gr\u00fcnde XRDS einzusetzen.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Einheitliche Erkennung<\/h4>\n\n\n\n<p>XRDS vereinfacht die automatische Service-Erkennung, da nur noch ein Meta-Tag interpretiert werden muss:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">meta<\/span> <span class=\"hljs-attr\">http-equiv<\/span>=<span class=\"hljs-string\">\"X-XRDS-Location\"<\/span> <span class=\"hljs-attr\">content<\/span>=<span class=\"hljs-string\">\"http:\/\/example.com\/xrds\"<\/span> \/&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>statt jeder Meta-Tag einzeln:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">link<\/span> <span class=\"hljs-attr\">rel<\/span>=<span class=\"hljs-string\">\"meta\"<\/span> <span class=\"hljs-attr\">type<\/span>=<span class=\"hljs-string\">\"text\/xml\"<\/span> <span class=\"hljs-attr\">title<\/span>=<span class=\"hljs-string\">\"APML\"<\/span> <span class=\"hljs-attr\">href<\/span>=<span class=\"hljs-string\">\"...\"<\/span> \/&gt;<\/span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">link<\/span> <span class=\"hljs-attr\">rel<\/span>=<span class=\"hljs-string\">\"meta\"<\/span> <span class=\"hljs-attr\">type<\/span>=<span class=\"hljs-string\">\"text\/xml\"<\/span> <span class=\"hljs-attr\">title<\/span>=<span class=\"hljs-string\">\"OPML\"<\/span> <span class=\"hljs-attr\">href<\/span>=<span class=\"hljs-string\">\"...\"<\/span> \/&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>One file to detect them all \ud83d\ude42<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Information Hiding<\/h4>\n\n\n\n<p>Ein weiterer wesentlicher Aspekt der Autodetection ist die Sicherheit&#8230; nicht jeder m\u00f6chte seine Attention-Daten (<abbr title=\"Attention Profiling Mark-up Language\"><a href=\"https:\/\/web.archive.org\/web\/20071001030709\/http:\/\/www.apml.org\/\">APML<\/a><\/abbr>) oder seine hCard frei zur Verf\u00fcgung stellen. \u00dcber XRDS-Simple ist es m\u00f6glich, diese Informationen zu b\u00fcndeln und z.B. nur \u00fcber <a href=\"https:\/\/web.archive.org\/web\/20110714022430\/http:\/\/www.axschema.org:80\/\">OpenID AX<\/a> oder <a href=\"http:\/\/oauth.net\/\">OAuth<\/a> zug\u00e4nglich zu machen.<\/p>\n\n\n\n<p>Ein Beispiel dazu: <a href=\"https:\/\/notiz.blog\/2008\/04\/15\/xrds-simple-und-dataportability\/#service-catalogue\">XRDS-Simple als zentraler ServiceCatalogue<\/a><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">OAuth discovery<\/h4>\n\n\n\n<p>Der Vollst\u00e4ndigkeit halber sollte man erw\u00e4hnen dass XRDS-Simple eigentlich ein &#8222;Nebenprodukt&#8220; von <a href=\"https:\/\/web.archive.org\/web\/20080911024320\/http:\/\/oauth.net\/discovery\/\">OAuth Discovery<\/a> ist.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>The first draft of OAuth Discovery published four months ago started a dialog and was the main driver behind the development of XRDS-Simple. <a href=\"https:\/\/web.archive.org\/web\/20081028193606\/http:\/\/www.hueniverse.com:80\/hueniverse\/2008\/04\/oauth-discovery.html\">#<\/a><\/p><\/blockquote>\n\n\n\n<p>Mehr zu diesem Thema bei <a href=\"https:\/\/web.archive.org\/web\/20081028193606\/http:\/\/www.hueniverse.com:80\/hueniverse\/2008\/04\/oauth-discovery.html\">hueniverse<\/a> oder <a href=\"http:\/\/factoryjoe.com\/blog\/2008\/04\/08\/oauth-discovery-10-draft-2-released-with-support-from-magnolia-fire-eagle-and-satisfaction\/\">Chris Messina<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Da XRDS-Simple auch eine zentrale Rolle bei DataPortability spielen wird, hab ich mir das Format nochmal vorgenommen. (Im folgenden Text setze ich, der Einfachheit halber, XRDS mit XRDS-Simple gleich auch wenn es technisch nicht ganz korrekt ist) XRDS-Simple ist in erster Linie eine einfache Form der Service-Discovery, von der Idee her \u00e4hnlich wie z.B. die [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"webmentions_disabled_pings":false,"webmentions_disabled":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":4,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"federated","footnotes":""},"categories":[2],"tags":[5171,467,574,593],"class_list":{"0":"post-847","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-web","7":"tag-fediblog","8":"tag-service","9":"tag-xrds","10":"tag-xrds-simple","11":"h-entry","12":"hentry"},"_links":{"self":[{"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/posts\/847","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/comments?post=847"}],"version-history":[{"count":5,"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/posts\/847\/revisions"}],"predecessor-version":[{"id":25262,"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/posts\/847\/revisions\/25262"}],"wp:attachment":[{"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/media?parent=847"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/categories?post=847"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/tags?post=847"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}