APIs, Geotagging & XML / RSS – @ SAE Institute – Bjoern Zapadlo



APIs, Geotagging & XML / RSS – @ SAE Institute – Bjoern Zapadlo

1 0


sae-api-geotagging-xml-rss


On Github gmb2012 / sae-api-geotagging-xml-rss

APIs, Geotagging & XML / RSS

8.09.2015 @ SAE Institute

Bjoern Zapadlo

About me

Bjoern Zapadlo Konstanz36 Jahre

Development Manager / Consultant @ HolidayCheck AG

Informatik Studium 1999 - 2002 3 Agenturen in Stuttgart

HolidayCheck International Websites / new Framework Neckermann / Thomas Cook

Dozent an der SAE, Dualen Hochschule Stuttgart, Hochschule Furtwangen

PHP, Java, Scala, Javascript, CSS, Html,MySQL, MongoDB, Elasticsearch, ...

Seit über 15 Jahren im Web unterwegs

Contact me

bjoern.zapadlo@gmail.com http://www.zapadlo.de

@BjoeZap

https://www.xing.com/profile/Bjoern_Zapadlo http://de.linkedin.com/pub/bjoern-zapadlo/36/889/1a5

Facebook Google+

HolidayCheck AG

Größtes deutsches Meinungsportal für Reise und Urlaub Vermittlung von Reisen Sitz in der Schweiz, direkt am Bodensee Börsennotiert über Tomorrow Focus AG Existiert seit 1999 Ausgründungen in mehreren europäischen Ländern Über 330 Mitarbeiter

Yes, we hire ;)

http://www.holidaycheck.de/jobs

Jetzt aber Schluss mit der Werbung... ;)

Und ihr?

Name, Erwartungen, Kenntnisse

Agenda

XML Geotagging APIs Q&A

XML

Agenda

Warum? Aufbau Übung XML Validität CSS Suchen Transformation Namensräume XML-Sprachen Einsatzgebiete XHTML RSS Podcasts Übung RSS

Warum XML

Wer von euch hat heute schon XML benutzt?

Auf Facebook gewesen

Adressen oder Termine auf dem Handy synchronisiert

Google Earth oder Maps benutzt

Ein Office Dokument geschrieben

Im Internet gesurft

and much more

Das Problem

Strukturierung und Auszeichnung von Text

Das Wort fett soll fett sein

Hier möchte ich gerne

einen Absatz haben

Die Lösung?

Das Wort FETTSTARTfettFETTSTOP soll fett sein

Hier möchte ich gerneABSATZeinen Absatz haben
                        

Naja, fast

Eine spezielle Maskierung zur Abgrenzung von Nutz und Strukturierungsdaten muss her

Das Tag ist <geboren>

Auszeichnungssprachen

Eine Auszeichnungssprache (englisch: Markup Language, ML) dient zur Beschreibung des Inhalts eines Dokumentenformates und teilweise zur Beschreibung des Verfahrens, welches zur Bearbeitung dieser Daten benötigt wird. Ursprünglich dienten die Auszeichnungen im Text als Anweisungen für die Setzer im Drucksatz, mit der Weiterentwicklung in der Typografie für digitale Texte wurden daraus jedoch komplexe Sprachen.

Sind keine Programmiersprachen (PHP, ...) meistens ;)

Können trotzdem sehr komplex sein

Sind Dank des Internets sehr populär

Das erste XML Dokument

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<verzeichnis>
    <titel>Wikipedia Städteverzeichnis</titel>
    <eintrag>
        <stichwort>Genf</stichwort>
        <eintragstext>Genf ist der Sitz von ...</eintragstext>
    </eintrag>
    <eintrag>
        <stichwort>Köln</stichwort>
        <eintragstext>Köln ist eine Stadt, die ...</eintragstext>
    </eintrag>
</verzeichnis>
                        

Was kann XML?

Semantik

Durch die Auszeichnung wird z.B. eine Überschrift zur Überschrift

Maschinenlesbarkeit

Durch die Auszeichnung kann eine (Such)Maschine Texte und deren Bedeutung interpretieren

Menschenlesbarkeit

Okay, es gibt Sachen, die machen mehr Spass

Wofür

Datenaustausch (in heterogenen Systemen)

Datenbankersatz

Vor- & Nachteile

Vorteile

Einfach & Flexibel

Menschen und Maschinenlesbar

Es ist Text

Nachteile

Es ist Text: Encoding, Escaping von Steuerzeichen

Kann Komplex werden

Performance

Overhead

Geschichte von XML

Vorgänger SGML (ISO 8879:1986): Standard Generalized Markup Language IBM Forschungsprojekt sehr flexibel aber komplex und performancehungrig

1989 für das CERN HTML Tim Berners-Lee Einfach, aber unsauber, extreme Verbreitung Versionschaos, dann Standartisierung durch das W3C

Parallel XML Vereinfachtes SGML

XML + HTML = XHTML

Standards

Standardisiert vom W3C

1.0 (5th Edition)

1.1 (2nd Edition)

Aufbau

Das erste XML Dokument (nochmal)

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<verzeichnis>
    <titel>Wikipedia Städteverzeichnis</titel>
    <eintrag>
        <stichwort>Genf</stichwort>
        <eintragstext>Genf ist der Sitz von ...</eintragstext>
    </eintrag>
    <eintrag>
        <stichwort>Köln</stichwort>
        <eintragstext>Köln ist eine Stadt, die ...</eintragstext>
    </eintrag>
</verzeichnis>
                        

Physische Strukutur

XML-Deklaration

Eine XML-Deklaration ist eine Erkennungszeichenfolge im Prolog einer XML-Datei

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
                        

version="1.0"

definiert die Versionsnummer der zugrundeliegenden XML-Spezifikation. Sinnvolle Werte sind momentan 1.0 und 1.1. Der Parameter version muss stets angegeben werden.

encoding="Zeichenkodierung"

bestimmt die Kodierung der XML-Datei. Wird dieser Parameter ausgelassen, wird UTF-8 angenommen. Zu beachten ist, dass der Wert von encoding vom Parser unterstützt werden muss.

standalone="yes|no"

Eher selten verwendet. Gültige Werte sind yes oder no. Wird der Parameter standalone ausgelassen, wird der Standardwert no angenommen. Der Attributwert yes wird verwendet, wenn ein Dokument über keine DTD verfügt. Des Weiteren kann sich die DTD auch in derselben Datei befinden.

Entitäten

Die XML-Datei selbst

Entitätenreferenzen

Verknüpfungen auf wiederkehrende Zeichenketten und ganze Dateien

Standard-Entitäten:

&apos; = ' &amp; = & &quot; = " &lt; = < &gt; = >

Entitätenreferenzen

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!ENTITY c "Chris">
<!ENTITY chap1 SYSTEM "chapter-1.xml">
<verzeichnis>
    <titel>Hallo &c;</titel>
    <!-- Pull in the chapter content: -->
    &chap1;
</verzeichnis>
                        

DTD

Eine Dokumenttypdefinition (englisch Document Type Definition, DTD, auch Schema-Definition oder DOCTYPE) ist ein Satz an Regeln, der benutzt wird, um Dokumente eines bestimmten Typs zu deklarieren.

<?xml version="1.0" standalone="no"?>
<!DOCTYPE hallo SYSTEM "hallo.dtd">
<hallo>Hallo Welt!</hallo>
                        

Logische Struktur

Der logische Aufbau entspricht einer Baumstruktur und ist damit hierarchisch organisiert.

Verarbeitungsanweisung

Verarbeitungsanweisung (engl. processing instruction) oder auch Steueranweisung ist ein Konstrukt von SGML und XML, um Daten abzulegen, die an eine bestimmte (XML-)Anwendung gerichtet ist.

Eine XML-Deklaration ist keine Verarbeitungsanweisung, auch wenn sie genauso aussieht.

<?xml-stylesheet type="text/xsl" href="show_book.xsl"?>
                            

Elemente

Auszeichnung via Start- und End-Tag oder einem sog. Empty-Element-Tag

<Tag-Name></Tag-Name>
<Empty-Element />
                        

Attribute

Attribute als bei einem Start-Tag oder Empty-Element-Tag geschriebene Schlüsselwort-Werte-Paare (Attribut-Name="Attribut-Wert") für Zusatz-Informationen über Elemente

<Tag-Name attribute-key="attribute-value"></Tag-Name>
<Empty-Element attribute-key="attribute-value" />
                            

Text

Normaler Text ;) bzw. die Nutzinformation

<Tag-Name>ganz normaler Text</Tag-Name>
                        

CDATA

Mit einem CDATA(Akronym für engl. character data „Zeichendaten“)-Abschnitt wird einem Parser mitgeteilt, dass kein Markup folgt, sondern normaler Text. Dieser wird nicht interpretiert und kann daher auch "illegales" XML (Tags, Sonderzeichen, ...) enthalten.

<Tag-Name>
    <![CDATA[ Inhalt ]]>
    </Tag-Name>
    <Tag-Name>
    <![CDATA[ Inhalt]] ]]><![CDATA[ >Inhalt ]]>
</Tag-Name>
                            

Kommentare

<!-- Kommentar-Text -->
                        

Regeln für XML

XML-Deklaration muss vorhanden sein

Baumstruktur muss eingehalten werden: Wurzelelement darf genau einmal vorhanden sein Tags müssen geschlossen und die korrekte Verschachtelung muss eingehalten werden XML ist „Case Sensitive“ und nicht auf ASCII beschränkt

Kommentare müsssen korrekt sein

Der Zeichensatz sollte angegeben werden

"Wohlgeformt"

Wenn keine Regel Verletzt wird. Prüfung erfolgt durch den XML-Parser

Klassifizierung

dokumentzentriert

Das Dokument ist an ein Textdokument angelehnt, das für den menschlichen Leser größtenteils auch ohne die zusätzliche Metainformation verständlich ist. XML-Elemente werden hauptsächlich zur semantischen Markierung von Passagen des Dokuments genutzt, das Dokument ist nur schwach strukturiert. Aufgrund der schwachen Strukturierung ist eine maschinelle Verarbeitung schwierig.

datenzentriert

Das Dokument ist hauptsächlich für die maschinelle Verarbeitung bestimmt. Es folgt einem Schema, das Entitäten eines Datenmodells beschreibt und definiert, in welcher Beziehung die Entitäten zueinander stehen, sowie, welche Attribute die Entitäten haben. Das Dokument ist somit stark strukturiert und für den unmittelbaren menschlichen Gebrauch weniger geeignet.

semistrukturiert

Semistrukturierte Dokumente stellen eine Art Mischform dar, die stärker strukturiert ist als dokumentzentrierte Dokumente, aber schwächer als datenzentrierte Dokumente.

Übung XML

Die Filmdatenbank

PHP: Zugriff via DOM

PHP: Zugriff via Simple-XML

Javascript: Zugriff via AJAX & native JS

Javascript: Zugriff via JQUERY

Validität

Definition

Soll XML für den Datenaustausch verwendet werden, ist es von Vorteil, wenn das Format mittels einer Grammatik (z. B. einer Dokumenttypdefinition oder eines XML-Schemas) definiert ist. Der Standard definiert ein XML-Dokument als gültig (oder englisch valid), wenn es wohlgeformt ist, den Verweis auf eine Grammatik enthält und das durch die Grammatik beschriebene Format einhält.

DTD

Eine Dokumenttypdefinition (englisch Document Type Definition, DTD, auch Schema-Definition oder DOCTYPE) ist ein Satz an Regeln, der benutzt wird, um Dokumente eines bestimmten Typs zu deklarieren. Ein Dokumenttyp ist dabei eine Klasse ähnlicher Dokumente, wie beispielsweise Telefonbücher oder Inventurdatensätze. Die Dokumenttypdefinition besteht dabei aus Elementtypen, Attributen von Elementen, Entitäten und Notationen.

Konkret heißt das, dass in einer DTD die Reihenfolge, die Verschachtelung der Elemente und die Art des Inhalts von Attributen festgelegt wird – kurz gesagt: die Struktur des Dokuments.

Diese können direkt im XML-Dokument definiert werden oder von dort verlinkt werden.

XML-Dokument

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE  Person SYSTEM "toll.dtd">

<Person>
    <Name>Manfred Müller</Name>
    <Kind>
        <Name>Olivia Müller</Name>
    </Kind>
    <Kind>
        <Name>Marc Müller</Name>
    </Kind>
</Person
                        

DTD

<!ELEMENT Person (Name, Kind*)>
<!ELEMENT Kind (Name)>
<!ELEMENT Name (#PCDATA)>
                        

Aha...

Diese DTD sagt aus, dass es ein Element Person gibt, mit den Unterelementen Name und Kind, wobei Kind öfter als einmal vorkommen darf. Desweiteren bestimmt diese DTD, dass Name mit Text oder weiteren Unterknoten gefüllt sein darf während CDATA für reinen Text steht.

XSD

XML Schema, abgekürzt XSD (XML Schema Definition), ist eine Empfehlung des W3C zum Definieren von Strukturen für XML-Dokumente. Anders als bei den klassischen XML-DTDs wird die Struktur in Form eines XML-Dokuments beschrieben. Darüber hinaus wird eine große Anzahl von Datentypen unterstützt.

XML Schema beschreibt in einer komplexen Schemasprache Datentypen, einzelne XML-Schema-Instanzen (Dokumente) und Gruppen solcher Instanzen. Ein konkretes XML Schema wird auch als eine XSD (XML Schema Definition) bezeichnet und hat als Datei üblicherweise die Endung „.xsd“.

XML-Dokument

...
<pc-Typ>
    <name>Ein Name, aber Element ist optional</name>
    <hersteller>Ein Hersteller, aber Element ist optional</hersteller>
    <id>123</id>
</pc-Typ>
...
                        

XSD

<xsd:complexType name="pc-Typ">
    <xsd:sequence>
        <xsd:element name="name" type="xsd:string"/>
        <xsd:element name="hersteller" type="xsd:string"/>
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:integer"/>
</xsd:complexType>
                        

CSS

XML und CSS

Analog zu Html lassen sich auch XML Dokument mit CSS stylen. Die Interpretation erfolgt dann z.B. per Browser, welcher XML darstellen kann. Allerdings ist das ein eher ungebräuchlicher Ansatz.

So sieht es aus...

XML-Dokument

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/css" href="cd_catalog.css"?>
<CATALOG>
    <CD>
        <TITLE>Empire Burlesque</TITLE>
        <ARTIST>Bob Dylan</ARTIST>
        <COUNTRY>USA</COUNTRY>
        <COMPANY>Columbia</COMPANY>
        <PRICE>10.90</PRICE>
        <YEAR>1985</YEAR>
    </CD>
    .
    .
    .
</CATALOG>
                        

CSS-Datei

CATALOG {
    background-color: #ffffff;
    width: 100%;
}
CD {
    display: block;
    margin-bottom: 30pt;
    margin-left: 0;
}
TITLE {
    color: #FF0000;
    font-size: 20pt;
}
                        

Suchen

XPath

Die XML Path Language (XPath) ist eine vom W3-Konsortium entwickelte Abfragesprache, um Teile eines XML-Dokumentes zu adressieren. XPath dient als Grundlage einer Reihe weiterer Standards wie XSLT, XPointer und XQuery.

Ein XPath-Ausdruck adressiert Teile eines XML-Dokuments, das dabei als Baum betrachtet wird.

XML-Dokument

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<dok>
    <kap title="Nettes Kapitel">
        <pa>Ein Absatz</pa>
        <pa>Noch ein Absatz</pa>
        <pa>Und noch ein Absatz</pa>
        <pa>Nett, oder?</pa>
    </kap>
    <kap title="Zweites Kapitel">
        <pa>Ein Absatz</pa>
        <pa format="bold">Erste Zeile</pa>
        <pa format="bold">Zweite Zeile</pa>
        <pa format="italic">Dritte Zeile</pa>
    </kap>
</dok>
                        

XPath Beispiele

Ausdruck selektiert ... /dok das erste Element dok /* das Wurzel-Element unabhängig vom Namen (jedes wohlgeformte XML-Dokument hat genau ein Wurzel-Element) //dok/kap alle kap-Elemente innerhalb eines dok Elements //dok/kap[1] erstes kap-Element innerhalb eines dok Elements //pa alle pa-Elemente auf allen Ebenen //kap[@title='Nettes Kapitel']/pa alle Absätze der Kapitel mit Titel „Nettes Kapitel“. //kap/pa[2] Jeweils das zweite pa-Element in den beiden Kapiteln. //kap[2]/pa[2][@format='bold'] Zweite Zeile mit dem Format 'bold' im 2. Kapitel.
child::* alle Kindelemente des gegenwärtigen Knotens child::pa alle pa-Kinder des gegenwärtigen Knotens child::text() alle Textknoten des gegenwärtigen Knotens . der gegenwärtige Knoten ./* alle Unterelemente des gegenwärtigen Knotens ./pa alle pa-Kinder des gegenwärtigen Knotens pa alle pa-Kinder des gegenwärtigen Knotens attribute::* alle Attribute des gegenwärtigen Knotens namespace::* alle Namespaces des gegenwärtigen Knotens

Transformation

Umwandlung von XML-Dokumenten

XSLT

XSL Transformation, kurz XSLT, ist eine vollständige Programmiersprache zur Transformation von XML-Dokumenten. Sie ist Teil der Extensible Stylesheet Language (kurz XSL, eine in XML notierte Familie von Transformationssprachen zur Definition von Layouts für XML-Dokumente).

XSLT baut auf der logischen Baumstruktur eines XML-Dokumentes auf und dient zur Definition von Umwandlungsregeln. XSLT-Programme, sogenannte XSLT-Stylesheets, sind dabei selbst nach den Regeln des XML-Standards aufgebaut.

Die Stylesheets werden von spezieller Software, den XSLT-Prozessoren, eingelesen, die mit diesen Anweisungen ein oder mehrere XML-Dokumente in das gewünschte Ausgabeformat umwandeln. XSLT-Prozessoren sind auch in vielen modernen Webbrowsern (Benutzung per Javascript) integriert.

Das Ergebnis der Transformation kann XML oder ein beliebiges anderes Format sein, z.B. HTML, PDF, Text, ...

XML-Dokument + XSLT-Stylesheet => XSLT-Prozessor = neues Dokument

So sieht es aus...

XML-Dokument

<?xml version="1.0" encoding="ISO-8859-1"?>
<catalog>
    <cd>
        <title>Empire Burlesque</title>
        <artist>Bob Dylan</artist>
        <country>USA</country>
        <company>Columbia</company>
        <price>10.90</price>
        <year>1985</year>
    </cd>
    ...
</catalog>
                        

XSLT-Stylesheet

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <html><body>
        <h2>My CD Collection</h2>
        <table border="1">
        <tr bgcolor="#9acd32"><th>Title</th><th>Artist</th></tr>
        <xsl:for-each select="catalog/cd">
        <tr><td><xsl:value-of select="title" /></td><td><xsl:value-of select="artist" /></td></tr>
        </xsl:for-each>
        </table>
        </body></html>
    </xsl:template>
</xsl:stylesheet>
                    

Namensräume

Problemstellung

Mischung mehrere XML-Sprachen in einem Dokument.

Überschneidung bei den Tag-Names

Wer soll welches Tag bearbeiten

Siehe Telefon-Vorwahl ;)

Vorsicht: DTDs unterstützen dies nicht

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:svg="http://www.w3.org/2000/svg">
...
<p>Und noch ein kleines Bild dazu:</p>

<svg:svg>
    <svg:rect x="0" y="0" width="1"  height="1" />
</svg:svg>
                        

XML-Sprachen

Im Zusammenhang mit XML wurden vom W3-Konsortium auf Basis von XML viele Sprachen definiert, welche XML-Ausdrücke für häufig benötigte allgemeine Funktionen anbieten wie etwa die Verknüpfung von XML-Dokumenten. Zahlreiche XML-Sprachen nutzen diese Grundbausteine.

Verknüpfung von XML-Ressourcen: XPointer, XLink und XInclude

Selektion von Daten aus einem XML-Datensatz: XQuery

Datenmanipulation in einem XML-Datensatz: XUpdate

Abfassen von elektronischen Formularen: XForms

Definition von XML-Datenstrukturen: XML Schema (= XSD, XML Schema Definition Language), DTD und RELAX NG

Signatur und Verschlüsselung von XML-Knoten: XML Signature und XML-Encryption

Aussagen zum formellen Informationsgehalt: XML Infoset

Formatierte Darstellung von XML-Daten: XSL-FO

Definition zum Methoden- bzw. Funktionsaufruf durch verteilte Systeme: XML-RPC

Standardisierte Attribute: XML Base und ID (DTD)

XML-basierte deklarative Programmiersprache: MXML

Einsatzgebiete

Text

DocBook DITA XHTML (XML-konformes HTML) TEI (Text Encoding Initiative) NITF (News Industry Text Format) OPML (Outline Processor Markup Language) OSIS (Open Scripture Information Standard) OpenDocument-Austauschformat (OASIS Open Document Format for Office Applications)

Grafik

SVG (Vektorgrafiken) X3D (3D-Modellierungssprache) Collada (Austauschformat für Daten zwischen verschiedenen 3D-Programmen)

Geodaten

Geography Markup Language (GML) GPS Exchange Format (GPX): XML für GPS-Daten Keyhole Markup Language (KML): Koordinaten-Spezifikation für Google Earth City Geography Markup Language (CityGML) OpenStreetMap (OSM)

Multimedia

MusicXML (Notendaten, aufgeschriebene Musik) SMIL (zeitsynchronisierte, multimediale Inhalte) MPEG-7 (MPEG-7 Metadaten) Laszlo (LZX)

Sicherheit

Security Assertion Markup Language (sicherheitsbezogene Informationen beschreiben und übertragen) XML Signature (XML-Schreibweise für digitale Signaturen) XML Encryption

Ingenieurwissenschaften

AutomationML, ein Format zur Speicherung von Anlagenplanungsdaten CAEX, ein Format zur Speicherung hierarchischer Objektinformationen GSDML, ein Format zur Beschreibung von Automatisierungsgeräten, die mit Profinet kommunizieren können IODD, ein Format zur Beschreibung von Sensoren und Aktoren

Weitere

Webservices (z. B. SOAP, WSDL und WS-*) Einbindung von Java-Code in XML-Dokumente (XSP) Synchronisation von Kalenderdaten SyncML mathematische Formeln (MathML) Repräsentation von Graphen (GraphML) Verfahren im Bereich des Semantischen Webs (RDF, OWL, Topic Maps, UOML) Service Provisioning (SPML) Austausch von Nachrichten (XMPP) Finanzberichten wie bspw. Jahresabschlüssen (XBRL) Automobilindustrie (ODX, MSRSW, AUTOSAR-Templates, QDX, JADM) automatisierter Test z. B. von Schaltkreisen (ATML) Landwirtschaft (AgroXML) Verlagswesen (ONIX) Chemie (CIDX) ...

XHTML

Definition

Der W3C-Standard Extensible HyperText Markup Language (erweiterbare HTML; Abkürzung: XHTML) ist eine textbasierte Auszeichnungssprache zur Strukturierung und semantischen Auszeichnung von Inhalten wie Texten, Bildern und Hyperlinks in Dokumenten. Es ist eine Neuformulierung von HTML 4.01 in XML: Im Gegensatz zu HTML, welche mittels SGML definiert wurde, verwendet XHTML die strengere und einfacher zu parsende SGML-Teilmenge XML als Sprachgrundlage. XHTML-Dokumente genügen also den Syntaxregeln von XML.

Unterschiede zu HTML

Tags immer klein geschrieben: <br />

Start- und Ende-Tag oder Empty-Element-Tag: <div></div>, <br />

Attributwert in Anführungszeichen angeben: <div class="bla">

Attributname als -wert angeben: <input type="radio" checked="checked" />

name Attribut wird durch id ersetzt

Vollständige Kopfdaten:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">
                            

RSS

RSS ist eine seit dem Anfang des Jahres 2000 kontinuierlich weiterentwickelte Familie von Formaten für die einfache und strukturierte Veröffentlichung von Änderungen auf Websites in einem standardisierten Format.

XML-basiert

Quasi-Standard (zusammen mit Atom)

Feeds sind meist in Channels organisiert

Rich Site Summary vs. RDF Site Summary vs. Really Simple Syndication

Versionen

1999: RSS 0.90

Erfinder: Netscape, basiert auf RDF (Resource Description Framework)

2000: RSS 0.91 - 0.94

basiert auf einfachem XML

2000: RSS 1.0

wieder RDF-basiert

2002: RSS 2.0

Basis ist 0.91, nicht RDF-basiert, Quasi-Standard, nicht vollständig abwärtskompatibel

Software

Blog-Software, z.B. Wordpress, um einen Feed anzubieten

Firefox für Live-Bookmarks

RSSReader (NewsRob, ...), zum on- und offline lesen

Aggregation mehrere Newsfeeds z.B. per Feedly oder früher (GoogleReader)

Aufbau (Version 2.0)

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
    <channel>
        <title>Titel des Feeds</title>
        <link>URL der Webpräsenz</link>
        <description>Kurze Beschreibung des Feeds</description>
        <language>Sprache des Feeds (z. B. "de-de")</language>
        <copyright>Autor des Feeds</copyright>
        <pubDate>Erstellungsdatum("Tue, 8 Jul 2008 2:43:19")</pubDate>
        <image>
            <url>URL einer einzubindenden Grafik</url>
            <title>Bildtitel</title>
            <link>URL, mit der das Bild verknüpft ist</link>
        </image>

        <item>
            <title>Titel des Eintrags</title>
            <description>Kurze Zusammenfassung des Eintrags</description>
            <link>Link zum vollständigen Eintrag</link>
            <author>Autor des Artikels, E-Mail-Adresse</author>
            <guid>Eindeutige Identifikation des Eintrages</guid>
            <pubDate>Datum des Items</pubDate>
        </item>

        <item>...</item>
    </channel>
</rss>
                        

Verknüpfung aus Html

Man kann eine RSS-Datei in der HTML-Seite, deren Inhalte sie maschinenlesbar enthält, verknüpfen. Dieses Verfahren wurde für RSS nie spezifiziert, allerdings können fast alle Aggregatorprogramme dadurch selbständig die Adresse des RSS-Feeds eines Webangebots herausfinden (genannt auto-discovery). Moderne Browser ermöglichen es dem Seitenbesucher, den so verknüpften RSS-Feed zu abonnieren. Beispielsweise wird in der Adress- oder Statusleiste des Browser-Fensters eine RSS-Schaltfläche angezeigt.

<link rel="alternate" type="application/rss+xml" title="RSS" href="http://www.example.net/feed.rss" />
                        

Atom

Atom Syndication Format (ASF) wird entwickelt, um die Nachfolge von RSS antreten

Atom entstand aus dem Bedürfnis heraus, die Vorteile der unterschiedlichen RSS-Formate in einem neuen Format zusammenzufassen und um neue Elemente zu ergänzen. Dabei haben die Entwickler – in überwiegender Mehrzahl Blogger – ASF auch so gestaltet, um den speziellen Bedürfnissen von Weblogs und Nachrichtenseiten gerecht zu werden. Die maßgeblichen Unterstützer von Atom sind in der Industrievereinigung AtomEnabled Alliance organisiert.

Die aktuelle Version des Atom Syndication Formats ist der IETF-Entwurf vom 11. August 2005, welcher von der IESG im August 2005 als Proposed Standard verabschiedet und im Dezember 2005 als RFC 4287 veröffentlicht wurde. Die meisten größeren Feed-Anbieter arbeiten bereits daran, das Format zu unterstützen. Der MIME-Typ von Atom ist application/atom+xml.

Podcasts

Was ist ein Podcast?

Podcasting bezeichnet das Anbieten abonnierbarer Mediendateien (Audio oder Video) über das Internet. Das Kofferwort setzt sich zusammen aus der englischen Rundfunkbezeichnung Broadcasting und der Bezeichnung für bestimmte tragbare MP3-Spieler, iPod, mit deren Erfolg Podcasts direkt verbunden sind und die heute stellvertretend für jegliche tragbare MP3-Spieler stehen. Ein einzelner Podcast besteht aus einer Serie von Medienbeiträgen (Episoden), die über einen News Feed (meistens RSS) automatisch bezogen werden können. Alternativ sind Podcasts auch unter dem markenneutralen Begriff Netcast bekannt.

Woraus besteht Podcast?

Ein Podcast besteht aus einer Reihe von Medien-Dateien (Audio / Video / Text) und einer XML-Meta-Datei, die diese referenziert.

Podcast-XML

<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:itunesu="http://www.itunesu.com/feed" version="2.0">
    <channel>
        <link>http://www.YourSite.com</link>
        <language>en-us</language>
        <copyright>&#xA9;2013</copyright>
        <webMaster>your@email.com (Your Name)</webMaster>
        <managingEditor>your@email.com (Your Name)</managingEditor>
        <image>
            <url>http://www.YourSite.com/ImageSize300X300.jpg</url>
            <title>Title or description of your logo</title>
            <link>http://www.YourSite.com</link>
        </image>
        <itunes:owner>
            <itunes:name>Your Name</itunes:name>
            <itunes:email>your@email.com</itunes:email>
        </itunes:owner>
            <itunes:category text="Education">
            <itunes:category text="Higher Education" />
        </itunes:category>
        <itunes:keywords>separate, by, comma, and, space</itunes:keywords>
        <itunes:explicit>no</itunes:explicit>
        <itunes:image href="http://www.YourSite.com/ImageSize300X300.jpg" />
        <atom:link href="http://www.YourSite.com/feed.xml" rel="self" type="application/rss+xml" />
        <pubDate>Sun, 01 Jan 2012 00:00:00 EST</pubDate>
        <title>Verbose title of the podcast</title>
        <itunes:author>College, school, or department owning the podcast</itunes:author>
        <description>Verbose description of the podcast.</description>
        <itunes:summary>Duplicate of above verbose description.</itunes:summary>
        <itunes:subtitle>Short description of the podcast - 255 character max.</itunes:subtitle>
        <lastBuildDate>Thu, 02 Feb 2012 00:00:00 EST</lastBuildDate>
        <item>
            <title>Verbose title of the newer episode</title>
            <description>Verbose description of the episode.</description>
            <itunes:summary>Duplicate of above verbose description.</itunes:summary>
            <itunes:subtitle>Short description of the episode - 255 character max.</itunes:subtitle>
            <itunesu:category itunesu:code="112" />
            <enclosure url="http://www.YourSite.com/FILE.EXT" type="audio/mpeg" length="1" />
            <guid>http://www.YourSite.com/FILE.EXT</guid>
            <itunes:duration>H:MM:SS</itunes:duration>
            <pubDate>Thu, 04 Feb 2012 00:00:00 EST</pubDate>
        </item>
        <item>
            <title>Verbose title of the episode</title>
            <description>Verbose description of the episode.</description>
            <itunes:summary>Duplicate of above verbose description.</itunes:summary>
            <itunes:subtitle>Short description of the episode - 255 character max.</itunes:subtitle>
            <itunesu:category itunesu:code="112" />
            <enclosure url="http://www.YourSite.com/FILE.EXT" type="audio/mpeg" length="1" />
            <guid>http://www.YourSite.com/FILE.EXT</guid>
            <itunes:duration>H:MM:SS</itunes:duration>
            <pubDate>Thu, 02 Feb 2012 00:00:00 EST</pubDate>
        </item>
    </channel>
</rss>
                    

Die einzelnen Episoden werden mit den item-Tags beschrieben

Tools

Natürlich muss man nicht zwingend das XML selber schreiben, sondern kann das erledigen lassen. Z.B. durch Podcast Generator

Der eigene Podcast

Erstelle deine erste Episode in den Formaten: .m4a, .mp3, .mov, .mp4, .m4v, .pdf, and .epub Erstelle einen RSS Feed, der deinen Podcast beschreibt. Dieser muss valides RSS 2.0 sein, die empfohlenen iTunes RSS Tags enthalten und auf deine Episode verweisen. Erstelle ein Cover in der Größe 1400 x 1400 Pixel als JPG oder PNG. Lege die Dateien auf einem öffentlichen Server mit Streaming-Support (byte-range support) ab. Veröffentliche die URL deines Podcasts bei iTunes (durchläuft einen Freigabeprozess)

Mehr Infos

https://www.apple.com/itunes/podcasts/specs.htmlhttps://odee.osu.edu/resourcecenter/digital-media-production/how-write-podcast-rss-xml

Übung RSS

PHP: Erstellen eines RSS 2.0 Feeds

PHP: Auslesen eines RSS 2.0 Feeds

Javascript: Auslesen eines RSS 2.0 Feeds (JQuery)

Geotagging

Agenda

Definition Allgemeines Koordinaten GPS Grundformen Beziehungen GeoJSON NavigationGeoDaten in Bildern & Videos GeoDaten in Html GeoDaten in Javascript Anwendung von Geodaten Location Based Services Übung

Definition

Unter dem Vorgang der Georeferenzierung, Geokodierung, Geotagging oder Verortung versteht man die Zuweisung raumbezogener Informationen, der Georeferenz, zu einem Datensatz. Der Vorgang spielt eine wichtige Rolle in der Computerkartografie, Fernerkundung und bei Geoinformationssystemen, kommt aber auch Heimanwendungen vor, z. B. der Archivierung von Fotos und Videos.

Warum???

Daten (Bilder, Videos, ...) bekommen durch Geodaten eine neue Dimension, lassen sich genauer zuordnen und anders interpretieren. Z.B. eine Reiseroute lässt sich nachvollziehen und anzeigen.

Allgemeines

Es gibt im Wesentlichen drei mögliche Gründe, warum man eine Georeferenzierung durchführen möchte:

  • Man möchte Daten in ein geodätisches Referenzsystem einpassen, d.h. mit Realweltkoordinaten versehen (geokodieren).
  • Man möchte geometrische Verzerrungen in Datensätzen, insbesondere in Bilddaten, eliminieren (rektifizieren).
  • Man möchte zwei unterschiedlich orientierte bzw. skalierte Datensätze aneinander anpassen (transformieren).

Arten

Folgende Arten der Georeferenzierung sind zu unterscheiden:

  • die Zuweisung einer Postanschrift (Adresskodierung)
  • die Zuweisung einer Koordinate (Geokodierung, Geocoding, Geotagging, Geo-Imaging)

Adresskodierung

Bei der Adresskodierung wird dem raumbezogenen Datensatz eine Postanschrift zugewiesen und damit ein indirekter Raumbezug geschaffen. Mithilfe geokodierter Adressen (das sind Punkte, die sowohl Postanschrift als auch Realweltkoordinaten tragen) lässt sich der direkte Raumbezug der Daten herstellen (Daten ↔ Adresse ↔ Koordinate). Adresspunktdatensätze werden unter anderem von der Katasterverwaltung oder von Navigationsdatensatzherstellern erstellt.

Geotagging (Geocoding)

Beim Geotagging wird ein raumbezogener Datensatz (z. B. ein Bild, eine Webseite, ein Artikel) mit einer Koordinate versehen. Die Koordinate wird als Tag, Attribut bzw. Metainformation beigefügt. Sie ermöglicht die räumliche Einordnung der Information. Die Daten lassen sich so zum Beispiel in einer digitalen Karte (wie z. B. Google Earth) an der richtigen Stelle platzieren. Im Internet haben sich hierfür die Begriffe Geotagging und Geocoding verbreitet. Das beigefügte Attribut wird entsprechend Geotag oder Geocode genannt. Für die Geokodierung von Webseiten gibt es in HTML z. B. das Meta-Element geo.

Koordinaten

Mit den geographischen Koordinaten (geographische Breite und geographische Länge) lässt sich die Lage eines Punktes auf der Erde beschreiben. Die Erde wird dabei in 360 Längengrade und 180 Breitengrade aufgeteilt. Längengrade verlaufen durch Nord- und Südpol, Breitengrade parallel zum Äquator.

Geographische Koordinaten werden häufig im Sexagesimalsystem angegeben, d. h. 1 Grad ist unterteilt in sechzig Minuten, 1 Minute wiederum in 60 Sekunden.

GPS

Wie funktioniert GPS?

Total einfach, oder?

\begin{matrix} (x_1 - x_0)^2 + (y_1 - y_0)^2 + (z_1 - z_0)^2 = [c (t_1 - t_0)]^2 \quad (1)\\ (x_2 - x_0)^2 + (y_2 - y_0)^2 + (z_2 - z_0)^2 = [c (t_2 - t_0)]^2 \quad (2)\\ (x_3 - x_0)^2 + (y_3 - y_0)^2 + (z_3 - z_0)^2 = [c (t_3 - t_0)]^2 \quad (3)\\ (x_4 - x_0)^2 + (y_4 - y_0)^2 + (z_4 - z_0)^2 = [c (t_4 - t_0)]^2 \quad (4)\\ \end{matrix}

Fragen wir doch jemand, der sich damit auskennt

Zusammengefasst

  • 4 Satelliten werden benötigt, wenn die Zeit unbekannt ist
  • 3 Satelliten wenn die Zeit bekannt ist
  • Dann kann die Position trianguliert werden

Aber

  • Die Welt ist 3D
  • Genauigkeit steht und fällt mit der Anzahl der Satelliten
  • Das Militär hat Einfluß auf die Genauigkeit
  • Alternativen: GLONASS und Galileo

Grundformen

Alle existierenden zu verortenden Elemente lassen sich mit folgenden Grundformen abbilden:

  • Punkt
  • Multi-Punkt
  • Linie
  • Multi-Linie
  • Fläche / Polygon
  • Multi-Polygon

Beziehungen

Zwischen den Grundformen existieren folgende Beziehungen:

  • A ist unabhängig von B
  • A berührt B
  • A enthält B
  • A schneidet B
  • A befindet sich innerhalb von B

GeoJSON

GeoJSON ist ein offener Standard, um geometrische Formen als JSON darzustellen und wird in vielen Anwendungen und dem Internet benutzt.

{
    "type": "Point",
    "coordinates": [30, 10]
}
{
    "type": "LineString",
    "coordinates": [[30, 10], [10, 30], [40, 40]]
}
{
    "type": "Polygon",
    "coordinates": [[[35, 10], [45, 45], [15, 40], [10, 20], [35, 10]], [[20, 30], [35, 35], [30, 20], [20, 30]]]
}
{
    "type": "MultiPoint",
    "coordinates": [[10, 40], [40, 30], [20, 20], [30, 10]]
}

Navigation

Ein Navigationssystem ist ein technisches System, das mit Hilfe von Positionsbestimmung (Satellit, Funk, GSM bzw. inertes oder autonomes System) und Geoinformationen (Topologie-, Straßen-, Luft- oder Seekarten) eine Zielführung zu einem gewählten Ort oder eine Route unter Beachtung gewünschter Kriterien ermöglicht.

Neben der Bestimmung der Position wird hier ein Computersystem benötigt, welches in der Lage ist, den kürzesten Pfad zu berechnen.

Zusatzanwendungen für Navigationssysteme:

  • TMC oder TMCpro
  • POIs
  • Multimedia-Anwendungen
  • Geocaching

Geodaten in Bildern / Videos

Unter Geotagging, auch Geocoding oder Geo-Imaging, versteht man bei fotografischen Aufnahmen die Zuordnung von geographischen Koordinaten. Als Punkte in einer elektronischen Karte lassen sich die so georeferenzierten Bilder anschließend leichter suchen und auswählen.

Eingesetzt wird die Foto-Verortung in der Raumplanung und dem Tourismus, der Umweltplanung, dem Verkehr und dem Katastrophenschutz. Ein häufiges und gängiges Anwendungsbeispiel ist das zeitsparende Illustrieren eines in einem Stadtplan festgelegten Stadtrundganges mit Bildern von sehenswerten Baudenkmälern

Die Geodaten lassen sich mit einer GPS-fähigen Kamera direkt bei der Aufnahme oder nachträglich in den Metadaten der Bilder (EXIF, XMP, IPTC) speichern

http://www.binarus.de/articles/reverse-geotagging/reverse-geotagging.shtml

Geodaten in Html

Als Metatag zur Verortung von Angeboten, z.B. einer Firmenwebseite

<meta name="geo.region" content="DE-BW" />
<meta name="geo.placename" content="Stuttgart" />
<meta name="geo.position" content="51.165691;10.451526" />
<meta name="ICBM" content="51.165691, 10.451526" />
                    

Als Geo Mikroformat zum Auslesen aus Webseiten

<span class="geo">
    <span class="latitude">50.167958</span>;
    <span class="longitude">-97.133185</span>
</span>
                    

Geodaten in Html

Als RDF Metadaten für das semantische Web

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"> <geo:Point> <geo:lat>55.701</geo:lat> <geo:long>12.552</geo:long> </geo:Point> </rdf:RDF>
                    

Geodaten in Javascript

Zugriff über die Browser-API auf den Standort des Benutzers

So sieht es aus...

Anwendungen

  • Google Maps, Google Earth, Google Street ViewEinbinden auf der Webseite
  • SMS, Hangout, Whatsapp, ...Versand des aktuellen Standorts
  • Flickr, Panoramio, ... Anzeigen wo Bilder aufgenommen wurden
  • Wikipedia Auffinden von Artikeln über eine Karte
  • Google, Bing, ... Relevante (nahe) Suchergebnisse werden bevorzugt angezeigt (Pubs in der Nähe)
  • Geoblogging / Social Media Bezug des veröffentlichten Inhalts zu einem Standort

Location Based Services

Standortbezogene Dienste (engl. Location-based Services (LBS), auch: Location Dependent Services (LDS)) sind mobile Dienste, die unter Zuhilfenahme von positionsabhängigen Daten dem Endbenutzer selektive Informationen bereitstellen oder Dienste anderer Art erbringen.

  • Interessante Orte in der Nähe, Point of Interest (POI)
  • Wo bin ich / meine Freunde
  • Verlässt mein Kind den Zielkorridor
  • Reisezeitvorhersage (durch Gruppentracing- und Häufungsanalysen)
  • Mobile Arbeitszeiterfassung
  • Ortsbezogene Spiele, Schnitzeljagd online
  • Ortsbezogene Werbung und Kommunikation
  • Industrielle, vom Ort abhängige Prozesssteuerungen
  • ...

Die Erde ist rund...

Aber die Koordinaten haben Grenzen

Was passiert als z.B. mit einem Polygon, dass über diese Grenze ragt?

Meist wird ein solches in mehrere geteilt

Übung: Google Map Builder

Erstellt einen schönen Kartenausschnitt für die SAE

http://googlemapbuilder.mynameisdonald.com/

APIs

Agenda

Definition - API Daten Kommunikation OAuth Die eigene API Famous APIs

Definitionen

Was ist eine API?

API... WTF?

Active Pharmaceutical Ingredient: englische Bezeichnung für einen Wirkstoff in einem Medikament

Adaptive Planungsintelligenz: mathematische Methoden für industrielle Planungsaufgaben

African Plants Initiative: ein Projekt zur Förderung botanisch-taxonomischer Arbeit in Afrika

anonima petroli italiana SpA: eine italienische Ölgesellschaft

Arbeiterkommunistische Partei Irans: eine iranische Exilpartei

Api: ein Berg im Westen Nepals

...

Application Programming Interface

englisch für Programmierschnittstelle in der Informatik

Definition

Eine Programmierschnittstelle ist ein Programmteil, der von einem Softwaresystem andere