Skip to content

Version 2

Response OS Version 2

Version 2 of the Response OS application makes a major refactoring of the application architecture to transition data processing to a Resource Description Framework (RDF) based data model coupled with a complete re-design and re-implementation of data extraction and standardisation processes.

The application follows domain driven design principles with each component representing a specific domain.

Response OS ArchitectureResponse OS ArchitectureWeb Application«web-application»Batch Processing«batch-processing»Shared Packages«packages»«hhg-rfp-api»RFP API«response-os-portal»Blazor Web Application«hhg-extraction-api»Extraction API«hhg-quotes-api»Quotes API«response-os-db»RFP Postgres Database«milvus-db»Milvus Vector Database«ros-preprocessor»Preprocessor azure function«ingestion-serverless»Ingestion serverless container«ros-orchestrator»Orchestrator azure function«azure_blob_storage»Azure Blob Storage«ros-extractor»Extractor Package«hhg-print-domain»Print Domain Package«northell-pylon»Pylon Package«hhg-hubloader»Print Order Line ModelhttpsStore batch dataSave JsonLDSave JsonLD
Response OS ArchitectureResponse OS ArchitectureWeb Application«web-application»Batch Processing«batch-processing»Shared Packages«packages»«hhg-rfp-api»RFP API«response-os-portal»Blazor Web Application«hhg-extraction-api»Extraction API«hhg-quotes-api»Quotes API«response-os-db»RFP Postgres Database«milvus-db»Milvus Vector Database«ros-preprocessor»Preprocessor azure function«ingestion-serverless»Ingestion serverless container«ros-orchestrator»Orchestrator azure function«azure_blob_storage»Azure Blob Storage«ros-extractor»Extractor Package«hhg-print-domain»Print Domain Package«northell-pylon»Pylon Package«hhg-hubloader»Print Order Line ModelhttpsStore batch dataSave JsonLDSave JsonLD

RFP API

The RFP API is the main API for the Response OS application. It provides endpoints for creating and managing RFP data, extracting and standardising data, and searching for quotes based on historic order data and acts as a client to the other components.

RFP Postgres Database

The RFP Postgres Database is used to store and manage RFP data. It is the primary data store for the RFP API and provides a relational database interface for querying and managing RFP records.

Extraction API

The Extraction API is responsible for taking an input array of key value pairs plus a mapping object of input keys to raw print order mappings and returning an RDF record in JSON-LD format with values extracted from the input data to the target ontology. It uses the hhg-print-domain package for ontology and the ros-extractor package to perform data extraction.

Quotes API

The Quotes API provides endpoints for searching and generating quotes based on historic order data. It uses the Milvus vector database for similarity search and provides a way to retrieve quotes based on specific criteria.

Milvus Vector Database

The Milvus Vector Database is used for similarity search of historic order data. It provides a way to perform vector-based searches and retrieve similar records based on their vector representations.

RDF based Extraction Pipeline

Version 2 implements a new RDF based extraction pipeline with multiple SKOS ontologies built to model the data from at each stage of the extraction process. The extraction pipeline introduces the concept of domains (e.g. material, manufacturing etc) each with their own SKOS ontologies to which data is extracted in the extraction phase.

520. plantuml.com | 520: Web server is returning an unknown error

Web server is returning an unknown error Error code 520

Visit cloudflare.com for more information.
2025-08-13 11:03:58 UTC
You

Browser

Working
London

Cloudflare

Working
www.plantuml.com

Host

Error

What happened?

There is an unknown connection issue between Cloudflare and the origin web server. As a result, the web page can not be displayed.

What can I do?

If you are a visitor of this website:

Please try again in a few minutes.

If you are the owner of this website:

There is an issue between Cloudflare's cache and your origin web server. Cloudflare monitors for these errors and automatically investigates the cause. To help support the investigation, you can pull the corresponding error log from your web server and submit it our support team. Please include the Ray ID (which is at the bottom of this error page). Additional troubleshooting resources.

Version 2 Extraction Pipeline - Activity DiagramVersion 2 Extraction Pipeline - Activity DiagramLoad semi structured order specifications in json formatConvert json records to RDF triples using hub domain mapping ontologyConvert hub domain RDF record to print domain RDF record using print domain ontologyAssign domains to each record using classification model and ontology inspector based logicValidate shape of RDF records using SHACL and remove any invalid recordsPerform extraction to extract values from one or more triples to a target triple in the final RDF recordValidate shape of final RDF records using SHACL and remove any invalid records

RDF to Object Mapping

Object representation of RDF records is required for data rendering and storage / search using Milvus. RDF to object mapping is handled by the Northell Pylon package which provides ORM like functionality for Milvus and other stores.

We have retained an object representation of the RDF record as the primary object model used in the Blazor application:

Example of a Print Record in JSON-LD format

{
  "@graph": [
    {
      "@id": "hub:af295eac410546bba9673cc41d0dad43",
      "@type": [
        "domain:ManufacturingRecord",
        "print:PrintRecord",
        "domain:SupplierRecord",
        "domain:ProductRecord",
        "domain:MaterialRecord"
      ],
      "print:hasPrice": {
        "@type": "http://www.w3.org/2001/XMLSchema#decimal",
        "@value": "4065.83"
      },
      "domain:hasDomain": [
        {
          "@id": "domain:MaterialDomain"
        },
        {
          "@id": "domain:ProductDomain"
        },
        {
          "@id": "domain:SupplierDomain"
        },
        {
          "@id": "domain:ManufacturingDomain"
        }
      ],
      "print:hasQuantity": 5196,
      "print:hasProofType": "No proof required",
      "print:hasCustomerID": 32065,
      "print:hasCurrencyCode": "USD",
      "print:hasCustomerName": "Republic Services, Inc(Republic Services)",
      "print:hasElementTitle": "RS Brand eStore 11.30 Multiple POs",
      "print:hasMaterialType": "Paper and board",
      "print:hasPrintedSides": "Not printed",
      "print:hasSupplierName": "Navitor- Republic Services (Navitor – eStores only)",
      "extraction:hasActivity": [
        {
          "@id": "extraction:0444b02d-6106-4d0f-b908-d4c3a297daba",
          "@type": "http://www.w3.org/ns/prov#Activity",
          "versions:hasHFModelVersion": "527c36bac305cc370ab4b09d3d8a310f5f77721a",
          "versions:hasExtractorVersion": "1.0.109",
          "versions:hasPrintDomainVersion": "1.0.147",
          "http://www.w3.org/ns/prov#endedAtTime": {
            "@type": "http://www.w3.org/2001/XMLSchema#dateTime",
            "@value": "2025-06-04T07:43:33.653503"
          },
          "http://www.w3.org/ns/prov#startedAtTime": {
            "@type": "http://www.w3.org/2001/XMLSchema#dateTime",
            "@value": "2025-06-04T07:42:57.257531"
          },
          "http://www.w3.org/ns/prov#wasAssociatedWith": {
            "@id": "extraction:ReadinessValidator",
            "@type": "http://www.w3.org/ns/prov#SoftwareAgent"
          },
          "http://www.w3.org/2000/01/rdf-schema#comment": "Transformation performed: process"
        },
        {
          "@id": "extraction:f7f2f479-c254-45a8-9315-e30bb9864205",
          "@type": "http://www.w3.org/ns/prov#Activity",
          "versions:hasHFModelVersion": "527c36bac305cc370ab4b09d3d8a310f5f77721a",
          "versions:hasExtractorVersion": "1.0.109",
          "versions:hasPrintDomainVersion": "1.0.147",
          "http://www.w3.org/ns/prov#endedAtTime": {
            "@type": "http://www.w3.org/2001/XMLSchema#dateTime",
            "@value": "2025-06-04T07:44:25.470543"
          },
          "http://www.w3.org/ns/prov#startedAtTime": {
            "@type": "http://www.w3.org/2001/XMLSchema#dateTime",
            "@value": "2025-06-04T07:43:37.266133"
          },
          "http://www.w3.org/ns/prov#wasAssociatedWith": {
            "@id": "extraction:ReadinessValidator",
            "@type": "http://www.w3.org/ns/prov#SoftwareAgent"
          },
          "http://www.w3.org/2000/01/rdf-schema#comment": "Transformation performed: process"
        },
        {
          "@id": "extraction:c06c1632-974d-4dae-accb-6047ed229916",
          "@type": "http://www.w3.org/ns/prov#Activity",
          "versions:hasHFModelVersion": "527c36bac305cc370ab4b09d3d8a310f5f77721a",
          "versions:hasExtractorVersion": "1.0.109",
          "versions:hasPrintDomainVersion": "1.0.147",
          "http://www.w3.org/ns/prov#endedAtTime": {
            "@type": "http://www.w3.org/2001/XMLSchema#dateTime",
            "@value": "2025-06-04T07:42:56.956401"
          },
          "http://www.w3.org/ns/prov#startedAtTime": {
            "@type": "http://www.w3.org/2001/XMLSchema#dateTime",
            "@value": "2025-06-04T07:42:56.651511"
          },
          "http://www.w3.org/ns/prov#wasAssociatedWith": {
            "@id": "extraction:DomainRouter",
            "@type": "http://www.w3.org/ns/prov#SoftwareAgent"
          },
          "http://www.w3.org/2000/01/rdf-schema#comment": "Transformation performed: add_domain_tags_to_graph"
        },
        {
          "@id": "extraction:b71c741e-0784-45a5-8605-e0ed5edf17f5",
          "@type": "http://www.w3.org/ns/prov#Activity",
          "versions:hasHFModelVersion": "527c36bac305cc370ab4b09d3d8a310f5f77721a",
          "versions:hasExtractorVersion": "1.0.109",
          "versions:hasPrintDomainVersion": "1.0.147",
          "http://www.w3.org/ns/prov#endedAtTime": {
            "@type": "http://www.w3.org/2001/XMLSchema#dateTime",
            "@value": "2025-06-04T07:42:45.707104"
          },
          "http://www.w3.org/ns/prov#startedAtTime": {
            "@type": "http://www.w3.org/2001/XMLSchema#dateTime",
            "@value": "2025-06-04T07:42:43.941086"
          },
          "http://www.w3.org/ns/prov#wasAssociatedWith": {
            "@id": "extraction:SchemaMapper",
            "@type": "http://www.w3.org/ns/prov#SoftwareAgent"
          },
          "http://www.w3.org/2000/01/rdf-schema#comment": "Transformation performed: map_data"
        },
        {
          "@id": "extraction:44ff69d0-40e2-4044-9ae8-36bde85a2277",
          "@type": "http://www.w3.org/ns/prov#Activity",
          "versions:hasHFModelVersion": "527c36bac305cc370ab4b09d3d8a310f5f77721a",
          "versions:hasExtractorVersion": "1.0.109",
          "versions:hasPrintDomainVersion": "1.0.147",
          "http://www.w3.org/ns/prov#endedAtTime": {
            "@type": "http://www.w3.org/2001/XMLSchema#dateTime",
            "@value": "2025-06-04T07:44:40.076636"
          },
          "http://www.w3.org/ns/prov#startedAtTime": {
            "@type": "http://www.w3.org/2001/XMLSchema#dateTime",
            "@value": "2025-06-04T07:44:39.863001"
          },
          "http://www.w3.org/ns/prov#wasAssociatedWith": {
            "@id": "extraction:ReadinessValidator",
            "@type": "http://www.w3.org/ns/prov#SoftwareAgent"
          },
          "http://www.w3.org/2000/01/rdf-schema#comment": "Transformation performed: process"
        }
      ],
      "product:hasProductType": {
        "@id": "https://www.northell.com/taxonomies/ProductTypes/LoosePrint"
      },
      "manufacturing:hasCutting": {
        "@id": "https://www.northell.com/taxonomies/ManufacturingTaxonomy/CuttingToSize"
      },
      "print:hasProductCategory": "Loose Print",
      "inter-domain:hasElementId": 3095883,
      "print:hasFinishedQuantity": 5196,
      "print:hasMaterialCategory": "Paper",
      "inter-domain:hasInternalId": "d446468b-c81a-466b-9c33-a3cae14578d6",
      "material:hasMaterialWeight": {
        "@type": "http://www.w3.org/2001/XMLSchema#decimal",
        "@value": "1.0"
      },
      "inter-domain:hasCreatedDate": {
        "@type": "http://www.w3.org/2001/XMLSchema#date",
        "@value": "2024-01-31"
      },
      "measurement:hasUnitOfMeasure": {
        "@id": "http://qudt.org/vocab/unit/IN"
      },
      "print:hasCustomerHomeCountry": "United States",
      "print:hasMaterialDescription": "Business Cards",
      "inter-domain:hasPermutationID": "af295eac-4105-46bb-a967-3cc41d0dad43",
      "material:hasCoverMaterialType": {
        "@id": "https://www.northell.com/taxonomies/MaterialTypes/Paper"
      },
      "material:hasRecycledPercentage": "0%",
      "print:hasFscPaperBeenSpecified": "No",
      "print:hasMaterialUnitOfMeasure": "Inches (in)",
      "manufacturing:hasProofRequirement": {
        "@id": "https://www.northell.com/taxonomies/ManufacturingTaxonomy/NoProofRequired"
      },
      "material:hasSubstrateMaterialType": {
        "@id": "https://www.northell.com/taxonomies/AdditionalMaterialTypes/Paper"
      },
      "material:hasCoverMaterialThickness": "1",
      "print:hasMaterialThicknessOrWeight": 1,
      "print:hasMaterialRecycledPercentage": "0%",
      "print:hasRecycledContentBeenOffered": "N/A",
      "material:hasSubstrateMaterialThickness": {
        "@type": "http://www.w3.org/2001/XMLSchema#decimal",
        "@value": "1.0"
      },
      "material:hasMaterialThicknessOrWeightUnit": {
        "@id": "http://qudt.org/vocab/unit/IN"
      }
    }
  ],
  "@context": {
    "dlq": "https://northell.com/extraction/dead-letter-queue/",
    "hub": "https://northell.com/ontologies/mapping-rules/hub/",
    "print": "https://northell.com/ontologies/mapping-rules/print/",
    "domain": "https://northell.com/ontologies/mapping-rules/domain/",
    "feature": "https://northell.com/ontologies/mapping-rules/feature/",
    "mapping": "https://northell.com/ontologies/mapping-rules/mapping-ontology/",
    "product": "https://northell.com/ontologies/mapping-rules/product/",
    "assembly": "https://northell.com/ontologies/mapping-rules/assembly/",
    "material": "https://northell.com/ontologies/mapping-rules/material/",
    "shipping": "https://northell.com/ontologies/mapping-rules/shipping/",
    "supplier": "https://northell.com/ontologies/mapping-rules/supplier/",
    "versions": "https://northell.com/version/",
    "extraction": "https://northell.com/extraction/",
    "measurement": "https://northell.com/ontologies/mapping-rules/measurement/",
    "inter-domain": "https://northell.com/ontologies/mapping-rules/inter-domain/",
    "manufacturing": "https://northell.com/ontologies/mapping-rules/manufacturing/"
  }
}

Example of a Print Record in Object format

{
  "id": "40741d24-8544-423b-bba5-7848917828f9",
  "coating": "unset",
  "cutting": "https://www.northell.com/taxonomies/ManufacturingTaxonomy/CuttingToSize",
  "category": "unset",
  "order_id": "5fc90155-3c4e-4da8-9d75-a0f73bf6d6a0",
  "quantity": 5196,
  "supplier": "Navitor- Republic Services (Navitor – eStores only)",
  "fold_type": "unset",
  "ink_color": "unset",
  "lamination": "unset",
  "order_date": "2024-01-31T00:00:00",
  "page_count": 1,
  "edge_finish": "unset",
  "perforation": "unset",
  "subcategory": "unset",
  "price_in_usd": 4065.83,
  "product_type": "https://www.northell.com/taxonomies/ProductTypes/LoosePrint",
  "spot_coating": "unset",
  "customer_name": "Republic Services, Inc(Republic Services)",
  "printed_sides": "unset",
  "total_colours": -1,
  "permutation_id": "af295eac-4105-46bb-a967-3cc41d0dad43",
  "proof_quantity": 0,
  "flat_size_width": 0.0,
  "collation_method": false,
  "flat_size_height": 0.0,
  "printing_details": "unset",
  "finish_size_width": 0.0,
  "finishing_details": "unset",
  "home_country_iso3": "United States",
  "primary_substrate": {
    "id": "9eb047d4-c4d0-4ebf-8a61-fb3704a057ba",
    "brand": "unset",
    "finish": "Business Cards",
    "fsc_certified": false,
    "material_unit": "Inches (in)",
    "substrate_type": "https://www.northell.com/taxonomies/AdditionalMaterialTypes/Paper",
    "recycled_percentage": "0%",
    "weight_or_thickness": 1.0
  },
  "proof_requirement": "https://www.northell.com/taxonomies/ManufacturingTaxonomy/NoProofRequired",
  "finish_size_height": 0.0,
  "number_of_versions": 1,
  "quantity_per_version": 1
}