Skip to content

Commit 7f2978e

Browse files
Ported to protobuf and added test case
Signed-off-by: Steve Springett <[email protected]>
1 parent 9776c2a commit 7f2978e

File tree

2 files changed

+318
-0
lines changed

2 files changed

+318
-0
lines changed

schema/bom-1.7.proto

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,8 @@ message Component {
166166
// An external component is one that is not part of an assembly, but is expected to be provided by the environment, regardless of the component's `scope`. This setting can be useful for distinguishing which components are bundled with the product and which can be relied upon to be present in the deployment environment.
167167
// This may be set to `true` for runtime components only. For `Bom.metadata.component`, it must be set to `false`.
168168
optional bool isExternal = 34; // implicit defaults to `false`
169+
// A list of assertions made regarding patents associated with this component or service. Assertions distinguish between ownership, licensing, and other relevant interactions with patents.
170+
repeated PatentAssertion patent_assertions = 35;
169171
}
170172

171173
// Specifies the data flow.
@@ -320,6 +322,12 @@ enum ExternalReferenceType {
320322
EXTERNAL_REFERENCE_TYPE_RFC_9116 = 41;
321323
// Reference to release notes
322324
EXTERNAL_REFERENCE_TYPE_RELEASE_NOTES = 42;
325+
// References information about patents which may be defined in human-readable documents or in machine-readable formats such as CycloneDX or ST.96. For detailed patent information or to reference the information provided directly by patent offices, it is recommended to leverage standards from the World Intellectual Property Organization (WIPO) such as [ST.96](https://www.wipo.int/standards/en/st96).
326+
EXTERNAL_REFERENCE_TYPE_PATENT = 43;
327+
// References information about a patent family which may be defined in human-readable documents or in machine-readable formats such as CycloneDX or ST.96. A patent family is a group of related patent applications or granted patents that cover the same or similar invention. For detailed patent family information or to reference the information provided directly by patent offices, it is recommended to leverage standards from the World Intellectual Property Organization (WIPO) such as [ST.96](https://www.wipo.int/standards/en/st96).
328+
EXTERNAL_REFERENCE_TYPE_PATENT_FAMILY = 44;
329+
// References assertions made regarding patents associated with a component or service. Assertions distinguish between ownership, licensing, and other relevant interactions with patents.
330+
EXTERNAL_REFERENCE_TYPE_PATENT_ASSERTION = 45;
323331
}
324332

325333
enum HashAlg {
@@ -669,6 +677,8 @@ message Service {
669677
optional string trustZone = 16;
670678
// Textual strings that aid in the discovery, search, and retrieval of the associated object. Tags often serve as a way to group or categorize similar or related objects by various attributes. Examples include "json-parser", "object-persistence", "text-to-image", "translation", and "object-detection".
671679
repeated string tags = 17;
680+
// A list of assertions made regarding patents associated with this component or service. Assertions distinguish between ownership, licensing, and other relevant interactions with patents.
681+
repeated PatentAssertion patent_assertions = 18;
672682
}
673683

674684
// Specifies metadata and content for ISO-IEC 19770-2 Software Identification (SWID) Tags.
@@ -2038,6 +2048,8 @@ message Definition {
20382048

20392049
// The list of standards which may consist of regulations, industry or organizational-specific standards, maturity models, best practices, or any other requirements which can be evaluated against or attested to.
20402050
repeated Standard standards = 1;
2051+
// The list of either individual patents or patent families.
2052+
repeated PatentOrFamily patents = 2;
20412053
}
20422054

20432055
// "Cryptographic Properties
@@ -2393,3 +2405,119 @@ message CryptoProperties {
23932405
// The object identifier (OID) of the cryptographic asset.
23942406
optional string oid = 6;
23952407
}
2408+
2409+
message PatentOrFamily {
2410+
oneof item {
2411+
Patent patent = 1;
2412+
PatentFamily patent_family = 2;
2413+
}
2414+
}
2415+
2416+
// The priorityApplication contains the essential data necessary to identify and reference an earlier patent filing for priority rights. In line with WIPO ST.96 guidelines, it includes the jurisdiction (office code), application number, and filing date-the three key elements that uniquely specify the priority application in a global patent context.
2417+
message PriorityApplication {
2418+
//The unique number assigned to a patent application when it is filed with a patent office. It is used to identify the specific application and track its progress through the examination process. Aligned with `ApplicationNumber` in ST.96. Refer to [ApplicationIdentificationType in ST.96](https://www.wipo.int/standards/XMLSchema/ST96/V8_0/Patent/ApplicationIdentificationType.xsd).
2419+
string application_number = 1;
2420+
// The jurisdiction or patent office where the priority application was filed, specified using WIPO ST.3 codes. Aligned with `IPOfficeCode` in ST.96. Refer to [IPOfficeCode in ST.96](https://www.wipo.int/standards/XMLSchema/ST96/V8_0/Common/IPOfficeCode.xsd).
2421+
string jurisdiction = 2;
2422+
// The date the priority application was filed, aligned with `FilingDate` in ST.96. Refer to [FilingDate in ST.96](https://www.wipo.int/standards/XMLSchema/ST96/V8_0/Patent/FilingDate.xsd).
2423+
google.protobuf.Timestamp filing_date = 3;
2424+
}
2425+
2426+
// A patent is a legal instrument, granted by an authority, that confers certain rights over an invention for a specified period, contingent on public disclosure and adherence to relevant legal requirements. The summary information in this object is aligned with [WIPO ST.96](https://www.wipo.int/standards/en/st96/) principles where applicable.
2427+
message Patent {
2428+
// An optional identifier which can be used to reference the component elsewhere in the BOM. Uniqueness is enforced within all elements and children of the root-level bom element.
2429+
optional string bom_ref = 1;
2430+
// The unique number assigned to the granted patent by the issuing authority. Aligned with `PatentNumber` in WIPO ST.96. Refer to [PatentNumber in ST.96](https://www.wipo.int/standards/XMLSchema/ST96/V8_0/Patent/PatentNumber.xsd).
2431+
string patent_number = 2;
2432+
// The unique number assigned to a patent application when it is filed with a patent office. It is used to identify the specific application and track its progress through the examination process. Aligned with `ApplicationNumber` in ST.96. Refer to [ApplicationIdentificationType in ST.96](https://www.wipo.int/standards/XMLSchema/ST96/V8_0/Patent/ApplicationIdentificationType.xsd).
2433+
optional string application_number = 3;
2434+
// The jurisdiction or patent office where the priority application was filed, specified using WIPO ST.3 codes. Aligned with `IPOfficeCode` in ST.96. Refer to [IPOfficeCode in ST.96](https://www.wipo.int/standards/XMLSchema/ST96/V8_0/Common/IPOfficeCode.xsd).
2435+
string jurisdiction = 4;
2436+
// The priorityApplication contains the essential data necessary to identify and reference an earlier patent filing for priority rights. In line with WIPO ST.96 guidelines, it includes the jurisdiction (office code), application number, and filing date-the three key elements that uniquely specify the priority application in a global patent context.
2437+
optional PriorityApplication priority_application = 5;
2438+
// This is the number assigned to a patent application once it is published. Patent applications are generally published 18 months after filing (unless an applicant requests non-publication). This number is distinct from the application number.
2439+
optional string publication_number = 6;
2440+
// The title of the patent, summarising the invention it protects. Aligned with `InventionTitle` in WIPO ST.96. Refer to [InventionTitle in ST.96](https://www.wipo.int/standards/XMLSchema/ST96/V8_0/Patent/InventionTitle.xsd).
2441+
optional string title = 7;
2442+
// A brief summary of the invention described in the patent. Aligned with `Abstract` and `P` in WIPO ST.96. Refer to [Abstract in ST.96](https://www.wipo.int/standards/XMLSchema/ST96/V8_0/Patent/Abstract.xsd).
2443+
optional string abstract = 8;
2444+
// The date the patent application was filed with the jurisdiction. Aligned with `FilingDate` in WIPO ST.96. Refer to [FilingDate in ST.96](https://www.wipo.int/standards/XMLSchema/ST96/V8_0/Patent/FilingDate.xsd).
2445+
optional google.protobuf.Timestamp filing_date = 9;
2446+
// The date the patent was granted by the jurisdiction. Aligned with `GrantDate` in WIPO ST.96. Refer to [GrantDate in ST.96](https://www.wipo.int/standards/XMLSchema/ST96/V8_0/Patent/GrantDate.xsd).
2447+
optional google.protobuf.Timestamp grant_date = 10;
2448+
// The date the patent expires. Derived from grant or filing date according to jurisdiction-specific rules.
2449+
optional google.protobuf.Timestamp patent_expiration_date = 11;
2450+
// Indicates the current legal status of the patent or patent application, based on the WIPO ST.27 standard. This status reflects administrative, procedural, or legal events. Values include both active and inactive states and are useful for determining enforceability, procedural history, and maintenance status.
2451+
PatentLegalStatus patent_legal_status = 12;
2452+
// A collection of organisations or individuals to whom the patent rights are assigned. This supports joint ownership and allows for flexible representation of both corporate entities and individual inventors.
2453+
repeated OrganizationalEntityOrContact patent_assignee = 13;
2454+
// External references provide a way to document systems, sites, and information that may be relevant but are not included with the BOM. They may also establish specific relationships within or external to the BOM.
2455+
repeated ExternalReference external_references = 14;
2456+
}
2457+
2458+
// Indicates the current legal status of the patent or patent application, based on the WIPO ST.27 standard. This status reflects administrative, procedural, or legal events. Values include both active and inactive states and are useful for determining enforceability, procedural history, and maintenance status.
2459+
enum PatentLegalStatus {
2460+
PATENT_LEGAL_STATUS_UNSPECIFIED = 0;
2461+
PATENT_LEGAL_STATUS_PENDING = 1;
2462+
PATENT_LEGAL_STATUS_GRANTED = 2;
2463+
PATENT_LEGAL_STATUS_REVOKED = 3;
2464+
PATENT_LEGAL_STATUS_EXPIRED = 4;
2465+
PATENT_LEGAL_STATUS_LAPSED = 5;
2466+
PATENT_LEGAL_STATUS_WITHDRAWN = 6;
2467+
PATENT_LEGAL_STATUS_ABANDONED = 7;
2468+
PATENT_LEGAL_STATUS_SUSPENDED = 8;
2469+
PATENT_LEGAL_STATUS_REINSTATED = 9;
2470+
PATENT_LEGAL_STATUS_OPPOSED = 10;
2471+
PATENT_LEGAL_STATUS_TERMINATED = 11;
2472+
PATENT_LEGAL_STATUS_INVALIDATED = 12;
2473+
PATENT_LEGAL_STATUS_IN_FORCE = 13;
2474+
}
2475+
2476+
// A patent family is a group of related patent applications or granted patents that cover the same or similar invention. These patents are filed in multiple jurisdictions to protect the invention across different regions or countries. A patent family typically includes patents that share a common priority date, originating from the same initial application, and may vary slightly in scope or claims to comply with regional legal frameworks. Fields align with WIPO ST.96 standards where applicable.
2477+
message PatentFamily {
2478+
// An optional identifier which can be used to reference the component elsewhere in the BOM. Uniqueness is enforced within all elements and children of the root-level bom element.
2479+
optional string bom_ref = 1;
2480+
// The unique identifier for the patent family, aligned with the `id` attribute in WIPO ST.96 v8.0's `PatentFamilyType`. Refer to [PatentFamilyType in ST.96](https://www.wipo.int/standards/XMLSchema/ST96/V8_0/Patent/PatentFamilyType.xsd).
2481+
string family_id = 2;
2482+
// The priorityApplication contains the essential data necessary to identify and reference an earlier patent filing for priority rights. In line with WIPO ST.96 guidelines, it includes the jurisdiction (office code), application number, and filing date-the three key elements that uniquely specify the priority application in a global patent context.
2483+
optional PriorityApplication priority_application = 3;
2484+
// A collection of patents or applications that belong to this family, each identified by a `bom-ref` pointing to a patent object defined elsewhere in the BOM.
2485+
repeated string members = 4; // bom-ref strings
2486+
// External references provide a way to document systems, sites, and information that may be relevant but are not included with the BOM. They may also establish specific relationships within or external to the BOM.
2487+
repeated ExternalReference external_references = 5;
2488+
}
2489+
2490+
// An assertion linking a patent or patent family to this component or service.
2491+
message PatentAssertion {
2492+
// An optional identifier which can be used to reference the component elsewhere in the BOM. Uniqueness is enforced within all elements and children of the root-level bom element.
2493+
optional string bom_ref = 1;
2494+
// The type of assertion being made about the patent or patent family. Examples include ownership, licensing, and standards inclusion.
2495+
PatentAssertionType assertion_type = 2;
2496+
// A list of BOM references (`bom-ref`) linking to patents or patent families associated with this assertion.
2497+
repeated string patent_refs = 3;
2498+
// A reference to a previously defined `organizationalContact` or `organizationalEntity` object in the BOM. The value must be a valid `bom-ref` pointing to one of these objects.
2499+
Asserter asserter = 4;
2500+
// Additional notes or clarifications regarding the assertion, if necessary. For example, geographical restrictions, duration, or limitations of a license.
2501+
string notes = 5;
2502+
}
2503+
2504+
message Asserter {
2505+
oneof value {
2506+
OrganizationalEntity organization = 1;
2507+
OrganizationalContact individual = 2;
2508+
string ref = 3;
2509+
}
2510+
}
2511+
2512+
// The type of assertion being made about the patent or patent family. Examples include ownership, licensing, and standards inclusion.
2513+
enum PatentAssertionType {
2514+
PATENT_ASSERTION_TYPE_UNSPECIFIED = 0;
2515+
PATENT_ASSERTION_TYPE_OWNERSHIP = 1;
2516+
PATENT_ASSERTION_TYPE_LICENSE = 2;
2517+
PATENT_ASSERTION_TYPE_THIRD_PARTY_CLAIM = 3;
2518+
PATENT_ASSERTION_TYPE_STANDARDS_INCLUSION = 4;
2519+
PATENT_ASSERTION_TYPE_PRIOR_ART = 5;
2520+
PATENT_ASSERTION_TYPE_EXCLUSIVE_RIGHTS = 6;
2521+
PATENT_ASSERTION_TYPE_NON_ASSERTION = 7;
2522+
PATENT_ASSERTION_TYPE_RESEARCH_OR_EVALUATION = 8;
2523+
}
Lines changed: 190 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,190 @@
1+
# proto-file: schema/bom-1.7.proto
2+
# proto-message: Bom
3+
4+
components [
5+
{
6+
bom_ref: "component-1"
7+
type: CLASSIFICATION_LIBRARY
8+
manufacturer {
9+
bom_ref: "org-acme-inc"
10+
name: "Acme Inc"
11+
url: "https://example.com"
12+
}
13+
name: "High-Efficiency Processor"
14+
version: "1.0"
15+
patent_assertions [
16+
{
17+
bom_ref: "patent-assertion-1"
18+
assertion_type: PATENT_ASSERTION_TYPE_OWNERSHIP
19+
asserter {
20+
ref: "org-acme-inc"
21+
}
22+
patent_refs: "patent-1"
23+
notes: "Covers the core processing architecture for advanced computation."
24+
},
25+
{
26+
bom_ref: "patent-assertion-2"
27+
assertion_type: PATENT_ASSERTION_TYPE_LICENSE
28+
asserter {
29+
ref: "org-acme-inc"
30+
}
31+
patent_refs: "patent-3"
32+
notes: "Licensed for use in North America."
33+
}
34+
]
35+
}
36+
]
37+
38+
services [
39+
{
40+
bom_ref: "service-1"
41+
name: "Data Analysis Service"
42+
patent_assertions {
43+
bom_ref: "patent-assertion-3"
44+
assertion_type: PATENT_ASSERTION_TYPE_EXCLUSIVE_RIGHTS
45+
asserter {
46+
organization {
47+
name: "Partner Company"
48+
contact: {
49+
name: "Sam Smith"
50+
}
51+
}
52+
}
53+
patent_refs: "patent-2"
54+
notes: "Exclusive rights for machine learning integration."
55+
}
56+
}
57+
]
58+
59+
definitions {
60+
patents {
61+
patent {
62+
bom_ref: "patent-1"
63+
patent_number: "US1234567890"
64+
application_number: "12345"
65+
jurisdiction: "US"
66+
publication_number: "US-12345"
67+
title: "Efficient Data Processing Algorithm"
68+
abstract: "A novel system and method for improving data processing efficiency."
69+
filing_date {
70+
seconds: 1610668800
71+
nanos: 0
72+
}
73+
grant_date {
74+
seconds: 1654041600
75+
nanos: 0
76+
}
77+
patent_expiration_date {
78+
seconds: 2284233600
79+
nanos: 0
80+
}
81+
patent_legal_status: PATENT_LEGAL_STATUS_IN_FORCE
82+
patent_assignee {
83+
organization {
84+
name: "Tech Innovators Inc."
85+
url: "https://techinnovators.com"
86+
}
87+
}
88+
external_references {
89+
type: EXTERNAL_REFERENCE_TYPE_PATENT
90+
url: "https://uspto.gov/patent/US12345678B1"
91+
comment: "Official USPTO page for the patent."
92+
}
93+
}
94+
}
95+
96+
patents {
97+
patent {
98+
bom_ref: "patent-2"
99+
patent_number: "EU1234567890"
100+
application_number: "12345"
101+
jurisdiction: "EU"
102+
priority_application {
103+
application_number: "US1234567890"
104+
jurisdiction: "US"
105+
filing_date: {
106+
seconds: 1610668800
107+
nanos: 0
108+
}
109+
}
110+
publication_number: "EU-12345"
111+
title: "Efficient Data Processing Algorithm"
112+
abstract: "A novel system and method for improving data processing efficiency."
113+
filing_date {
114+
seconds: 1610668800
115+
nanos: 0
116+
}
117+
grant_date {
118+
seconds: 1654041600
119+
nanos: 0
120+
}
121+
patent_expiration_date {
122+
seconds: 2284233600
123+
nanos: 0
124+
}
125+
patent_legal_status: PATENT_LEGAL_STATUS_IN_FORCE
126+
patent_assignee {
127+
organization {
128+
name: "Tech Innovators Inc."
129+
url: "https://techinnovators.com"
130+
}
131+
}
132+
}
133+
}
134+
135+
patents {
136+
patent {
137+
bom_ref: "patent-3"
138+
patent_number: "EP987654321A1"
139+
jurisdiction: "EP"
140+
title: "Data Processing Optimisation"
141+
abstract: "An optimised approach to data processing for scalable systems."
142+
filing_date {
143+
seconds: 1612915200
144+
nanos: 0
145+
}
146+
grant_date {
147+
seconds: 1678838400
148+
nanos: 0
149+
}
150+
patent_expiration_date {
151+
seconds: 2307504000
152+
nanos: 0
153+
}
154+
patent_legal_status: PATENT_LEGAL_STATUS_IN_FORCE
155+
patent_assignee {
156+
individual {
157+
name: "Jane Smith"
158+
159+
}
160+
}
161+
external_references {
162+
type: EXTERNAL_REFERENCE_TYPE_PATENT
163+
url: "https://euipo.europa.eu/ep987654321A1"
164+
comment: "Official EUIPO page for the patent."
165+
}
166+
}
167+
}
168+
169+
patents {
170+
patent_family {
171+
bom_ref: "patent-family-1"
172+
family_id: "PF-2023001"
173+
priority_application {
174+
application_number: "12345"
175+
jurisdiction: "US"
176+
filing_date {
177+
seconds: 1610668800
178+
nanos: 0
179+
}
180+
}
181+
members: "patent-1"
182+
members: "patent-2"
183+
external_references {
184+
type: EXTERNAL_REFERENCE_TYPE_PATENT_FAMILY
185+
url: "https://uspto.gov/patent-family-5678"
186+
comment: "Official record of the patent family."
187+
}
188+
}
189+
}
190+
}

0 commit comments

Comments
 (0)