Documentation
¶
Overview ¶
Package parse maps EPO XML <exchange-document> nodes to flat PatentRecord values for downstream Parquet storage.
All exported functions are pure and goroutine-safe. The streaming pipeline calls ExtractPatentRecord per element from a pool of extractor goroutines without any synchronisation.
Per-section parsers (classifications, citations, family members) degrade to an empty slice on malformed sub-trees rather than aborting the whole record. Hard failures (missing required root attributes) still bubble up as a returned error.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Citation ¶
type Citation struct {
// CitedID is the country+doc-number+kind triple, e.g. "US9114971B2".
CitedID string `parquet:"name=cited_id, type=BYTE_ARRAY, convertedtype=UTF8"`
// Categories holds the EPO examiner relevance codes: X (highly relevant),
// Y (relevant in combination), A (background), E, O, T, …
Categories []string `parquet:"name=categories, type=LIST"`
}
Citation is one <citation> under <references-cited>. CitedID is the concatenated country+number+kind of the cited document; Categories captures the EPO citation categories (X, Y, A, …).
type DocumentID ¶
type DocumentID struct {
Country string // two-letter country code, e.g. "US", "EP"
DocNumber string // bare application or publication number
Kind string // kind code, e.g. "B2", "A1"
}
DocumentID is the country + doc-number + kind triple identifying a single patent publication.
type ExchangeDocument ¶
type ExchangeDocument struct {
Country string
DocNumber string
Kind string
Status string
PatentClassifications []PatentClassification
Citations []Citation
FamilyMembers []FamilyMember
}
ExchangeDocument is the in-memory mirror of an EPO <exchange-document> element. It is the parser's internal staging type — the public, flat output is PatentRecord.
type FamilyMember ¶
type FamilyMember struct {
PublicationReferences []PublicationReference
}
FamilyMember is one <family-member> under <patent-family>. Each member groups the publication references for a single patent within the same simple family.
type PatentClassification ¶
type PatentClassification struct {
Scheme string // e.g. "CPCI" or "IPCR"
ClassificationSymbol string // canonical symbol, e.g. "H04L63/00"
}
PatentClassification is one <patent-classification> entry. Scheme is the classification system (e.g. "CPCI", "IPCR"); ClassificationSymbol is the canonical symbol within that scheme.
type PatentRecord ¶
type PatentRecord struct {
// PatentID is the EPO identifier: country+doc-number+kind, e.g. "EP1234567A1".
PatentID string `parquet:"name=patent_id, type=BYTE_ARRAY, convertedtype=UTF8"`
// Status is the legal status of the document, e.g. "new", "update".
Status string `parquet:"name=status, type=BYTE_ARRAY, convertedtype=UTF8"`
// CPCList contains the CPC (Cooperative Patent Classification) symbols
// assigned by the examining office.
CPCList []string `parquet:"name=cpc_list, type=LIST"`
// Citations lists all documents cited in the examination report.
Citations []Citation `parquet:"name=citations, type=LIST"`
// FamilyPatents lists the DOCDB patent identifiers of all simple-family
// members, normalised to country+doc-number+kind.
FamilyPatents []string `parquet:"name=family_patents, type=LIST"`
}
PatentRecord is the flat Parquet row written by the streaming pipeline. Field order and parquet tags are stable contracts — changing them is a breaking change for downstream consumers.
func ExtractPatentRecord ¶
func ExtractPatentRecord(node *xmlquery.Node) (PatentRecord, error)
ExtractPatentRecord parses an EPO exchange-document XML node into a flat PatentRecord. Stateless and goroutine-safe; performs no I/O.
type PublicationReference ¶
type PublicationReference struct {
// DataFormat is the DOCDB identifier format: "docdb" or "epodoc".
DataFormat string
DocumentID DocumentID
}
PublicationReference is one <publication-reference> with its data-format attribute (typically "docdb" or "epodoc") and the resolved DocumentID.
type RecordSource ¶
type RecordSource interface {
Next(*PatentRecord) (bool, error)
Close() error
}
RecordSource yields PatentRecord values one at a time. Implementations must be safe for sequential use; concurrent access is not required.
Next reports (true, nil) for a populated record, (false, nil) on EOF, and (false, err) on any other failure. Close releases the underlying reader.
func OpenRecordSource ¶
func OpenRecordSource(path string) (RecordSource, error)
OpenRecordSource opens path as a RecordSource. The format is selected by extension: .parquet → Parquet; .csv or .csv.gz → CSV.