Schnittstellen Definition des "Dogsport-Open-Transport"-Protokoll (Version 1.00) 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 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 Teamdaten, die ihrerseits aus 80 Feldern (0..79) bestehen. Jede Teamzeile entspricht dabei einem Team mit allen(!) Meldungen für alle(!) Tage. Block 3 ist die letzte Zeile des Files 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 Feld 1: Sportart ' "AGI" oder "ROB" oder "HOP" oder "THS" 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, 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;AGI;1.00;59;;;105;0; (Protokoll für Agility 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 Zusammensetzung 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 Feld 08: HD-Größe ' in ganzen Zentimetern ODER "S", "M", "I", "L" 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 ' "0"=kein Parateam / "1"=Parateam (weitere Ziffern zur Spezifikation der Behinderung, z.b. beim RO) Feld 42..49 ' TE-Aux Feld 50: Meldestring ' Der Meldestring eines Teams besteht (beim AGI) aus 20 Zeichen "0" oder "1" pro Veranstaltungstag (mithin pro Turnier). ' Jedes der 20 Zeichen steht für einen Parcours. ' 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 ' Agility: ' Zeichen Position 1: Meldung in Parcours A0 Prüfung ' Zeichen Position 2: Meldung in Parcours A1 Prüfung ' Zeichen Position 3: Meldung in Parcours A2 Prüfung ' Zeichen Position 4: Meldung in Parcours A3 Prüfung ' Zeichen Position 5: Meldung in Parcours J0 (macht für gewöhnlich keinen Sinn, da es sich um eine kostenpflichtige Prüfung ohne Folgen handelt) ' Zeichen Position 6: Meldung in Parcours J1 (macht für gewöhnlich keinen Sinn, da es sich um eine kostenpflichtige Prüfung ohne Folgen handelt) ' Zeichen Position 7: Meldung in Parcours J2 Prüfung ' Zeichen Position 8: Meldung in Parcours J3 Prüfung ' Zeichen Position 9: Meldung in Parcours S0 Spiel als zweiter A0-Lauf. In der Regel als 2nd-Chance ausgeführt ' Zeichen Position 10: Meldung in Parcours S1 Spiel als zweiter A1-Lauf. In der Regel als Jump-Spiel ausgeführt ' Zeichen Position 11: Meldung in Parcours S2 Spiel als zweiter A2-Lauf. Macht für gewöhnlich keinen Sinn, da in einem Spiel keine Aufstiege möglich sind ' Zeichen Position 12: Meldung in Parcours S3 Spiel als zweiter A3-Lauf. Macht für gewöhnlich keinen Sinn, da in einem Spiel kein Klassenerhalt möglich ist ' Zeichen Position 13: Meldung in Parcours Senioren-A-Lauf Prüfung ' Zeichen Position 14: Meldung in Parcours Senioren-Spiel Spiel ' Zeichen Position 15: Meldung in Parcours Para-A-Lauf sollte obsolet sein. Parastarter starten für gewöhnlich im Normalfeld mit gesonderter Zeitfehlerberechnung ' Zeichen Position 16: Meldung in Parcours Para-Jumping sollte obsolet sein. Parastarter starten für gewöhnlich im Normalfeld mit gesonderter Zeitfehlerberechnung ' Zeichen Position 17: Meldung in zusätzlichem, allgemeinem Spiel (X) ' Zeichen Position 18: Meldung in zusätzlichem, allgemeinem Spiel (Y) ' Zeichen Position 19: Meldung in zusätzlichem, allgemeinem Spiel (Z) ' Zeichen Position 20: Meldung in Jumping Open Spiel / sollte obsolet sein. Zusammengeführte Jumpings machen i.d.R. keinen Sinn mehr. ' Beispiel: (offenbar eine 4-Tages-Veranstaltung, da 80 Zeichen) ' 01000000010000000000010000000100000010000001000100000000001000100000001000000100 ' Meldung am Tag 1 für: A1 und S1 ' Meldung am Tag 2 für: A1 und S1 und Spiel-X ' Meldung am Tag 3 für: A3 und J3 und Spiel-Z ' Meldung am Tag 4 für: A2 und S2 und Spiel-Y ' Das Protokoll beurteilt nicht die Sinnhaftigkeit von Meldungen. Wie mit den Daten 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 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: (offenbar eine 4-Tages-Veranstaltung, da vier Zeichen) ' 1010 ' 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 ' Meldungen-Aux Feld 60..79 ' Allgemein-Aux 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) : 01000000010000000000010000000100000010000100000000000000000001000000010000000100;0121;Lustige Truppe;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;AGI;1.00;59;;;1;338; 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;;;;;;;;;01000000010000000000010000000100000010000000000000000000000001000000010000000100;0123;Lustige Truppe;1010;0012;0145;4560;1;;;;;;;;;;;;;;;;;;;;;;; [EOF] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Bei Agility-Turnier V6-SP werden folgende Felder ausgewertet: Zeile 0: Feld 0: DogSportOpenTxData ' Pflichtfeld: Inhalt: "DogSportOpenTxData" Feld 1: Sportart ' Pflichtfeld: Inhalt: "AGI" 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. Zeile 1...999 Feld 00: HD-Rufname ' Pflichtfeld: Inhalt: 2 bis 15 Zeichen Feld 02: HD-Rasse ' Pflichtfeld: Muss Element aus Rassenliste sein Feld 05: HD-Leistungsbuch-Nummer ' Pflichtfeld: Inhalt: 2 bis 18 Zeichen Feld 06: HD-Chipnummer ' Pflichtfeld: Inhalt: 15 Ziffern Feld 07: HD-Verband ' Pflichtfeld. Muss Element aus Verbandsliste sein. Feld 08: HD-Größe ' Pflichtfeld. Inhalt: zwischen 10 und 150 in ganzen cm oder "S", "M", "I", "L" Feld 10: HD-Einmessen ' Pflichtfeld. Inhalt: "0"=IST eingemessen oder "1"=muss eingemessen werden 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 ' Pflichtfeld: Inhalt: 2 bis 18 Zeichen Feld 26: HF-Verein ' Pflichtfeld: Inhalt: 2 bis 30 Zeichen Feld 27: HF-Verband ' Pflichtfeld: Inhalt: 2 bis 10 Zeichen Feld 41: Para-Team ' Pflichtfeld: Inhalt: "0"=kein Parateam oder "1"=Parateam Feld 50: Meldestring ' Pflichtfeld: Technische Prüfung: min 20, max 160 Zeichen / Feldlänge mod 20 = 0 / erlaubte Zeichen = "0" oder = "1" Feld 51: Meldestatus ' Pflichtfeld: max 8 Zeichen / Fehlende Tage werden durch "0" ersetzt / erlaubte Zeichen = "0", "1", "2", "3" Feld 52: Mannschaftsname ' Pflichtfeld wenn Mannschaftsmeldung nicht leer / max 25 Zeichen Feld 53: Mannschafts-Meldung ' Pflichtfeld wenn Mannschaftsname angegeben. Fehlende Zeichen werden durch "0" ersetzt/ max 8 Zeichen Feld 56: Bezahltes Startgeld ' Pflichtfeld wenn Startgeld-Status ungleich 0 / max 5 Zeichen Feld 57: Startgeld Status ' Pflichtfeld wenn Startgeld ungleich 0 / erlaubte Zeichen "0", "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: - Parcoursmeldung mit Status "0" am selben Tag - Keine Parcoursmeldungen mit Status "1" oder "2" oder "3" am selben Tag - Mannschaftsmeldung ohne Parcoursmeldungen 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;;;;;;;;;01000000010000000000010000000100000010000000000000000000000001000000010000000100;0123;Lustige Truppe;1010;0012;0145;4560;1;;;;;;;;;;;;;;;;;;;;;;; [EOF] Das File würde komplett abgelehnt, da keine Absenderkennung angegeben ist. Die Teamzeile würde abgelehnt, da am Tag 1 Meldungen in A1 und S1 angegeben sind, aber der Status am Tag 1 "0" (keine Meldung) ist. Die Teamzeile würde abgelehnt, da am Tag 1 eine Mannschaftsmeldung angegeben ist, aber der Status am Tag 1 "0" (keine Meldung) ist. ANHANG VERBANDSLISTE: ADRK BCD BK BLV CfBrH DBC dhv DKBS DMC DSV DV DVG HSVRM IBC KFT PSK RSV RZV SGSV SV SWHV VDP Ausland 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