From 45af9ec3dfddf0eb4168e5d80693303b5f735fc5 Mon Sep 17 00:00:00 2001 From: Steve Springett Date: Mon, 10 Feb 2025 16:06:55 -0600 Subject: [PATCH 1/8] Initial checkin of patent support Signed-off-by: Steve Springett --- schema/bom-1.7.schema.json | 298 ++++++++++++++++++ .../test/resources/1.7/valid-patent-1.7.json | 154 +++++++++ 2 files changed, 452 insertions(+) create mode 100644 tools/src/test/resources/1.7/valid-patent-1.7.json diff --git a/schema/bom-1.7.schema.json b/schema/bom-1.7.schema.json index 2a8e13ab..ff300317 100644 --- a/schema/bom-1.7.schema.json +++ b/schema/bom-1.7.schema.json @@ -514,6 +514,16 @@ "items": { "$ref": "#/definitions/standard" } + }, + "patents": { + "type": "array", + "description": "The list of either individual patents or patent families.", + "items": { + "anyOf": [ + { "$ref": "#/definitions/patent" }, + { "$ref": "#/definitions/patentFamily" } + ] + } } } }, @@ -962,6 +972,10 @@ "description": "A copyright notice informing users of the underlying claims to copyright ownership in a published work.", "examples": ["Acme Inc"] }, + "patentAssertions": { + "$ref": "#/definitions/patentAssertions", + "title": "Component Patent(s)" + }, "cpe": { "type": "string", "title": "Common Platform Enumeration (CPE)", @@ -1774,6 +1788,9 @@ "electronic-signature", "digital-signature", "rfc-9116", + "patent", + "patent-family", + "patent-assertion", "other" ], "meta:enum": { @@ -1819,6 +1836,9 @@ "electronic-signature": "An e-signature is commonly a scanned representation of a written signature or a stylized script of the person's name.", "digital-signature": "A signature that leverages cryptography, typically public/private key pairs, which provides strong authenticity verification.", "rfc-9116": "Document that complies with [RFC 9116](https://www.ietf.org/rfc/rfc9116.html) (A File Format to Aid in Security Vulnerability Disclosure)", + "patent": "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).", + "patent-family": "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).", + "patent-assertion" : "TODO", "other": "Use this if no other types accurately describe the purpose of the external reference." } }, @@ -1939,6 +1959,10 @@ "$ref": "#/definitions/licenseChoice", "title": "Service License(s)" }, + "patentAssertions": { + "$ref": "#/definitions/patentAssertions", + "title": "Service Patent(s)" + }, "externalReferences": { "type": "array", "items": {"$ref": "#/definitions/externalReference"}, @@ -5694,6 +5718,280 @@ "translation", "object-detection" ] + }, + "patentFamily": { + "type": "object", + "title": "Patent Family", + "description": "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.", + "required": ["familyId"], + "additionalProperties": false, + "properties": { + "bom-ref": { + "$ref": "#/definitions/refType", + "title": "BOM Reference", + "description": "An optional identifier which can be used to reference the object elsewhere in the BOM. Every bom-ref MUST be unique within the BOM. \n\nFor a patent, it might be a good idea to use a patent number as the BOM reference ID." + }, + "familyId": { + "type": "string", + "title": "Patent Family ID", + "description": "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)." + }, + "priorityApplication": { + "$ref": "#/definitions/priorityApplication" + }, + "members": { + "type": "array", + "title": "Family Members", + "description": "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.", + "additionalItems": false, + "items": { + "type": "string", + "title": "BOM Reference", + "description": "A `bom-ref` linking to a patent or application object within the BOM." + } + }, + "externalReferences": { + "type": "array", + "title": "External References", + "description": "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.", + "items": { + "$ref": "#/definitions/externalReference" + } + } + } + }, + "patent": { + "type": "object", + "title": "Patent", + "description": "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.", + "required": ["patentNumber", "jurisdiction", "patentLegalStatus"], + "additionalProperties": false, + "properties": { + "bom-ref": { + "$ref": "#/definitions/refType", + "title": "BOM Reference", + "description": "An optional identifier which can be used to reference the object elsewhere in the BOM. Every bom-ref must be unique within the BOM." + }, + "patentNumber": { + "type": "string", + "pattern": "^[A-Za-z0-9][A-Za-z0-9\\-/.()\\s]{0,28}[A-Za-z0-9]$", + "title": "Patent Number", + "description": "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).", + "examples": ["US987654321", "EP1234567B1"] + }, + "applicationNumber": { + "$ref": "#/definitions/patentApplicationNumber" + }, + "jurisdiction": { + "$ref": "#/definitions/patentJurisdiction" + }, + "priorityApplication": { + "$ref": "#/definitions/priorityApplication" + }, + "publicationNumber": { + "type": "string", + "pattern": "^[A-Za-z0-9][A-Za-z0-9\\-/.()\\s]{0,28}[A-Za-z0-9]$", + "title": "Patent Publication Number", + "description": "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. \n\nPurpose: Identifies the publicly available version of the application. \n\nFormat: Varies by jurisdiction, often similar to application numbers but includes an additional suffix indicating publication. \n\nExample:\n - US: US20240000123A1 (indicates the first publication of application US20240000123) \n - Europe: EP23123456A1 (first publication of European application EP23123456). \n\nWIPO ST.96 v8.0: \n - Publication Number field: https://www.wipo.int/standards/XMLSchema/ST96/V8_0/Patent/PublicationNumber.xsd" + }, + "title": { + "type": "string", + "title": "Patent Title", + "description": "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)." + }, + "abstract": { + "type": "string", + "title": "Patent Abstract", + "description": "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)." + }, + "filingDate": { + "type": "string", + "format": "date", + "title": "Filing Date", + "description": "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)." + }, + "grantDate": { + "type": "string", + "format": "date", + "title": "Grant Date", + "description": "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)." + }, + "patentExpirationDate": { + "type": "string", + "format": "date", + "title": "Expiration Date", + "description": "The date the patent expires. Derived from grant or filing date according to jurisdiction-specific rules." + }, + "patentLegalStatus": { + "type": "string", + "title": "Legal Status", + "description": "TODO - ST.27 defines a few different states, stages, and events.", + "enum": [ + "pending", + "granted", + "revoked", + "expired", + "lapsed", + "withdrawn", + "abandoned", + "suspended", + "reinstated", + "opposed", + "terminated", + "invalidated", + "in-force" + ], + "meta:enum": { + "pending": "The patent application has been filed but not yet examined or granted.", + "granted": "The patent application has been examined and a patent has been issued.", + "revoked": "The patent has been declared invalid through a legal or administrative process.", + "expired": "The patent has reached the end of its enforceable term.", + "lapsed": "The patent is no longer in force due to non-payment of maintenance fees or other requirements.", + "withdrawn": "The patent application was voluntarily withdrawn by the applicant.", + "abandoned": "The patent application was abandoned, often due to lack of action or response.", + "suspended": "Processing of the patent application has been temporarily halted.", + "reinstated": "A previously abandoned or lapsed patent has been reinstated.", + "opposed": "The patent application or granted patent is under formal opposition proceedings.", + "terminated": "The patent or application has been officially terminated.", + "invalidated": "The patent has been invalidated, either in part or in full.", + "in-force": "The granted patent is active and enforceable." + } + }, + "patentAssignee": { + "type": "array", + "title": "Patent Assignees", + "description": "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.", + "items": { + "oneOf": [ + { + "$ref": "#/definitions/organizationalContact" + }, + { + "$ref": "#/definitions/organizationalEntity" + } + ] + } + }, + "externalReferences": { + "type": "array", + "title": "External References", + "description": "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.", + "items": { + "$ref": "#/definitions/externalReference" + } + } + } + }, + "patentAssertions": { + "type": "array", + "title": "Patent Assertions", + "description": "A list of assertions made regarding patents associated with this component or service. Assertions distinguish between ownership, licensing, and other relevant interactions with patents.", + "additionalItems": false, + "items": { + "type": "object", + "title": "Patent Assertion", + "description": "An assertion linking a patent or patent family to this component or service.", + "required": ["assertionType", "asserter"], + "additionalProperties": false, + "properties": { + "bom-ref": { + "$ref": "#/definitions/refType", + "title": "BOM Reference", + "description": "A reference to the patent or patent family object within the BOM. This must match the `bom-ref` of a `patent` or `patentFamily` object." + }, + "assertionType": { + "type": "string", + "title": "Assertion Type", + "description": "The type of assertion being made about the patent or patent family. Examples include ownership, licensing, and standards inclusion.", + "enum": [ + "ownership", + "license", + "third-party-claim", + "standards-inclusion", + "prior-art", + "exclusive-rights", + "non-assertion", + "research-or-evaluation" + ], + "meta:enum": { + "ownership": "The manufacturer asserts ownership of the patent or patent family.", + "license": "The manufacturer asserts they have a license to use the patent or patent family.", + "third-party-claim": "A third party has asserted a claim or potential infringement against the manufacturer’s component or service.", + "standards-inclusion": "The patent is part of a standard essential patent (SEP) portfolio relevant to the component or service.", + "prior-art": "The manufacturer asserts the patent or patent family as prior art that invalidates another patent or claim.", + "exclusive-rights": "The manufacturer asserts exclusive rights granted through a licensing agreement.", + "non-assertion": "The manufacturer asserts they will not enforce the patent or patent family against certain uses or users.", + "research-or-evaluation": "The patent or patent family is being used under a research or evaluation license." + } + }, + "patentRefs": { + "type": "array", + "title": "Patent References", + "description": "A list of BOM references (`bom-ref`) linking to patents or patent families associated with this assertion.", + "items": { + "$ref": "#/definitions/refType" + } + }, + "asserter": { + "oneOf": [ + { + "$ref": "#/definitions/organizationalEntity" + }, + { + "$ref": "#/definitions/organizationalContact" + }, + { + "$ref": "#/definitions/refLinkType", + "title": "Reference", + "description": "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." + } + ] + }, + "notes": { + "type": "string", + "title": "Notes", + "description": "Additional notes or clarifications regarding the assertion, if necessary. For example, geographical restrictions, duration, or limitations of a license." + } + } + } + }, + "patentApplicationNumber": { + "type": "string", + "pattern": "^[A-Za-z0-9][A-Za-z0-9\\-/.()\\s]{0,28}[A-Za-z0-9]$", + "title": "Patent Application Number", + "description": "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).", + "examples": ["US20240000123", "EP23123456"] + }, + "patentJurisdiction": { + "type": "string", + "title": "Jurisdiction", + "description": "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).", + "pattern": "^[A-Z]{2}$", + "examples": ["US", "EP", "JP"] + }, + "patentFilingDate": { + "type": "string", + "format": "date", + "title": "Filing Date", + "description": "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)." + }, + "priorityApplication": { + "type": "object", + "title": "Priority Application", + "description": "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.", + "required": ["applicationNumber", "jurisdiction", "filingDate"], + "additionalProperties": false, + "properties": { + "applicationNumber": { + "$ref": "#/definitions/patentApplicationNumber" + }, + "jurisdiction": { + "$ref": "#/definitions/patentJurisdiction" + }, + "filingDate": { + "$ref": "#/definitions/patentFilingDate" + } + } } } } diff --git a/tools/src/test/resources/1.7/valid-patent-1.7.json b/tools/src/test/resources/1.7/valid-patent-1.7.json new file mode 100644 index 00000000..596d1138 --- /dev/null +++ b/tools/src/test/resources/1.7/valid-patent-1.7.json @@ -0,0 +1,154 @@ +{ + "$schema": "http://cyclonedx.org/schema/bom-1.7.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.7", + "serialNumber": "urn:uuid:123e4567-e89b-12d3-a456-426614174000", + "version": 1, + "components": [ + { + "bom-ref": "component-1", + "type": "library", + "manufacturer": { + "bom-ref": "org-acme-inc", + "name": "Acme Inc", + "url": [ "https://example.com" ] + }, + "name": "High-Efficiency Processor", + "version": "1.0", + "patentAssertions": [ + { + "bom-ref": "patent-assertion-1", + "assertionType": "ownership", + "asserter": "org-acme-inc", + "patentRefs": [ "patent-1" ], + "notes": "Covers the core processing architecture for advanced computation." + }, + { + "bom-ref": "patent-assertion-2", + "assertionType": "license", + "asserter": "org-acme-inc", + "patentRefs": [ "patent-3" ], + "notes": "Licensed for use in North America." + } + ] + } + ], + "services": [ + { + "bom-ref": "service-1", + "name": "Data Analysis Service", + "patentAssertions": [ + { + "bom-ref": "patent-assertion-3", + "assertionType": "exclusive-rights", + "asserter": { + "name": "Partner Company", + "contact": [ + { + "name": "Sam Smith", + "phone": "800-555-1212" + } + ] + }, + "patentRefs": [ "patent-2" ], + "notes": "Exclusive rights for machine learning integration." + } + ] + } + ], + "definitions": { + "patents": [ + { + "bom-ref": "patent-1", + "patentNumber": "US1234567890", + "applicationNumber": "12345", + "jurisdiction": "US", + "publicationNumber": "US-12345", + "title": "Efficient Data Processing Algorithm", + "abstract": "A novel system and method for improving data processing efficiency.", + "filingDate": "2021-01-15", + "grantDate": "2022-06-01", + "patentExpirationDate": "2042-01-15", + "patentLegalStatus": "in-force", + "patentAssignee": [ + { + "name": "Tech Innovators Inc.", + "url": [ "https://techinnovators.com" ] + } + ], + "externalReferences": [ + { + "type": "patent", + "url": "https://uspto.gov/patent/US12345678B1", + "comment": "Official USPTO page for the patent." + } + ] + }, + { + "bom-ref": "patent-2", + "patentNumber": "EU1234567890", + "applicationNumber": "12345", + "jurisdiction": "EU", + "priorityApplication": { + "applicationNumber": "US1234567890", + "jurisdiction": "US", + "filingDate": "2021-01-15" + }, + "publicationNumber": "EU-12345", + "title": "Efficient Data Processing Algorithm", + "abstract": "A novel system and method for improving data processing efficiency.", + "filingDate": "2021-01-15", + "grantDate": "2022-06-01", + "patentExpirationDate": "2042-01-15", + "patentLegalStatus": "in-force", + "patentAssignee": [ + { + "name": "Tech Innovators Inc.", + "url": [ "https://techinnovators.com" ] + } + ] + }, + { + "bom-ref": "patent-3", + "patentNumber": "EP987654321A1", + "jurisdiction": "EP", + "title": "Data Processing Optimisation", + "abstract": "An optimised approach to data processing for scalable systems.", + "filingDate": "2021-02-10", + "grantDate": "2023-03-15", + "patentExpirationDate": "2043-02-10", + "patentLegalStatus": "in-force", + "patentAssignee": [ + { + "name": "Jane Smith", + "email": "jane.smith@techinnovators.com" + } + ], + "externalReferences": [ + { + "type": "patent", + "url": "https://euipo.europa.eu/ep987654321A1", + "comment": "Official EUIPO page for the patent." + } + ] + }, + { + "bom-ref": "patent-family-1", + "familyId": "PF-2023001", + "priorityApplication": { + "applicationNumber": "12345", + "jurisdiction": "US", + "filingDate": "2021-01-15" + }, + "members": ["patent-1", "patent-2"], + "externalReferences": [ + { + "type": "patent-family", + "url": "https://uspto.gov/patent-family-5678", + "comment": "Official record of the patent family." + } + ] + } + ] + } +} From 1f333eddd5c8832929793b14221eb8a93641f337 Mon Sep 17 00:00:00 2001 From: "steve.springett" Date: Mon, 24 Feb 2025 11:11:37 -0600 Subject: [PATCH 2/8] Added missing doc Signed-off-by: steve.springett --- schema/bom-1.7.schema.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/schema/bom-1.7.schema.json b/schema/bom-1.7.schema.json index 941ce73a..6afd97af 100644 --- a/schema/bom-1.7.schema.json +++ b/schema/bom-1.7.schema.json @@ -1838,7 +1838,7 @@ "rfc-9116": "Document that complies with [RFC 9116](https://www.ietf.org/rfc/rfc9116.html) (A File Format to Aid in Security Vulnerability Disclosure)", "patent": "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).", "patent-family": "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).", - "patent-assertion" : "TODO", + "patent-assertion" : "References an assertions made regarding patents associated with a component or service. Assertions distinguish between ownership, licensing, and other relevant interactions with patents.", "other": "Use this if no other types accurately describe the purpose of the external reference." } }, From 1e9cdce856a59d9d87319589ed0a310d7de29d20 Mon Sep 17 00:00:00 2001 From: Steve Springett Date: Thu, 1 May 2025 22:50:06 -0500 Subject: [PATCH 3/8] Corrected minor issue with JSON schema. Ported to XSD and added XML test case Signed-off-by: Steve Springett --- schema/bom-1.7.schema.json | 6 +- schema/bom-1.7.xsd | 360 ++++++++++++++++++ .../test/resources/1.7/valid-patent-1.7.xml | 156 ++++++++ 3 files changed, 519 insertions(+), 3 deletions(-) create mode 100644 tools/src/test/resources/1.7/valid-patent-1.7.xml diff --git a/schema/bom-1.7.schema.json b/schema/bom-1.7.schema.json index 6afd97af..7be13099 100644 --- a/schema/bom-1.7.schema.json +++ b/schema/bom-1.7.schema.json @@ -1838,7 +1838,7 @@ "rfc-9116": "Document that complies with [RFC 9116](https://www.ietf.org/rfc/rfc9116.html) (A File Format to Aid in Security Vulnerability Disclosure)", "patent": "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).", "patent-family": "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).", - "patent-assertion" : "References an assertions made regarding patents associated with a component or service. Assertions distinguish between ownership, licensing, and other relevant interactions with patents.", + "patent-assertion" : "References assertions made regarding patents associated with a component or service. Assertions distinguish between ownership, licensing, and other relevant interactions with patents.", "other": "Use this if no other types accurately describe the purpose of the external reference." } }, @@ -5745,7 +5745,7 @@ "description": "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.", "additionalItems": false, "items": { - "type": "string", + "$ref": "#/definitions/refLinkType", "title": "BOM Reference", "description": "A `bom-ref` linking to a patent or application object within the BOM." } @@ -5825,7 +5825,7 @@ "patentLegalStatus": { "type": "string", "title": "Legal Status", - "description": "TODO - ST.27 defines a few different states, stages, and events.", + "description": "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.", "enum": [ "pending", "granted", diff --git a/schema/bom-1.7.xsd b/schema/bom-1.7.xsd index 594d2bfb..9c82365d 100644 --- a/schema/bom-1.7.xsd +++ b/schema/bom-1.7.xsd @@ -587,6 +587,18 @@ limitations under the License. A copyright notice informing users of the underlying claims to copyright ownership in a published work. + + + + A list of assertions made regarding patents associated with this component or service. Assertions distinguish between ownership, licensing, and other relevant interactions with patents. + + + + + + + + @@ -1545,6 +1557,21 @@ limitations under the License. Document that complies with RFC-9116 (A File Format to Aid in Security Vulnerability Disclosure) + + + 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). + + + + + 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). + + + + + References assertions made regarding patents associated with a component or service. Assertions distinguish between ownership, licensing, and other relevant interactions with patents. + + Use this if no other types accurately describe the purpose of the external reference @@ -2182,6 +2209,18 @@ limitations under the License. + + + + A list of assertions made regarding patents associated with this component or service. Assertions distinguish between ownership, licensing, and other relevant interactions with patents. + + + + + + + + Provides the ability to document external references related to the service. @@ -8045,6 +8084,16 @@ limitations under the License. + + + + + + + + + + @@ -8316,6 +8365,317 @@ limitations under the License. + + + + 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. + + + + + + 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). + + + + + + 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. + + + + + + + + + + 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. + + + + + + + An optional identifier which can be used to reference the object elsewhere in the BOM. + Uniqueness is enforced within all elements and children of the root-level bom element. + + + + + + User-defined attributes may be used on this element as long as they + do not have the same name as an existing attribute used by the schema. + + + + + + + + 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. + + + + + + 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). + + + + + + + + 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. + + Purpose: Identifies the publicly available version of the application. + + Format: Varies by jurisdiction, often similar to application numbers but includes an additional suffix indicating publication. + + Example: + - US: US20240000123A1 (indicates the first publication of application US20240000123) + - Europe: EP23123456A1 (first publication of European application EP23123456). + + WIPO ST.96 v8.0: + - Publication Number field: https://www.wipo.int/standards/XMLSchema/ST96/V8_0/Patent/PublicationNumber.xsd + + + + + 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). + + + + + 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). + + + + + 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). + + + + + 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). + + + + + The date the patent expires. Derived from grant or filing date according to jurisdiction-specific rules. + + + + + 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. + + + + + Organisations or individuals to whom the patent rights are assigned. Supports joint ownership. + + + + + 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. + + + + + + + An optional identifier which can be used to reference the object elsewhere in the BOM. + Uniqueness is enforced within all elements and children of the root-level bom element. + + + + + + User-defined attributes may be used on this element as long as they + do not have the same name as an existing attribute used by the schema. + + + + + + + + An assertion linking a patent or patent family to a component or service. This allows expression of ownership, licensing, third-party claims, and other legal relationships. + + + + + + The type of assertion being made (e.g. ownership, license, third-party-claim, etc.). + + + + + A list of references (`bom-ref`) linking to patents or families associated with this assertion. + + + + + + + + + + The organisation, individual, or BOM reference asserting the patent claim. + + + + + + + + + + + + Additional clarifications regarding the assertion, such as geographic or temporal constraints. + + + + + + + An optional identifier which can be used to reference the object elsewhere in the BOM. + Uniqueness is enforced within all elements and children of the root-level bom element. + + + + + + User-defined attributes may be used on this element as long as they + do not have the same name as an existing attribute used by the schema. + + + + + + + + The legal status of the patent, reflecting various administrative or judicial states a patent or application may be in. Aligned with concepts in WIPO ST.27. + + + + + The patent application has been filed but not yet examined or granted. + + + The patent application has been examined and a patent has been issued. + + + The patent has been declared invalid through a legal or administrative process. + + + The patent has reached the end of its enforceable term. + + + The patent is no longer in force due to non-payment of maintenance fees or other requirements. + + + The patent application was voluntarily withdrawn by the applicant. + + + The patent application was abandoned, often due to lack of action or response. + + + Processing of the patent application has been temporarily halted. + + + A previously abandoned or lapsed patent has been reinstated. + + + The patent application or granted patent is under formal opposition proceedings. + + + The patent or application has been officially terminated. + + + The patent has been invalidated, either in part or in full. + + + The granted patent is active and enforceable. + + + + + + + + Specifies the type of assertion made about a patent or patent family. Enables documentation of legal, ownership, or usage-related claims. + + + + + The manufacturer asserts ownership of the patent or patent family. + + + The manufacturer asserts they have a license to use the patent or patent family. + + + A third party has asserted a claim or potential infringement against the manufacturer’s component or service. + + + The patent is part of a standard essential patent (SEP) portfolio relevant to the component or service. + + + The manufacturer asserts the patent or patent family as prior art that invalidates another patent or claim. + + + The manufacturer asserts exclusive rights granted through a licensing agreement. + + + The manufacturer asserts they will not enforce the patent or patent family against certain uses or users. + + + The patent or patent family is being used under a research or evaluation license. + + + + + + + + + + + + + + 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). + + + + + + + + + + + The date the priority application was filed. Aligned with `FilingDate` in WIPO ST.96. + + + + + + + + + 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. + + + + + + + + + diff --git a/tools/src/test/resources/1.7/valid-patent-1.7.xml b/tools/src/test/resources/1.7/valid-patent-1.7.xml new file mode 100644 index 00000000..9a7acbde --- /dev/null +++ b/tools/src/test/resources/1.7/valid-patent-1.7.xml @@ -0,0 +1,156 @@ + + + + + + Acme Inc + https://example.com + + High-Efficiency Processor + 1.0 + + + ownership + + patent-1 + + + org-acme-inc + + Covers the core processing architecture for advanced computation. + + + license + + patent-3 + + + org-acme-inc + + Licensed for use in North America. + + + + + + + + Data Analysis Service + + + exclusive-rights + + patent-2 + + + + Partner Company + + Sam Smith + 800-555-1212 + + + + Exclusive rights for machine learning integration. + + + + + + + + + US1234567890 + 12345 + US + US-12345 + Efficient Data Processing Algorithm + A novel system and method for improving data processing efficiency. + 2021-01-15 + 2022-06-01 + 2042-01-15 + in-force + + + Tech Innovators Inc. + https://techinnovators.com + + + + + https://uspto.gov/patent/US12345678B1 + Official USPTO page for the patent. + + + + + + EU1234567890 + 12345 + EU + + US1234567890 + US + 2021-01-15 + + EU-12345 + Efficient Data Processing Algorithm + A novel system and method for improving data processing efficiency. + 2021-01-15 + 2022-06-01 + 2042-01-15 + in-force + + + Tech Innovators Inc. + https://techinnovators.com + + + + + + EP987654321A1 + EP + Data Processing Optimisation + An optimised approach to data processing for scalable systems. + 2021-02-10 + 2023-03-15 + 2043-02-10 + in-force + + + Jane Smith + jane.smith@techinnovators.com + + + + + https://euipo.europa.eu/ep987654321A1 + Official EUIPO page for the patent. + + + + + + PF-2023001 + + 12345 + US + 2021-01-15 + + + patent-1 + patent-2 + + + + https://uspto.gov/patent-family-5678 + Official record of the patent family. + + + + + + From 8c5d03a2d8d0d7d83622016e6b407557988a5079 Mon Sep 17 00:00:00 2001 From: Steve Springett Date: Thu, 1 May 2025 22:55:56 -0500 Subject: [PATCH 4/8] Fixed linting errors Signed-off-by: Steve Springett --- schema/bom-1.7.schema.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/schema/bom-1.7.schema.json b/schema/bom-1.7.schema.json index 7be13099..e28a4559 100644 --- a/schema/bom-1.7.schema.json +++ b/schema/bom-1.7.schema.json @@ -5743,7 +5743,6 @@ "type": "array", "title": "Family Members", "description": "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.", - "additionalItems": false, "items": { "$ref": "#/definitions/refLinkType", "title": "BOM Reference", @@ -5886,7 +5885,6 @@ "type": "array", "title": "Patent Assertions", "description": "A list of assertions made regarding patents associated with this component or service. Assertions distinguish between ownership, licensing, and other relevant interactions with patents.", - "additionalItems": false, "items": { "type": "object", "title": "Patent Assertion", From 9776c2a092b4cdaa5071d1ff03183b1dac54dbd0 Mon Sep 17 00:00:00 2001 From: Steve Springett Date: Fri, 2 May 2025 11:37:11 -0500 Subject: [PATCH 5/8] Made patents optional Signed-off-by: Steve Springett --- schema/bom-1.7.xsd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/schema/bom-1.7.xsd b/schema/bom-1.7.xsd index ca8ee0ec..d14cb22f 100644 --- a/schema/bom-1.7.xsd +++ b/schema/bom-1.7.xsd @@ -8117,7 +8117,7 @@ limitations under the License. - + From 7f2978e7e566e703f95c86d1a37f7f28c6522ea4 Mon Sep 17 00:00:00 2001 From: Steve Springett Date: Fri, 2 May 2025 17:45:35 -0500 Subject: [PATCH 6/8] Ported to protobuf and added test case Signed-off-by: Steve Springett --- schema/bom-1.7.proto | 128 ++++++++++++ .../resources/1.7/valid-patent-1.7.textproto | 190 ++++++++++++++++++ 2 files changed, 318 insertions(+) create mode 100644 tools/src/test/resources/1.7/valid-patent-1.7.textproto diff --git a/schema/bom-1.7.proto b/schema/bom-1.7.proto index 999dccba..13a72934 100644 --- a/schema/bom-1.7.proto +++ b/schema/bom-1.7.proto @@ -166,6 +166,8 @@ message Component { // 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. // This may be set to `true` for runtime components only. For `Bom.metadata.component`, it must be set to `false`. optional bool isExternal = 34; // implicit defaults to `false` + // A list of assertions made regarding patents associated with this component or service. Assertions distinguish between ownership, licensing, and other relevant interactions with patents. + repeated PatentAssertion patent_assertions = 35; } // Specifies the data flow. @@ -320,6 +322,12 @@ enum ExternalReferenceType { EXTERNAL_REFERENCE_TYPE_RFC_9116 = 41; // Reference to release notes EXTERNAL_REFERENCE_TYPE_RELEASE_NOTES = 42; + // 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). + EXTERNAL_REFERENCE_TYPE_PATENT = 43; + // 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). + EXTERNAL_REFERENCE_TYPE_PATENT_FAMILY = 44; + // References assertions made regarding patents associated with a component or service. Assertions distinguish between ownership, licensing, and other relevant interactions with patents. + EXTERNAL_REFERENCE_TYPE_PATENT_ASSERTION = 45; } enum HashAlg { @@ -669,6 +677,8 @@ message Service { optional string trustZone = 16; // 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". repeated string tags = 17; + // A list of assertions made regarding patents associated with this component or service. Assertions distinguish between ownership, licensing, and other relevant interactions with patents. + repeated PatentAssertion patent_assertions = 18; } // Specifies metadata and content for ISO-IEC 19770-2 Software Identification (SWID) Tags. @@ -2038,6 +2048,8 @@ message Definition { // 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. repeated Standard standards = 1; + // The list of either individual patents or patent families. + repeated PatentOrFamily patents = 2; } // "Cryptographic Properties @@ -2393,3 +2405,119 @@ message CryptoProperties { // The object identifier (OID) of the cryptographic asset. optional string oid = 6; } + +message PatentOrFamily { + oneof item { + Patent patent = 1; + PatentFamily patent_family = 2; + } +} + +// 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. +message PriorityApplication { + //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). + string application_number = 1; + // 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). + string jurisdiction = 2; + // 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). + google.protobuf.Timestamp filing_date = 3; +} + +// 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. +message Patent { + // 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. + optional string bom_ref = 1; + // 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). + string patent_number = 2; + // 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). + optional string application_number = 3; + // 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). + string jurisdiction = 4; + // 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. + optional PriorityApplication priority_application = 5; + // 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. + optional string publication_number = 6; + // 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). + optional string title = 7; + // 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). + optional string abstract = 8; + // 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). + optional google.protobuf.Timestamp filing_date = 9; + // 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). + optional google.protobuf.Timestamp grant_date = 10; + // The date the patent expires. Derived from grant or filing date according to jurisdiction-specific rules. + optional google.protobuf.Timestamp patent_expiration_date = 11; + // 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. + PatentLegalStatus patent_legal_status = 12; + // 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. + repeated OrganizationalEntityOrContact patent_assignee = 13; + // 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. + repeated ExternalReference external_references = 14; +} + +// 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. +enum PatentLegalStatus { + PATENT_LEGAL_STATUS_UNSPECIFIED = 0; + PATENT_LEGAL_STATUS_PENDING = 1; + PATENT_LEGAL_STATUS_GRANTED = 2; + PATENT_LEGAL_STATUS_REVOKED = 3; + PATENT_LEGAL_STATUS_EXPIRED = 4; + PATENT_LEGAL_STATUS_LAPSED = 5; + PATENT_LEGAL_STATUS_WITHDRAWN = 6; + PATENT_LEGAL_STATUS_ABANDONED = 7; + PATENT_LEGAL_STATUS_SUSPENDED = 8; + PATENT_LEGAL_STATUS_REINSTATED = 9; + PATENT_LEGAL_STATUS_OPPOSED = 10; + PATENT_LEGAL_STATUS_TERMINATED = 11; + PATENT_LEGAL_STATUS_INVALIDATED = 12; + PATENT_LEGAL_STATUS_IN_FORCE = 13; +} + +// 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. +message PatentFamily { + // 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. + optional string bom_ref = 1; + // 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). + string family_id = 2; + // 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. + optional PriorityApplication priority_application = 3; + // 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. + repeated string members = 4; // bom-ref strings + // 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. + repeated ExternalReference external_references = 5; +} + +// An assertion linking a patent or patent family to this component or service. +message PatentAssertion { + // 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. + optional string bom_ref = 1; + // The type of assertion being made about the patent or patent family. Examples include ownership, licensing, and standards inclusion. + PatentAssertionType assertion_type = 2; + // A list of BOM references (`bom-ref`) linking to patents or patent families associated with this assertion. + repeated string patent_refs = 3; + // 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. + Asserter asserter = 4; + // Additional notes or clarifications regarding the assertion, if necessary. For example, geographical restrictions, duration, or limitations of a license. + string notes = 5; +} + +message Asserter { + oneof value { + OrganizationalEntity organization = 1; + OrganizationalContact individual = 2; + string ref = 3; + } +} + +// The type of assertion being made about the patent or patent family. Examples include ownership, licensing, and standards inclusion. +enum PatentAssertionType { + PATENT_ASSERTION_TYPE_UNSPECIFIED = 0; + PATENT_ASSERTION_TYPE_OWNERSHIP = 1; + PATENT_ASSERTION_TYPE_LICENSE = 2; + PATENT_ASSERTION_TYPE_THIRD_PARTY_CLAIM = 3; + PATENT_ASSERTION_TYPE_STANDARDS_INCLUSION = 4; + PATENT_ASSERTION_TYPE_PRIOR_ART = 5; + PATENT_ASSERTION_TYPE_EXCLUSIVE_RIGHTS = 6; + PATENT_ASSERTION_TYPE_NON_ASSERTION = 7; + PATENT_ASSERTION_TYPE_RESEARCH_OR_EVALUATION = 8; +} diff --git a/tools/src/test/resources/1.7/valid-patent-1.7.textproto b/tools/src/test/resources/1.7/valid-patent-1.7.textproto new file mode 100644 index 00000000..828b128a --- /dev/null +++ b/tools/src/test/resources/1.7/valid-patent-1.7.textproto @@ -0,0 +1,190 @@ +# proto-file: schema/bom-1.7.proto +# proto-message: Bom + +components [ + { + bom_ref: "component-1" + type: CLASSIFICATION_LIBRARY + manufacturer { + bom_ref: "org-acme-inc" + name: "Acme Inc" + url: "https://example.com" + } + name: "High-Efficiency Processor" + version: "1.0" + patent_assertions [ + { + bom_ref: "patent-assertion-1" + assertion_type: PATENT_ASSERTION_TYPE_OWNERSHIP + asserter { + ref: "org-acme-inc" + } + patent_refs: "patent-1" + notes: "Covers the core processing architecture for advanced computation." + }, + { + bom_ref: "patent-assertion-2" + assertion_type: PATENT_ASSERTION_TYPE_LICENSE + asserter { + ref: "org-acme-inc" + } + patent_refs: "patent-3" + notes: "Licensed for use in North America." + } + ] + } +] + +services [ + { + bom_ref: "service-1" + name: "Data Analysis Service" + patent_assertions { + bom_ref: "patent-assertion-3" + assertion_type: PATENT_ASSERTION_TYPE_EXCLUSIVE_RIGHTS + asserter { + organization { + name: "Partner Company" + contact: { + name: "Sam Smith" + } + } + } + patent_refs: "patent-2" + notes: "Exclusive rights for machine learning integration." + } + } +] + +definitions { + patents { + patent { + bom_ref: "patent-1" + patent_number: "US1234567890" + application_number: "12345" + jurisdiction: "US" + publication_number: "US-12345" + title: "Efficient Data Processing Algorithm" + abstract: "A novel system and method for improving data processing efficiency." + filing_date { + seconds: 1610668800 + nanos: 0 + } + grant_date { + seconds: 1654041600 + nanos: 0 + } + patent_expiration_date { + seconds: 2284233600 + nanos: 0 + } + patent_legal_status: PATENT_LEGAL_STATUS_IN_FORCE + patent_assignee { + organization { + name: "Tech Innovators Inc." + url: "https://techinnovators.com" + } + } + external_references { + type: EXTERNAL_REFERENCE_TYPE_PATENT + url: "https://uspto.gov/patent/US12345678B1" + comment: "Official USPTO page for the patent." + } + } + } + + patents { + patent { + bom_ref: "patent-2" + patent_number: "EU1234567890" + application_number: "12345" + jurisdiction: "EU" + priority_application { + application_number: "US1234567890" + jurisdiction: "US" + filing_date: { + seconds: 1610668800 + nanos: 0 + } + } + publication_number: "EU-12345" + title: "Efficient Data Processing Algorithm" + abstract: "A novel system and method for improving data processing efficiency." + filing_date { + seconds: 1610668800 + nanos: 0 + } + grant_date { + seconds: 1654041600 + nanos: 0 + } + patent_expiration_date { + seconds: 2284233600 + nanos: 0 + } + patent_legal_status: PATENT_LEGAL_STATUS_IN_FORCE + patent_assignee { + organization { + name: "Tech Innovators Inc." + url: "https://techinnovators.com" + } + } + } + } + + patents { + patent { + bom_ref: "patent-3" + patent_number: "EP987654321A1" + jurisdiction: "EP" + title: "Data Processing Optimisation" + abstract: "An optimised approach to data processing for scalable systems." + filing_date { + seconds: 1612915200 + nanos: 0 + } + grant_date { + seconds: 1678838400 + nanos: 0 + } + patent_expiration_date { + seconds: 2307504000 + nanos: 0 + } + patent_legal_status: PATENT_LEGAL_STATUS_IN_FORCE + patent_assignee { + individual { + name: "Jane Smith" + email: "jane.smith@techinnovators.com" + } + } + external_references { + type: EXTERNAL_REFERENCE_TYPE_PATENT + url: "https://euipo.europa.eu/ep987654321A1" + comment: "Official EUIPO page for the patent." + } + } + } + + patents { + patent_family { + bom_ref: "patent-family-1" + family_id: "PF-2023001" + priority_application { + application_number: "12345" + jurisdiction: "US" + filing_date { + seconds: 1610668800 + nanos: 0 + } + } + members: "patent-1" + members: "patent-2" + external_references { + type: EXTERNAL_REFERENCE_TYPE_PATENT_FAMILY + url: "https://uspto.gov/patent-family-5678" + comment: "Official record of the patent family." + } + } + } +} From 0bd4de7a1bc194be591b8a02d0beabeb9b441b02 Mon Sep 17 00:00:00 2001 From: Steve Springett Date: Fri, 2 May 2025 17:52:17 -0500 Subject: [PATCH 7/8] Updated comments Signed-off-by: Steve Springett --- schema/bom-1.7.proto | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/schema/bom-1.7.proto b/schema/bom-1.7.proto index 13a72934..67d4ee06 100644 --- a/schema/bom-1.7.proto +++ b/schema/bom-1.7.proto @@ -2406,9 +2406,12 @@ message CryptoProperties { optional string oid = 6; } +// Either an individual patents or patent families. message PatentOrFamily { oneof item { + // An individual patent Patent patent = 1; + // A patent family PatentFamily patent_family = 2; } } @@ -2503,8 +2506,11 @@ message PatentAssertion { message Asserter { oneof value { + // An organization OrganizationalEntity organization = 1; + // An individual OrganizationalContact individual = 2; + // 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. string ref = 3; } } From 16f763245a2c9ef1d139d737ca8eb85a4311470c Mon Sep 17 00:00:00 2001 From: Jan Kowalleck Date: Thu, 15 May 2025 17:05:13 +0200 Subject: [PATCH 8/8] docs: add ProtoBuf enum docs - taken from JSON Signed-off-by: Jan Kowalleck --- schema/bom-1.7.proto | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/schema/bom-1.7.proto b/schema/bom-1.7.proto index 67d4ee06..e381835a 100644 --- a/schema/bom-1.7.proto +++ b/schema/bom-1.7.proto @@ -2460,19 +2460,33 @@ message Patent { // 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. enum PatentLegalStatus { + // Default PATENT_LEGAL_STATUS_UNSPECIFIED = 0; + // The patent application has been filed but not yet examined or granted. PATENT_LEGAL_STATUS_PENDING = 1; + // The patent application has been examined and a patent has been issued. PATENT_LEGAL_STATUS_GRANTED = 2; + // The patent has been declared invalid through a legal or administrative process. PATENT_LEGAL_STATUS_REVOKED = 3; + // The patent has reached the end of its enforceable term. PATENT_LEGAL_STATUS_EXPIRED = 4; + // The patent is no longer in force due to non-payment of maintenance fees or other requirements. PATENT_LEGAL_STATUS_LAPSED = 5; + // The patent application was voluntarily withdrawn by the applicant. PATENT_LEGAL_STATUS_WITHDRAWN = 6; + // The patent application was abandoned, often due to lack of action or response. PATENT_LEGAL_STATUS_ABANDONED = 7; + // Processing of the patent application has been temporarily halted. PATENT_LEGAL_STATUS_SUSPENDED = 8; + // A previously abandoned or lapsed patent has been reinstated. PATENT_LEGAL_STATUS_REINSTATED = 9; + // The patent application or granted patent is under formal opposition proceedings. PATENT_LEGAL_STATUS_OPPOSED = 10; + // The patent or application has been officially terminated. PATENT_LEGAL_STATUS_TERMINATED = 11; + // The patent has been invalidated, either in part or in full. PATENT_LEGAL_STATUS_INVALIDATED = 12; + // The granted patent is active and enforceable. PATENT_LEGAL_STATUS_IN_FORCE = 13; } @@ -2517,13 +2531,22 @@ message Asserter { // The type of assertion being made about the patent or patent family. Examples include ownership, licensing, and standards inclusion. enum PatentAssertionType { + // Default PATENT_ASSERTION_TYPE_UNSPECIFIED = 0; + // The manufacturer asserts ownership of the patent or patent family. PATENT_ASSERTION_TYPE_OWNERSHIP = 1; + // The manufacturer asserts they have a license to use the patent or patent family. PATENT_ASSERTION_TYPE_LICENSE = 2; + // A third party has asserted a claim or potential infringement against the manufacturer’s component or service. PATENT_ASSERTION_TYPE_THIRD_PARTY_CLAIM = 3; + // The patent is part of a standard essential patent (SEP) portfolio relevant to the component or service. PATENT_ASSERTION_TYPE_STANDARDS_INCLUSION = 4; + // The manufacturer asserts the patent or patent family as prior art that invalidates another patent or claim. PATENT_ASSERTION_TYPE_PRIOR_ART = 5; + // The manufacturer asserts exclusive rights granted through a licensing agreement. PATENT_ASSERTION_TYPE_EXCLUSIVE_RIGHTS = 6; + // he manufacturer asserts they will not enforce the patent or patent family against certain uses or users. PATENT_ASSERTION_TYPE_NON_ASSERTION = 7; + // The patent or patent family is being used under a research or evaluation license. PATENT_ASSERTION_TYPE_RESEARCH_OR_EVALUATION = 8; }