Schnittstellen Definition des "Open-Transport-Protokoll für RO" (Version 1.00) Allgemein: - Die Übermittlung beinhaltet alle Daten einer Veranstaltung (ein "Turnierwochenende"), die seinerseits aus mehreren Turniertagen (Turnieren) bestehen kann (sprachgebrauchlich falsch als "Mehrtagesturnier" bezeichnet). EIN Turnier, welches seinerseits aus mehreren Tagen besteht, wird nicht näher unterschieden. Technische Regeln: - Die Übermittlung findet prinzipiell als Text-File im CSV-Format (ANSI Kodierung) mit wählbarem Trennzeichen statt. - Abgeschlossen wird eine Zeile mit CRLF. - Der Name des Files gibt sinnvollerweise (aber nicht zwingend) Aufschluss über den Namen der Veranstaltung. - Das File beinhaltet drei Blöcke: Block 1 ist die erste Zeile des Files (Header, Zeile 0), bestehend aus organisatorischen Daten in acht Feldern (0...7), jeweils abgeschlossen durch ein Semikolon. Block 2 besteht aus mindestens einer und maximal 999 Zeilen und beinhalten die Team- und Meldedaten, die ihrerseits aus 80 Feldern (0..79) bestehen. Jede Teamzeile entspricht dabei einem Team mit allen(!) Meldungen für alle(!) Tage (Turniere) einer Veranstaltung. Block 3 ist die letzte Zeile des Files (Footer) und besteht aus dem festen Text "[EOF]". Inhaltliche Regeln: - Alle numerischen Werte sind im Dezimal-Format notiert. - !!! Nicht alle Felder müssen gesendet werden und nicht alle Felder müssen ausgewertet werden !!! - Welche Folgen ein leeres Feld, oder ein Feld mit ungültigen Angaben hat, obliegt dem Empfänger. - Die Kontrolle, inwieweit persönliche Daten der HF und ggf. HE versendet werden dürfen, obliegt dem Sender (DSGVO) - Aus allgemeinen Datenschutzgründen, werden Wohnortangaben grundsätzlich nicht übermittelt. - Dem Sender obliegt es, widersprüchliche Angaben z.B. bei den Meldungen zu vermeiden. - Dem Empfänger obliegt es, bei fehlerhaften oder widersprüchlichen Angaben, die betreffende Teamzeile oder das komplette File zu verwerfen. - Empfängerseitig wäre sinnvoll, dem Benutzer mitzuteilen, warum eine Teamzeile oder das gesamte File abgelehnt wurde. BLOCK 1, HEADER: jedes Feld ist abzuschließen mit ";", auch das letzte Feld Zeile 0: Feld 0: DogSportOpenTxData ' Fester Text "DogSportOpenTxData" Feld 1: Sportart ' Fester Test "ROB" Feld 2: Version ' Versionsnummer: 1.00 Feld 3: Separator ' AsciiNummer des verwendeten Trennzeichens im Teamdatenblock Feld 4: USER (Absenderkennung) ' Freier Text Feld 5: PASS (Absenderkennung) ' Freier Text Feld 6: Teamcount ' Anzahl der übermittelten Teams 1...999 Feld 7: Checksumme ' Anzahl aller Zeichen aller Teamdaten (inkl. Trennzeichen, ohne CRLF), alternativ "0" Das verwendete Trennzeichen für den folgenden Teamdatenblock, ist im Feld 3 per Ascii-Nummer einstellbar. Der Sender muss sicherstellen, dass innerhalb von freien Texten, Namen usw, das Trennzeichen nicht vorkommt. Die Anzahl der Team-Daten-Zeilen wird in Feld 6 (Teamcount) angegeben. Die Checksumme ist die Anzahl aller Zeichen in allen Teamdaten-Feldern, inkl Trennzeichen (entsprechend Summe der Zeilenlängen bei Ansi-Notation) Die Anzahl der Zeichen kann im Feld 7 (Checksum) angegeben werden. Soll keine Prüfung vorgenommen werden, ist "0" zu verwenden - Beispiel Zeile 0: DogSportOpenTxData;ROB;1.00;59;;;105;0; (Protokoll für RO in der Version 1.00 / Trennzeichen = ";" / Absenderkennung nicht angewendet / 105 Teamdaten-Zeilen folgen / eine Checksummen-Prüfung wird nicht gewünscht) Es obliegt dem Empfänger diese Daten anzunehmen oder abzulehnen. BLOCK 2, TEAMDATEN: jedes Feld ist abzuschließen mit dem Ascii-Zeichen, welches in Zeile 0, Feld 3 angegeben wurde, auch das Letzte. - Jede Team-Daten-Zeile beinhaltet EIN Team, bestehend aus HF und HD, mit ALLEN Meldedaten zu EINER Veranstaltung, bestehend aus einem oder mehreren Turniertagen. Mithin kommt jedes Team nur einmal im File vor. Zu beachten ist aber, dass EIN Hund mit EINEM HF an zwei (Turnier-)Tagen für zwei Verbände starten kann. Mithin ist EIN Team die Zusammen- setzung aus Mitgliedsnummer + Chipnummer + HD-Verband. Die gleiche Mitgliedsnummer mit der gleichen Chipnummer aber einem anderen HD-Verband, ist ein weiteres Team. Zeile 1 bis 999: Feld 00: HD-Rufname ' Hier ist der tatsächliche Rufname gemeint, keine Kombination mit dem Zwingernamen oder Angaben in Klammern o.ä. Feld 01: HD-Zwingername ' Vollständiger Zwingername Feld 02: HD-Rasse ' Zur Vereinheitlichung empfielt sich die anliegende Rassenliste nach FCI/VDH Definition Feld 03: HD-Wurftag ' tt.mm.jjjj Feld 04: HD-Impfschutz gültig bis ' tt.mm.jjjj Feld 05: HD-Leistungsbuch-Nummer ' Feld 06: HD-Chipnummer ' keine Buchstaben, keine Leerzeichen, nur die 15-stellige Transpondernummer des Chips Feld 07: HD-Verband ' entsprechend der anliegenden Verbandsliste, sofern nicht Privat-Starter Feld 08: HD-Größe ' in ganzen Zentimetern Feld 09: HD-Geschlecht ' "W"=weiblich "M"=männlich Feld 10: HD-Einmessen ' "0"=ist eingemessen "1"=muss eingemessen werden Feld 11..19 ' HD-Aux Feld 20: HF-Vorname ' Lediglich der Anfangsbuchstabe in Großbuchstaben: Gregor Feld 21: HF-Nachname ' Lediglich der Anfangsbuchstabe in Großbuchstaben: van de Graf / Titelangaben wie Dr./Prof./Ing. sind zu vermeiden Feld 22: HF-Geburtsdatum ' tt.mm.jjjj Feld 23: HF-Mailadresse ' Feld 24: HF-Telefonnummer ' Feld 25: HF-Mitgliedsnummer ' Feld 26: HF-Verein ' Feld 27: HF-Verband ' Feld 28: HF-Geschlecht ' "W"=weiblich "M"=männlich Feld 29..39 ' HF-Aux Feld 40: VDH-TEAM-ID ' sofern bekannt Feld 41: Para-Team ' Jede Form der fünf möglichen Anpassung wird repräsentiert durch eine "1" an einer bestimmten Position: ' "00000" entspricht somit "keine Teamanpassung" ' "10000" repräsentiert die Anpassung "Gehbehinderung HF" ' "01000" repräsentiert die Anpassung "Kein Tempo" ' "00100" repräsentiert die Anpassung "Rollstuhl" ' "00010" repräsentiert die Anpassung "Sehbehinderung HF" ' "00001" repräsentiert die Anpassung "Sehbehinderung HD" ' Die Anpassungen untereinander haben Beziehungen. Entsprechend der PO schließt eine "Gehbehinderung HF" "kein Tempo" ein. ' "Kein Tempo" schließt aber eine "Gehbehinderung HF" nicht ein. Ob oder in welcher Form Kombinationen von Anpassungen, ' die nicht dem RO-Reglement entsprechen, verarbeitet werden, obliegt dem Empfänger. Feld 42..49 ' TE-Aux Feld 50: Meldestring ' Der Meldestring eines Teams besteht (beim RO) aus 20 Zeichen "0" oder "1" pro Veranstaltungstag (mithin pro Turnier). ' Jedes der 20 Zeichen steht für einen Parcours. Die Aux-Positionen sind vorgesehen für zu erwartende, weitere Unterteilungen im ROIC. ' Eine "0" repräsentiert KEINE MELDUNG für einen Parcours / eine "1" repräsentiert eine Meldung für einen Parcours. ' Die ersten 20 Zeichen stehen für den ersten Tag der Veranstaltung, die zweiten zwanzig Zeichen für den zweiten Tag usw. ' Die Tage, also die 20-Zeichen-Blöcke, werden nicht getrennt, also fortlaufend geschrieben und interpretiert. ' Mithin muss die Anzahl der Zeichen im Feld 50 ohne Rest duch 20 Teilbar sein. ' Leserichtung der 20-Zeichen-Blöcke von links nach rechts ' Rally Obedience: ' Zeichen Position 1: Meldung in Parcours RO-B ' Zeichen Position 2: Meldung in Parcours RO-1 ' Zeichen Position 3: Meldung in Parcours RO-2 ' Zeichen Position 4: Meldung in Parcours RO-3 ' Zeichen Position 5: Meldung in Parcours RO-S ' Zeichen Position 6: Meldung in Parcours ROIC ' Zeichen Position 7: AUX ' Zeichen Position 8: AUX ' Zeichen Position 9: AUX ' Zeichen Position 10: AUX ' Zeichen Position 11: AUX ' Zeichen Position 12: AUX ' Zeichen Position 13: AUX ' Zeichen Position 14: AUX ' Zeichen Position 15: AUX ' Zeichen Position 16: AUX ' Zeichen Position 17: AUX ' Zeichen Position 18: AUX ' Zeichen Position 19: AUX ' Zeichen Position 20: AUX ' Beispiel: (offenbar eine 3-Tages-Veranstaltung, da 60 Zeichen) ' 001000000000000000000010000000000000000000010100000000000000 ' Meldung am Tag 1 für: Meldung am Tag 1 für: RO-2 ' Meldung am Tag 2 für: Meldung am Tag 2 für: RO-2 ' Meldung am Tag 3 für: Meldung am Tag 3 für: RO-3 und ROIC ' Das Protokoll beurteilt nicht die Regelkonformität von Meldungen. Wie mit unzulässigen Meldungen umzugehen ist, entscheidet der Empfänger. Feld 51: Meldestatus ' Der Meldestatus besteht aus so vielen Zeichen, wie die Veranstaltung Tage hat. ' 0=nicht gemeldet / 1= gemeldet / 2=bestätigt / 3=auf Warteliste ' Beispiel: (offenbar eine 4-Tages-Veranstaltung, da vier Zeichen) ' 0123 ' Tag 1: nicht gemeldet ("0" = nicht gemeldet am Tag 1) ' Tag 2: gemeldet ("1" = möchte Starten am Tag 2) ' Tag 3: bestätigt ("2" = startet am Tag 3) ' Tag 4: auf Warteliste ("3" = startet vielleicht am Tag 4) Feld 52: Mannschaftsname ' Sofern Mannschaften meldbar sind. Eine Unterscheidung nach Tagen für ein einzelnes Team ist nicht vorgesehen. Feld 53: Mannschafts-Meldung ' Die Mannschaftsmeldung besteht aus so vielen Zeichen, wie die Veranstaltung Tage hat. ' 0=nicht gemeldet / 1=gemeldet ' Beispiel: ' 1010 ' offenbar eine 4-Tages-Veranstaltung, da vier Zeichen ' Tag 1: Startet in der Mannschaft ' Tag 2: Startet NICHT in der Mannschaft ' Tag 3: Startet in der Mannschaft ' Tag 4: Startet NICHT in der Mannschaft Feld 54: Helfer-Information ' Die Helfer-Information besteht aus so vielen Zeichen, wie die Veranstaltung Tage hat. ' 0=steht NICHT als Helfer zur Verfügung / 1=steht als Helfer zur Verfügung / 2=ist als Helfer bestätigt ' Beispiel: (offenbar eine 4-Tages-Veranstaltung, da vier Zeichen) ' 0012 ' Tag 1: Steht NICHT als Helfer zur Verfügung ' Tag 2: Steht NICHT als Helfer zur Verfügung ' Tag 3: Steht als Helfer zur Verfügung ' Tag 4: Ist als Helfer bestätigt Feld 55: Camping-Information ' Die Camping-Information besteht aus so vielen Zeichen, wie die Veranstaltung Tage hat. ' Jede Ziffer repräsentiert die Art des angemeldeten Campings. ' 0=keine Camping / 1=Zelt klein / 2=Zelt gross / 3=PKW mit Hänger / 4=Wohnmobil klein / 5=Wohnmobil groß / usw.... ' Eine konkrete Definition was "klein" oder "groß" beinhaltet, ist (bisher) nicht definiert ' Beispiel: (offenbar eine 4-Tages-Veranstaltung, da vier Zeichen) ' 0145 ' Tag 1: kein Camping ' Tag 2: Camping, kleines Zelt ' Tag 3: Camping, Wohnmobil klein ' Tag 4: Camping, Wohnmobil groß Feld 56: Bezahltes Startgeld ' Insgesamt bisher bezahltes Startgeld, Betrag in Cent, für das Team (NICHT den HF), alle Tage ' Beispiel: ' 4560 ' entspricht 45,60 Euro Feld 57: Startgeld Status ' Die Startgeld Status-Information besteht aus EINEM Zeichen für alle Tage: ' 0=Startgeld Status nicht eingepflegt ' 1=Startgeld insgesamt unvollständig ' 2=Startgeld insgesamt vollständig ' Beispiel: ' 1 ' Startgeldzahlung insgesamt unvollständig Feld 58..59 ' Aux für Meldungen Feld 60..79 ' Aux für weitere Informationen Beispiel EINER Teamdatenzeile mit Semikolon als Trennzeichen (Feld 0...19) : Hasso;Hasso von der grünen Weide;Dackel;01.07.2022;05:12:2048;LB4711;123456789012345;DVG;43;M;0;;;;;;;;;; (Feld 20...39) : Max;Mustermann;09.02.2000;abc@abc.de;017105150815;MGL007;BVB;DFB;W;;;;;;;;;;;; (Feld 40...49) : ;0;;;;;;;;; (Feld 50...59) : 00100000000000000000001000000000000000000001010000000000000000001000000000000000;0123;;1010;0012;0145;4560;1;;; (Feld 60...79) : ;;;;;;;;;;;;;;;;;;;; BLOCK 3, FOOTER: "[EOF]" 'Fester Text BEISPIEL EINES KOMPLETTEN FILES MIT EINEM TEAM, SEPARATOR ASC59 UND OHNE ABSENDERKENNUNG: DogSportOpenTxData;ROB;1.00;59;;;1;328; Hasso;Hasso von der grünen Weide;Dackel;01.07.2022;05:12:2048;LB4711;123456789012345;DVG;43;M;;;;;;;;;;;Max;Mustermann;09.02.2000;abc@abc.de;017105150815;MGL007;BVB;DFB;W;;;;;;;;;;;;;0;;;;;;;;;00100000000000000000001000000000000000000001010000000000000000001000000000000000;0123;;1010;0012;0145;4560;1;;;;;;;;;;;;;;;;;;;;;;; [EOF] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Bei RO-CONTROL II werden folgende Felder ausgewertet: Zeile 0: Feld 0: DogSportOpenTxData ' Pflichtfeld: Inhalt: "DogSportOpenTxData" Feld 1: Sportart ' Pflichtfeld: Inhalt: "ROB" Feld 2: Version ' Pflichtfeld: Inhalt: "1.00" Feld 3: Separator ' Pflichtfeld: Inhalt: frei wählbar / 1 bis 255 Feld 4: USER (Absenderkennung) ' Pflichtfeld: Inhalt: zwischen 5 und 10 Zeichen Feld 6: Teamcount ' Pflichtfeld: Inhalt: zwischen 1 und 999, muß mit der Anzahl der Teamdaten-Zeilen übereinstimmen Feld 7: Checksumme ' Pflichtfeld: Inhalt: "0" oder übereinstimmende Anzahl der Zeichen aller Teamdaten (inkl. Trennzeichen, ohne CRLF, ANSI-Notation) Abweichende Angaben verursachen das Ablehnen des kompletten Files mit Fehlerangabe. Zeile 1...999 Feld 00: HD-Name ' Pflichtfeld: Inhalt: 2 bis 15 Zeichen Feld 06: HD-Chipnummer ' Pflichtfeld: Inhalt: 15 Ziffern Feld 08: HD-Größe ' Pflichtfeld: Inhalt: zwischen 10 und 150 in ganzen cm Feld 20: HF-Vorname ' Pflichtfeld: Inhalt: 2 bis 20 Zeichen Feld 21: HF-Nachname ' Pflichtfeld: Inhalt: 2 bis 25 Zeichen Feld 22: HF-Geburtsdatum ' Pflichtfeld: Muss ein existierendes Datum sein. Das resultierende Alter (am Veranstaltungstag) muss zwischen 5 und 100 Jahren sein. Feld 23: HF-Mailadresse ' Kannfeld: Inhalt: 0 bis 50 Zeichen Feld 24: HF-Telefonnummer ' Kannfeld: Inhalt: 0 bis 20 Zeichen Feld 25: HF-Mitgliedsnummer ' Kannfeld: Inhalt: 0 bis 18 Zeichen Feld 26: HF-Verein ' Kannfeld: Inhalt: 0 bis 30 Zeichen Feld 27: HF-Verband ' Kannfeld: Inhalt: 0 bis 10 Zeichen Feld 41: Para-Team ' Pflichtfeld: Inhalt: "00000" / "00010" / "00100" / "00110" / "01000" / "11000" "00001" / "00011" / "00101" / "00111" / "01001" / "11001" Feld 50: Meldestring ' Pflichtfeld: Technische Prüfung: min 20, max 160 Zeichen / Feldlänge mod 20 = 0 / erlaubte Zeichen = "0" oder = "1" Feld 51: Melde-Status ' Pflichtfeld: min 1, max 8 Zeichen / erlaubte Zeichen = "0", "1", "2", "3" Feld 56: Startgeld-Betrag ' Pflichtfeld wenn Startgeld-Status ungleich 0: max 5 Zeichen Feld 57: Startgeld-Status ' Pflichtfeld wenn Startgeld-Betrag ungleich 0: erlaubte Zeichen "1", "2" Abweichende Angaben verursachen das Ablehnen des Teams mit Fehlerangabe. Zusätzliche Angaben werden nicht ausgewertet. Widersprüchliche Meldeangaben führen ebenfalls zum Ablehnen eines Teams: - z.B. Parcoursmeldung mit Status "0" am selben Tag - z.B. Keine Parcoursmeldungen mit Status "1" oder "2" oder "3" am selben Tag Letzte Zeile: Feld 0: Footer 'Pflichtfeld. Inhalt "[EOF]" Abweichende Angaben verursachen das Ablehnen des kompletten Files. BEISPIEL EINES KOMPLETTEN FILES MIT EINEM TEAM, SEPARATOR ASCII 59 UND OHNE ABSENDERKENNUNG: DogSportOpenTxData;AGI;1.00;59;;;1;339; Hasso;Hasso von der grünen Weide;Dackel;01.07.2022;05:12:2048;LB4711;123456789012345;DVG;43;M;;;;;;;;;;;Max;Mustermann;09.02.2000;abc@abc.de;017105150815;MGL007;BVB;DFB;W;;;;;;;;;;;;;0;;;;;;;;;00100000000000000000001000000000000000000001010000000000000000001000000000000000;0123;Lustige Truppe;1010;0012;0145;4560;1;;;;;;;;;;;;;;;;;;;;;;; [EOF] Das File würde komplett abgelehnt, da keine Absenderkennung angegeben ist. Das File würde komplett abgelehnt, da im Teamdaten-Block 338 Zeichen vorkommen, aber 339 Zeichen angegeben sind. Die Teamzeile würde abgelehnt, da am Tag 1 Meldungen in RO-2 angegeben sind, aber der Status am Tag 1 "0" (keine Meldung) ist. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ANHANG RASSENLISTE: Affenpinscher Afghanischer Windhund Airedale Terrier Akita Alaskan Malamute Alpenländische Dachsbracke American Cocker Spaniel American Staffordshire Terrier Appenzeller Sennenhund Ariégeois Australian Cattle Dog Australian Kelpie Australian Shepherd Australian Silky Terrier Australian Terrier Barbet Basset Hound Bayerischer Gebirgsschweißhund Beagle Bearded Collie Beauceron Bedlington Terrier Belgischer Griffon Belgischer Schäferhund Bergamasker Hirtenhund Berger de Picardie Berger des Pyrénées Berner Sennenhund Bernhardiner Bichon à poil frisé Bobtail Bolonka Zwetna Bordeauxdogge Border Collie Border Terrier Boston Terrier Bouvier des Ardennes Bouvier des Flandres Brandlbracke Brasilianischer Terrier Briard Broholmer Bull Terrier Bulldog Bullmastiff Cairn Terrier Cane Corso Italiano Cao da Serra de Aires Cao de Agua portugues Carpatin Cavalier King Charles Spaniel Chesapeake Bay Retriever Chihuahua Chodsky Pes Collie Coton de Tuléar Curly Coated Retriever Dackel Dalmatiner Danish-Swedish Farmdog Deutsch Drahthaar Deutsch Kurzhaar Deutsch Langhaar Deutsche Dogge Deutscher Boxer Deutscher Jagdterrier Deutscher Pinscher Deutscher Schäferhund Deutscher Spitz Deutscher Wachtelhund Dobermann English Cocker Spaniel English Pointer English Setter English Springer Spaniel English Toy Terrier Entlebucher Sennenhund Epagneul Breton Eurasier Finnischer Lapphund Flat Coated Retriever Fox Terrier Golden Retriever Gonczy Polski Gordon Setter Gos d'Atura Catalá Grand Basset Griffon Vendéen Großer Schweizer Sennenhund Hannoverscher Schweißhund Havaneser Holländischer Schäferhund Hovawart Hrvatski Ovcar Irish Setter Irish Soft Coated Wheaten Terrier Irish Terrier Irish Wolfhound Islandhund Italienisches Windspiel Jack Russell Terrier Japan Spitz Karelischer Bärenhund Kerry Blue Terrier King Charles Spaniel Kritikos Lagonikos Kromfohrländer Labrador Retriever Laekenois Lagotto Romagnolo Lakeland Terrier Lancashire Heeler Landseer Leonberger Lhasa Apso Löwchen Magyar Vizsla Malteser Manchester Terrier Miniature American Shepherd Miniature Bull Terrier Mix Mops Mudi Münsterländer Nederlandse Kooikerhondje Neufundländer Norfolk Terrier Norwegischer Elchhund Norwegischer Lundehund Norwich Terrier Nova Scotia Duck Tolling Retriever Österreichischer Pinscher Papillon Parson Russell Terrier Perro de Agua Español Phalene Pharaoh Hound Podenco Andaluz Podenco Canario Podengo Portugues Polski Owczarek Nizinny Prager Rattler Presa Canario Pudel Pudelpointer Puli Pumi Pyrenäen-Berghund Rhodesian Ridgeback Rottweiler Russischer Schwarzer Terrier Samojede Schapendoes Schipperke Schnauzer Segugio Maremmano Shetland Sheepdog Shiba Shih Tzu Siberian Husky Silken Windsprite Spinone Italiano Staffordshire Bull Terrier Steirische Rauhhaarbracke Tibet Spaniel Tibet Terrier Tschechoslowakischer Wolfhund Västgötaspets Weimaraner Weißer Schweizer Schäferhund Welsh Corgi Cardigan Welsh Corgi Pembroke Welsh Springer Spaniel Welsh Terrier West Highland White Terrier Westfalenterrier Whippet Xoloitzcuintle Yorkshire Terrier Zwergpinscher