Inhalt | 5 |
Einleitung | 11 |
XML | 13 |
XML-Basics | 19 |
XML: Wohlgeformte Dokumente | 23 |
XML-Version | 23 |
XML Encoding | 24 |
XML-Entitäten | 26 |
XML-Kommentare | 29 |
XML: Processing-Instruction | 36 |
XML-Datenstrukturen | 40 |
XML: Die Sache mit den Namespaces | 48 |
Namespaces in XML-Dokumenten | 53 |
Die XML-Namespace-Flut | 56 |
Versionierung | 59 |
XML: Automatischer Namespace-Report | 61 |
Wie kommt XML überhaupt zustande? | 64 |
XML auswerten mit VisualBasic.NET | 67 |
XML-Validierung | 70 |
XML-Validierung: Wozu? | 73 |
XML: Klare Strukturen | 79 |
Hohe Fehlertoleranz und die Folgen | 80 |
So etwas brauche ich nicht ... | 81 |
Interessenkonflikte | 84 |
RelaxNG compact - Beispiel | 89 |
RelaxNG - Beispiel | 89 |
DTD - Beispiel | 90 |
XML-Schema - Beispiel | 91 |
DTD | 92 |
XML-Schema | 94 |
XML-Schema 1.0 | 97 |
xs:element name | 101 |
xs:complexType | 102 |
xs:simpleType | 103 |
xs:element ref | 105 |
xs:group | 107 |
xs:unique, xs:key, xs:keyref, xs:selector, xs:field | 111 |
xs:any, xs:anyType | 113 |
xs:element abstract, substitutionGroup | 117 |
elementFormDefault, attributeFormDefault | 118 |
XML-Schema 1.1 | 118 |
XML-Schema Validierung in Java | 130 |
XML-Schema: Datenvalidierung mit VisualBasic.NET | 132 |
XML-Schema-Validierung mit ANT | 135 |
XML-Schema-Datenvalidierung mit XProc | 136 |
NVDL | 137 |
XPath | 139 |
XPath 3.0, XPath 2.0, XPath 1.0 | 140 |
XPath-Achsen | 141 |
ancestor::* | 143 |
ancestor-or-self::* | 144 |
attribute::* | 145 |
child::* | 147 |
descendant::* | 149 |
descendant-or-self::* | 150 |
Verschachtelungstiefe | 153 |
following::* | 154 |
following-sibling::* | 157 |
Positionsbestimmung bei following-sibling | 157 |
namespace::* | 160 |
parent::* | 162 |
preceding::* | 162 |
preceding-sibling::* | 164 |
self::* | 166 |
Automatische Generierung des XPath-Statements | 166 |
XPath: Pfade, Prädikate | 168 |
XPath-Operatoren | 171 |
XPath-Funktionen | 178 |
Zahlenfunktionen | 200 |
avg() | 202 |
max() | 203 |
min() | 205 |
sum() | 207 |
Zahlen-Rundungsfunktionen | 210 |
Zeit ist Geld | 212 |
Toll, ein Kalender | 219 |
Stringfunktionen | 220 |
XPath: analyze-string | 222 |
XPath: Codepoints | 225 |
XPath: compare | 229 |
XPath: concat | 233 |
XPath: contains | 234 |
XPath ends-with | 238 |
XPath: lower-case | 238 |
XPath: matches | 239 |
XPath: normalize-space | 240 |
Reguläre Ausdrücke | 242 |
Reguläre Ausdrücke in Java | 244 |
Reguläre Ausdrücke in C#.NET | 245 |
XPath: replace | 248 |
XPath: starts-with | 249 |
XPath: string oder xs:string? | 251 |
XPath: string-join | 256 |
XPath: substring, string-length | 258 |
XPath: substring-after | 259 |
XPath: substring-before | 260 |
XPath: tokenize | 260 |
XPath: translate | 264 |
XPath: upper-case | 265 |
XPath: Sequenz-Funktionen | 266 |
XPath: copy-of | 267 |
count() | 268 |
XPath: data | 268 |
XPath: distinct-values | 271 |
XPath: exactly-one | 272 |
XPath Sequenzen: concat, union, except, intersect | 273 |
XPath: deep-equal | 275 |
Der Vergleich von leeren Sequenzen mit leeren Strings | 276 |
XPath: empty | 277 |
XPath: exists | 278 |
XPath: filter | 279 |
XPath: for-each | 280 |
XPath: for-each-pair | 282 |
XPath: fold-left | 284 |
XPath: fold-right | 285 |
Anonyme Funktionen | 287 |
head, tail, snapshot | 288 |
XPath: index-of(), position(), last() | 291 |
XPath: in-scope-prefixes | 293 |
XPath: insert-before | 294 |
JSON | 295 |
XPath: json-to-xml, xml-to-json | 304 |
XPath: fn:json-doc | 307 |
XPath: one-or-more | 309 |
XPath: fn:parse-json | 309 |
XPath 3.0: path | 310 |
XPath: remove | 311 |
XPath: reverse | 313 |
RESTful Webservice | 315 |
XPath: serialize | 325 |
XPath: subsequence | 326 |
unparsed-text-lines: CSV in XML konvertieren | 328 |
XPath: zero-or-one | 329 |
XPath 3.1: Map, xsl:map | 330 |
XPath: transform | 342 |
XPath 3.1: Array | 345 |
available-environment-variables | 357 |
system-properties | 358 |
Der Namespace System.Xml.XPath | 359 |
XPath in C#.NET | 360 |
XSL | 363 |
XSL-Übersicht | 366 |
Funktionale Programmierung | 368 |
XSL-Prozessoren | 369 |
XSLT 3.0, XPath 3.0 | 372 |
xsl:accumulator | 373 |
xsl:analyze-string | 376 |
xsl:assert | 377 |
xsl:attribute | 378 |
xsl:attribute-set | 379 |
xsl:apply-templates, xsl:next-match | 381 |
xsl:apply-templates: Teilkonvertierung | 386 |
xsl:for-each vs. xsl:apply-templates | 388 |
xsl:call-template | 389 |
xsl:character-map | 390 |
Liste der Sonderzeichen selbst erstellen | 391 |
Zeichensätze generieren mit C#.NET | 395 |
xsl:choose | 396 |
XSL-Analyse mit Collections | 397 |
xsl:copy, xsl:copy-of | 403 |
xsl:decimal-format | 406 |
xsl:element | 410 |
xsl:evaluate | 412 |
xsl:fallback | 414 |
xsl:fork | 415 |
xsl:for-each select | 416 |
xsl:for-each-group | 419 |
xsl:function | 430 |
xsl:if | 431 |
xsl:include, xsl:import, xsl:apply-imports | 432 |
xsl:import-schema | 434 |
xsl:iterate, xsl:break | 437 |
xsl:key | 438 |
xsl:merge | 440 |
xsl:message | 443 |
xsl:namespace | 444 |
xsl:number | 446 |
Arbeiten mit optionalen Elementen | 451 |
xsl:output | 457 |
xsl:param | 461 |
xsl:preserve-space, xsl:strip-space | 467 |
xsl:result-document | 469 |
sitemap.xml mit XSLT 3.0 generieren | 470 |
xsl:sort, xsl:perform-sort, fn:sort | 473 |
xsl:template | 478 |
xsl:text | 479 |
xsl:try/xsl:catch | 480 |
xsl:value-of | 482 |
xsl:variable | 483 |
Schattenkabinett | 486 |
XSLT 2.0: Erweiterte Syntax | 488 |
XSLT-Konvertierung von XML nach HTML | 490 |
Arbeiten mit xsl:for-each | 490 |
Einbindung externer XML-Dokumente | 493 |
Arbeiten mit xsl:apply-templates | 496 |
Arbeiten mit xsl:template name/xsl:call-template | 498 |
Spaltenweises Programmieren einer Tabelle | 500 |
Spaltenweises Programmieren: pro Ort | 505 |
Konvertierung von XML nach XML | 507 |
Konvertierung von Elementen in Attribute | 512 |
Arbeit mit temporären Bäumen | 513 |
Erzeugen von skalierbaren Vektor-Grafiken (SVG) | 516 |
C#.NET in XSLT aufrufen | 522 |
Konvertierung von XML nach Text | 525 |
XSL-Transformationsaufrufe | 529 |
XQuery | 532 |
Was ist XQuery? | 534 |
Arbeit mit Sequenzen | 534 |
XSD-Type-Cast | 535 |
Sortierung einer Sequenz | 536 |
Arbeiten mit Variablen | 539 |
XQuery: Arbeiten mit XML-Input | 540 |
WHERE | 541 |
XQuery: WHERE und Nummerierung | 542 |
Geschachtelte Schleifen | 545 |
FLOWR | 546 |
XQuery: Element-Konstruktor | 547 |
Vereinigte Sequenzen | 548 |
XQuery: concat, union, intersect, except | 549 |
XQuery: Generierung von 3erGruppen | 551 |
XQuery: Arbeiten mit Namespaces und Funktionen | 552 |
XPath 3.1: Arrays in XQuery | 555 |
XQuery 3.0: switch/case | 559 |
XQuery 3.0: try/catch | 560 |
XQuery 3.0: Gruppierungen mit group by | 560 |
XML-Datenbanken | 564 |
XML und Datenbanken | 566 |
Der relationale Ansatz | 566 |
XML-Dokumente in ORACLE 11g verwalten | 575 |
XML-Datenbank: BaseX | 577 |
Datenbank: INSERT und UPDATE | 581 |
XProc | 583 |
XML testen | 588 |
Geistreich, aber falsch gerechnet? | 590 |
Selenium | 598 |
Detailtests mit Schematron | 600 |
XSLT Unit Tests mit XSpec | 605 |
XML-Datenaustausch | 607 |
XML als Datenaustauschformat | 607 |
Datenübertragung | 610 |
XÖV: XML in der öffentlichen Verwaltung | 613 |
Internet der Dinge (IoT) | 614 |
Objekt-Serialisierung mit C#.NET | 616 |
Objekt-Serialisierung mit VisualBasic.NET | 623 |
Objektserialisierung mit Java | 627 |
JAXB | 630 |
JAXB - XSLT - JAXB | 638 |
XML auswerten mit Java-SAX | 640 |
Java: DOM-Programmierung | 642 |
JDOM-Programmierung | 644 |
StAX | 646 |
Maintenance | 648 |
Best Practices | 653 |
Formatting Objects (FO) | 655 |
Die Struktur von Formatting Objects (FO) | 658 |
XSL-FO | 662 |
Arbeiten mit XSL 3.0 und FOP | 664 |
FOP mit ANT | 667 |
Ratschläge für einen schlechten Programmierer | 670 |