-
Notifications
You must be signed in to change notification settings - Fork 4
TSDRData contents
The TSDRData
object contains two dictionaries: TSDRSingle
and TSDRMulti
, which contain attributes of the requested trademark application or registration.
TSDRSingle
is used for those data elements that can be represented as a simple string. For example, for the key ApplicationNumber
, the value is an eight-character string that represents the application number, e.g. "86799303".
TSDRMulti
is used for those data elements that occur more than once, and so cannot be represented as a single string. In these cases, the entry is a list, and each item in the list is itself a dictionary. For example, during the course of a trademark application it will have many events: the initial application, perhaps multiple office actions, publication, registration, renewals, etc. These are represented by a list of Mark Events. The TSDRMulti
entry with the key MarkEventList
is a list of dictionaries, each one of which corresponds to a single Mark Event. For example, there will generally be an element in the list representing the initial application. That element will be represented by a dictionary; and in that dictionary, the entry with the key MarkEventDescription
will be something like "NEW APPLICATION ENTERED IN TRAM" (the PTO's use of the acronym "TRAM" here refers to the PTO's Trademark Reporting and Monitoring system).
The basic examples provide illustrations in several languages (Python, C#, Visual Basic .NET and C++ .NET) of retrieving both types of data. They show retrieval of simple one-value strings such as the application serial number (ApplicationNumber
), the text of the trademark (MarkVerbalElementText
), the application filing date (ApplicationDate
) and registration number (RegistrationNumber
). In Python:
print "Application serial no: ", t.TSDRData.TSDRSingle["ApplicationNumber"] print "Trademark text: ", t.TSDRData.TSDRSingle["MarkVerbalElementText"] print "Application filing date: ", t.TSDRData.TSDRSingle["ApplicationDate"] print "Registration no: ", t.TSDRData.TSDRSingle["RegistrationNumber"]
In addition, the examples show the retrieval of the most recent (0th) owner name (ApplicantName
) and address (ApplicantCombinedAddress
) from the applicant list (ApplicantList
); and the date of the most recent (0th) prosecution event (MarkEventDate
) and its description (MarkEventDescription
) from the Mark Event list (MarkEventList
). In Python:
# Owner info is in most recent (0th) entry in ApplicantList applicant_list = t.TSDRData.TSDRMulti["ApplicantList"] current_owner_info = applicant_list[0] print "Owner:", current_owner_info["ApplicantName"] print "Owner address: ", current_owner_info["ApplicantCombinedAddress"] # Get most recent event: 0th entry in event list event_list = t.TSDRData.TSDRMulti["MarkEventList"] most_recent_event = event_list[0] print "Most recent event: ", most_recent_event["MarkEventDescription"] print "Event date: ", most_recent_event["MarkEventDate"]
Currently, Plumage reports three types of list data:
-
ApplicantList
: Information about applicant or owner at various stages of prosecution; -
MarkEventList
: Information about events at various stages of prosecution; -
AssignmentList
: Information about assignment or other transfers of ownership of the trademark or trademark application.
In almost every case, data is returned in exactly the same format as provided by the PTO. For example, an application number is an eight-digit string such as "86799303", even though PTO documents may refer to it as "86/799,303" (meaning series 86, application serial no. 799,303). However, Plumage also provides what I call "convenience values" that are derived from values provided by the PTO as a convenience to the programmer. These are primarily used for dates and addresses. In addition, Plumage generates diagnostic data about the execution of Plumage itself for use in debugging (see "Diagnostic Data", below).
- Dates
ApplicationDate
will have a value "2015-10-26-04:00". However, because most programs will want to ignore the superfluous "-04:00", the key ApplicationDateTruncated
is also provided, having a value "2015-10-26". Most applications will probably want to use the truncated form.
- Addresses
CorrespondentAddressLine01
, usually a street address, e.g., "1234 Gladys Ave.", or a post office box; and CorrespondentAddressLine02
usually blank, but potentially including floor or suite information); a city (CorrespondentAddressCity
); a geographic region (CorrespondentAddressGeoRegion
, usually a state or province); a postal code (CorrespondentPostalCode
, generally a ZIP code); and a country (CorrespondentCountryCode
). If a program wants to check to see if the address has changed, it would need to check six separate fields so see whether any of them have changed.
To simplify this, Plumage provides a "combined address" (e.g. CorrespondentCombinedAddress
) that consists of all of these fields concatenated, separated by a '/'; for example: "1234 Gladys Ave.//Lakewood/Ohio/44107-2510/US". A program monitoring for changes to the address can simply check the CorrespondentCombinedAddress
field rather than each of its individual constituents.
You should not attempt to parse from the combined field into its constituent fields. If one of the fields actually contains a '/' (for example, if CorrespondentAddressLine02
is "Fifth floor/Room 510"), you can't simply split on the '/' character. Instead, use the values provided for the constituent fields themselves.
In general, Plumage uses as its key names the same names used as XML tags in the data provided by the PTO. When different names are used by the PTO in ST.66 and ST.96 format, ST.66 is usually preferred. In some cases, for example, where the same names are used in the XML files for multiple purposes, the key names are qualified.
In the tables below, the following information is presented:
- Plumage key name;
- Short description of the data;
- One or more identifiers sufficient to locate the data in the PTO XML files;
- The equivalent label as used by the PTO on TSDR;
- Notes, if applicable.
This section describes content where there is one unique value for a particular trademark application (such as the application number, for example). Data that is reported as a list (mark events, applicants and assignments) are set out under "TSDRDataMulti" below). For convenience, the data is broken out by what type of information is provided.
In Plumage-py TSDRSingle
is implemented as a Python dict
. In Plumage-dotnet (C#), it is implemented as Dictionary<string, string>
.
- ApplicationNumber
Plumage key |
ApplicationNumber
|
Description | application serial number |
XML field name |
ST.66: ApplicationNumber ST.96: ApplicationNumberText |
TSDR field label | US Serial Number |
- ApplicationDate
Plumage key |
ApplicationDate
|
Description | application filing date |
XML field name | ApplicationDate |
TSDR field label | Application Filing Date |
- ApplicationDateTruncated
Plumage key |
ApplicationDateTruncated
|
Description | application filing date, truncated to date-only (convenience value) |
XML field name | derived from ApplicationDate, above |
TSDR field label | Application Filing Date |
- RegistrationNumber
Plumage key |
RegistrationNumber
|
Description | registration number, if any; empty string otherwise |
XML field name | RegistrationNumber |
TSDR field label | US Registration Number |
- RegistrationDate
Plumage key |
RegistrationDate
|
Description | registration date, if any; empty string otherwise |
XML field name | RegistrationDate |
TSDR field label | Registration Date |
- RegistrationDateTruncated
Plumage key |
RegistrationDateTruncated
|
Description | registration date, if any, truncated to date-only; empty string otherwise (convenience value) |
XML field name | derived from RegistrationDate, above |
TSDR field label | Registration Date |
- MarkCurrentStatusDate
Plumage key |
MarkCurrentStatusDate
|
Description | date of the current status of the trademark |
XML field name | MarkCurrentStatusDate |
TSDR field label | Status Date |
- MarkCurrentStatusDateTruncated
Plumage key |
MarkCurrentStatusDateTruncated
|
Description | status date, truncated to date-only (convenience value) |
XML field name | derived from MarkCurrentStatusDate, above |
TSDR field label | Status Date |
- MarkCurrentStatusExternalDescriptionText
Plumage key |
MarkCurrentStatusExternalDescriptionText
|
Description | long status description, human-readable |
XML field name | MarkCurrentStatusExternalDescriptionText |
TSDR field label | Status |
- MarkVerbalElementText
Plumage key |
MarkVerbalElementText
|
Description | text of trademark |
XML field name | MarkVerbalElementText |
TSDR field label | Mark |
- PublicationDate
Plumage key |
PublicationDate
|
Description | publication date, if any; empty string otherwise |
XML field name | PublicationDate |
TSDR field label | Publication Date |
- PublicationDateTruncated
Plumage key |
PublicationDateTruncated
|
Description | publication date, if any, truncated to date-only; empty string otherwise |
XML field name | derived from PublicationDate, above |
TSDR field label | Publication Date |
- RegisterCategory
Plumage key |
RegisterCategory
|
Description | register (Primary or Secondary) on which the mark is registered or sought to be registered |
XML field name | RegisterCategory |
TSDR field label | Register |
Notes | In ST.66, the PTO reports this as "Principal" or "Supplemental". In ST.96, the PTO reports this as "Primary" or "Supplemental". Regardless of source, Plumage reports this as "Principal" or "Supplemental", using the statutory terminology. 15 U.S.C. §§ 1051, 1091. |
- RenewalDate
Plumage key |
RenewalDate
|
Description | renewal date, if any; empty string otherwise |
XML field name | RenewalDate |
TSDR field label | Renewal Date (section "Maintenance Filings or Post Registration Information") |
- RenewalDateTruncated
Plumage key |
RenewalDateTruncated
|
Description | renewal date, if any, truncated to date-only; empty string otherwise |
XML field name | derived from RenewalDate, above |
TSDR field label | Renewal Date (section "Maintenance Filings or Post Registration Information") |
- InternationalApplicationNumber
Plumage key |
InternationalApplicationNumber
|
Description | international application no., if any |
XML field name |
ST.66: InternationalApplicationNumber ST.96: ApplicationNumber/ApplicationNumberText (where the AssociationCategory is 'International application or registration') |
TSDR field label | International Application(s)/Registration(s) Based on this Property (section "Related Properties Information") |
- InternationalRegistrationNumber
Plumage key |
InternationalRegistrationNumber
|
Description | international registration no., if any |
XML field name | InternationalRegistrationNumber |
TSDR field label | International Registration Number (section "Related Properties Information") |
- LawOfficeAssignedText
Plumage key |
LawOfficeAssignedText
|
Description | office at the PTO to which the case is assigned |
XML field name | LawOfficeAssignedText |
TSDR field label | Law Office Assigned (section "TM Staff and Location Information") |
- CurrentLocationText
Plumage key |
CurrentLocationText
|
Description | location of trademark file at PTO |
XML field name | CurrentLocationText |
TSDR field label | Current Location (section "TM Staff and Location Information") |
- CurrentLocationCode
Plumage key |
CurrentLocationCode
|
Description | code corresponding to CurrentLocationText |
XML field name | CurrentLocationCode |
TSDR field label | N/A |
- CurrentLocationDate
Plumage key |
CurrentLocationDate
|
Description | date in current location |
XML field name | CurrentLocationDate |
TSDR field label | Date in Location (section "TM Staff and Location Information") |
- CurrentLocationDateTruncated
Plumage key |
CurrentLocationDateTruncated
|
Description | date in current location, truncated to date-only |
XML field name | derived from CurrentLocationDate, above |
TSDR field label | Date in Location (section "TM Staff and Location Information") |
- StaffName
Plumage key |
StaffName
|
Description | name of individual, if any, at the PTO to whom the case is assigned; empty string otherwise |
XML field name | StaffName |
TSDR field label | TM Attorney (section "TM Staff and Location Information") |
- StaffOfficialTitle
Plumage key |
StaffOfficialTitle
|
Description |
title of individual named in StaffName ; empty string otherwise
|
XML field name | OfficialTitle |
TSDR field label | N/A |
- CorrespondentName
Plumage key |
CorrespondentName
|
Description | name of correspondent listed for applicant |
XML field name |
ST.66: Representative (where Comment = 'Domestic Correspondent') / ... / FreeFormatNameLine[1] ST.96: NationalCorrespondent / ... / PersonFullName |
TSDR field label | Correspondent: Correspondent (section "Attorney/Correspondence Information") |
- CorrespondentOrganization
Plumage key |
CorrespondentOrganization
|
Description | organization of correspondent |
XML field name |
ST.66: Representative (where Comment = 'Domestic Correspondent') / ... / FreeFormatNameLine[2] ST.96: NationalCorrespondent / ... / OrganizationStandardName |
TSDR field label | Correspondent: Name/Address (section "Attorney/Correspondence Information") |
- CorrespondentAddressLine01
Plumage key |
CorrespondentAddressLine01
|
Description | correspondent address, line 1 |
XML field name |
ST.66: Representative (where Comment = 'Domestic Correspondent') / ... / AddressBuilding ST.96: NationalCorrespondent / ... / AddressLineText (where sequenceNumber = '1') |
TSDR field label | Correspondent: Name/Address (section "Attorney/Correspondence Information") |
- CorrespondentAddressLine02
Plumage key |
CorrespondentAddressLine02
|
Description | correspondent address, line 2 |
XML field name |
ST.66: Representative (where Comment = 'Domestic Correspondent') / ... / AddressStreet ST.96: NationalCorrespondent / ... / AddressLineText (where sequenceNumber = '2') |
TSDR field label | Correspondent: Name/Address (section "Attorney/Correspondence Information") |
- CorrespondentAddressCity
Plumage key |
CorrespondentAddressCity
|
Description | city for correspondent |
XML field name |
ST.66: Representative (where Comment = 'Domestic Correspondent') / ... / AddressCity ST.96: NationalCorrespondent / ... / CityName |
TSDR field label | Correspondent: Name/Address (section "Attorney/Correspondence Information") |
- CorrespondentAddressGeoRegion
Plumage key |
CorrespondentAddressGeoRegion
|
Description | geographical region (usually state or province) for correspondent |
XML field name |
ST.66: Representative (where Comment = 'Domestic Correspondent') / ... / AddressState ST.96: NationalCorrespondent / ... / GeographicRegionName |
TSDR field label | Correspondent: Name/Address (section "Attorney/Correspondence Information") |
- CorrespondentPostalCode
Plumage key |
CorrespondentPostalCode
|
Description | postal code (e.g., ZIP code) for correspondent |
XML field name |
ST.66: Representative (where Comment = 'Domestic Correspondent') / ... / AddressPostcode ST.96: NationalCorrespondent / ... / PostalCode |
TSDR field label | Correspondent: Name/Address (section "Attorney/Correspondence Information") |
- CorrespondentCountryCode
Plumage key |
CorrespondentCountryCode
|
Description | ISO 3166 country code for correspondent |
XML field name |
ST.66: Representative (where Comment = 'Domestic Correspondent') / ... / FormattedAddressCountryCode ST.96: NationalCorrespondent / ... / CountryCode |
TSDR field label | Correspondent: Name/Address (section "Attorney/Correspondence Information") |
- CorrespondentCombinedAddress
Plumage key |
CorrespondentCombinedAddress
|
Description |
multiple name/address values for correspondent (convenience value); CorrespondentName, CorrespondentOrganization, CorrespondentAddressLine01, CorrespondentAddressLine02, CorrespondentAddressCity, CorrespondentAddressGeoRegion, CorrespondentPostalCode and CorrespondentCountryCode, separated by the '/' character. |
XML field name | multiple |
TSDR field label | Correspondent: Name/Address (section "Attorney/Correspondence Information") |
Notes | See section Addresses, above. |
- CorrespondentPhoneNumber
Plumage key |
CorrespondentPhoneNumber
|
Description | telephone number for correspondent |
XML field name |
ST.66: Representative (where Comment = 'Domestic Correspondent') / ... / Phone ST.96: NationalCorrespondent / ... / PhoneNumber |
TSDR field label | Correspondent: Phone (section "Attorney/Correspondence Information") |
- CorrespondentFaxNumber
Plumage key |
CorrespondentFaxNumber
|
Description | fax number for correspondent |
XML field name |
ST.66: Representative (where Comment = 'Domestic Correspondent') / ... / Fax ST.96: NationalCorrespondent / ... / FaxNumber |
TSDR field label | Correspondent: Fax (section "Attorney/Correspondence Information") |
- CorrespondentEmailAddress
Plumage key |
CorrespondentEmailAddress
|
Description | email address for correspondent |
XML field name |
ST.66: Representative (where Comment = 'Domestic Correspondent') / ... / Email ST.96: NationalCorrespondent / ... / EmailAddressText |
TSDR field label | Correspondent: Correspondent e-mail (section "Attorney/Correspondence Information") |
The fields listed here are for purposes of audit, debugging and other documentation purposes. They are generated by Plumage itself at runtime, and do not correspond to any data supplied by the PTO. They have no corresponding XML field name or TSDR field label.
In the descriptions below, "XML file" refers to the XML file containing the TSDR data (generally provided at least initially by the PTO); "XSL file" refers to the XSL file used to transform the XML file; and "Plumage implementation" refers to the callable Plumage program (e.g., Plumage-py or Plumage-dotnet).
- DiagnosticInfoXSLTFilename
Plumage key |
DiagnosticInfoXSLTFilename
|
Description | name of the XSL file |
- DiagnosticInfoXSLTLocation
Plumage key |
DiagnosticInfoXSLTLocation
|
Description | location of the XSL file |
- DiagnosticInfoXSLTVersion
Plumage key |
DiagnosticInfoXSLTVersion
|
Description | XSL file version information |
- DiagnosticInfoXSLTDate
Plumage key |
DiagnosticInfoXSLTDate
|
Description | date of the XSL file |
- DiagnosticInfoXSLTFormat
Plumage key |
DiagnosticInfoXSLTFormat
|
Description | XML format that the XSL file is designed to parse ("ST.66" or "ST.96") |
- DiagnosticInfoXSLTAuthor
Plumage key |
DiagnosticInfoXSLTAuthor
|
Description | author of XSL file |
- DiagnosticInfoXSLTURL
Plumage key |
DiagnosticInfoXSLTURL
|
Description | URL for XSL file development |
- DiagnosticInfoXSLTCopyright
Plumage key |
DiagnosticInfoXSLTCopyright
|
Description | copyright information/notice for XSL file |
- DiagnosticInfoXSLTLicense
Plumage key |
DiagnosticInfoXSLTLicense
|
Description | license information for XSL file |
- DiagnosticInfoXSLTLicenseURL
Plumage key |
DiagnosticInfoXSLTLicenseURL
|
Description | license URL for XSL file |
- DiagnosticInfoImplementationName
Plumage key |
DiagnosticInfoImplementationName
|
Description | Name of the Plumage implementation (e.g., "Plumage-dotnet", "Plumage-py") |
- DiagnosticInfoImplementationVersion
Plumage key |
DiagnosticInfoImplementationVersion
|
Description | Plumage implementation version information |
- DiagnosticInfoImplementationDate
Plumage key |
DiagnosticInfoImplementationDate
|
Description | date of the Plumage implementation |
- DiagnosticInfoImplementationAuthor
Plumage key |
DiagnosticInfoImplementationAuthor
|
Description | author of the Plumage implementation |
- DiagnosticInfoImplementationURL
Plumage key |
DiagnosticInfoImplementationURL
|
Description | URL for Plumage implementation development |
- DiagnosticInfoImplementationCopyright
Plumage key |
DiagnosticInfoImplementationCopyright
|
Description | copyright information/notice for Plumage implementation development |
- DiagnosticInfoImplementationLicense
Plumage key |
DiagnosticInfoImplementationLicense
|
Description | license information for Plumage implementation |
- DiagnosticInfoImplementationLicenseURL
Plumage key |
DiagnosticInfoImplementationLicenseURL
|
Description | license URL for Plumage implementation |
- DiagnosticInfoExecutionDateTime
Plumage key |
DiagnosticInfoExecutionDateTime
|
Description | date and time of Plumage execution |
- DiagnosticInfoXMLSource
Plumage key |
DiagnosticInfoXMLSource
|
Description | source (URL or other location) of XML file |
- DiagnosticInfoXSLProcessorVersion
Plumage key |
DiagnosticInfoXSLProcessorVersion
|
Description | version number of XSL processor |
- DiagnosticInfoXSLProcessorVendor
Plumage key |
DiagnosticInfoXSLProcessorVendor
|
Description | vendor information for XSL processor |
- DiagnosticInfoXSLProcessorVendorURL
Plumage key |
DiagnosticInfoXSLProcessorVendorURL
|
Description | URL of XSL processor vendor |
Recurring data is data that can occur multiple times for a trademark. For example, typically a number of events will occur in the course of a trademark registrations lifetime:
- An application is filed;
- the application is assigned to a PTO trademark examiner;
- the examiner issues an office action;
- the applicant responds to the office action;
- the application is approved for publication;
- the application is published;
- the mark is registered.
TSDRMulti
dictionary. In the example above, each of the bullet items is a "mark event", and presented in a "mark event list".
Plumage provides three lists of recurring data:
-
MarkEventList
: Information about events at various stages of prosecution ("Mark Events"); -
ApplicantList
: Information about applicant or owner at various stages of prosecution ("Applicants"); -
AssignmentList
: Information about assignment or other transfers of ownership of the trademark or trademark application. ("Assignments")
TSDRMulti
is represented as a dict
. Each entry in the dict is a list
. Each entry in the list
is a dict
whose keys and data are each string
s.
In Plumage-dotnet, TSDRMulti
is represented as type Dictionary<string, List<Dictionary<string, string>>>
. Each entry in the Dictionary
is represented as type List<Dictionary<string, string>>
; and each entry in the List
is of type Dictionary<string, string>
.
Each of the lists is documented in further detail below. See "Basic examples" to see how these lists can be accessed.
- MarkEventEntryNumber
Plumage key |
MarkEventEntryNumber
|
Description | number associated with the event as supplied by the PTO. The PTO numbers the first event "1" and the number increments with each succeeding event. |
XML field name | MarkEventEntryNumber |
TSDR field label | N/A |
- MarkEventDate
Plumage key |
MarkEventDate
|
Description | date of the mark event |
XML field name | MarkEventDate |
TSDR field label | Date (section "Prosecution History") |
- MarkEventDateTruncated
Plumage key |
MarkEventDateTruncated
|
Description | date of the mark event, truncated to date-only (convenience value) |
XML field name | MarkEventEntryNumber |
TSDR field label | Date (section "Prosecution History") |
- MarkEventDescription
Plumage key |
MarkEventDescription
|
Description | description of the mark event |
XML field name |
ST66: MarkEventInternalDescriptionText ST96: MarkEventDescriptionText |
TSDR field label | Description (section "Prosecution History") |
The Applicants entries show the then-current applicant at various stages (described by the ApplicantDescription field) of the trademark prosecution.
- ApplicantName
Plumage key |
ApplicantName
|
Description | Applicant name |
XML field name |
ST66: FreeFormatNameLine ST96: EntityName, if present; otherwise OrganizationStandardName |
TSDR field label | N/A |
- ApplicantDescription
Plumage key |
ApplicantDescription
|
Description | Applicant description; examples include "ORIGINAL APPLICANT", "OWNER AT PUBLICATION", "ORIGINAL REGSITRANT", etc. |
XML field name |
ST66: PartyTypeDescriptionText ST96: CommentText |
TSDR field label | N/A |
- ApplicantAddressLine01
Plumage key |
ApplicantAddressLine01
|
Description | First line of applicant address |
XML field name |
ST66: AddressRoom ST96: AddressLineText (sequenceNumber='1') |
TSDR field label | N/A |
- ApplicantAddressLine02
Plumage key |
ApplicantAddressLine02
|
Description | Second line of applicant address |
XML field name |
ST66: not supported (reported as blank) ST96: AddressLineText (sequenceNumber='2') |
TSDR field label | N/A |
- ApplicantAddressCity
Plumage key |
ApplicantAddressCity
|
Description | Applicant city |
XML field name |
ST66: AddressCity ST96: CityName |
TSDR field label | N/A |
- ApplicantAddressGeoRegion
Plumage key |
ApplicantAddressGeoRegion
|
Description | Applicant geographical region (generally a state or province) |
XML field name |
ST66: AddressState ST96: GeographicRegionName |
TSDR field label | N/A |
- ApplicantPostalCode
Plumage key |
ApplicantPostalCode
|
Description | Applicant postal code (e.g., zip code) |
XML field name |
ST66: AddressPostcode ST96: PostalCode |
TSDR field label | N/A |
- ApplicantCountryCode
Plumage key |
ApplicantCountryCode
|
Description | Applicant country code (ISO 3166) |
XML field name |
ST66: FormattedAddressCountryCode ST96: CountryCode |
TSDR field label | N/A |
- ApplicantCombinedAddress
Plumage key |
ApplicantCombinedAddress
|
Description | multiple name and address values for applicant (convenience field); ApplicantAddressLine01, ApplicantAddressLine02, ApplicantAddressCity, ApplicantAddressGeoRegion, ApplicantPostalCode, ApplicantCountryCode, separated by the '/' character |
XML field name | multiple |
TSDR field label | N/A |
Notes | See section Addresses, above. |
(still under construction)