Manage document schemas

This document describes how to manage the document schemas in Document AI Warehouse, including create, fetch, list, update, and delete operations.

What are document schemas

Each document is of a certain document type and is specified by a schema.

A document schema defines the structure for a document type (for example, Invoice or Paystub) in Document AI Warehouse, where admins can specify Properties of different data types (Text | Numeric | Date | Enumeration).

Properties are used to represent the extracted data, classification tags or other business tags appended to documents by AI or human users - for example, Invoice_Amount (numeric), Due_Date (date), or Supplier_Name (text).

  1. Property Attributes: Each property can be declared as

    1. Filterable - can be used to filter search results

    2. Searchable - indexed so it can be found in search queries

    3. Required - required is used to ensure the property exists in the document (We recommend saving most properties as required = false, unless the property is required.)

  2. Extensible Schema: in some cases, end users with Edit access need to add / delete new schema properties to documents. This is supported by a "MAP property", which is a list of key-value pairs.

    1. Each key-value pair in a MAP property can be a data-type of (Text | Numeric | Date | Enumeration).

    2. For example, Invoice may contain a Map Property "Invoice_Entities" with the following key value pairs:

      • Invoice_Amount (numeric) 1000

      • Due_Date (date) 12/24/2021

      • Supplier_Name (text) ABC Corp

    3. Immutability of Schema: Note that Schema or Schema Properties can be added but currently cannot be edited or deleted, so define schema carefully.

Before you begin

Before you begin, make sure you have completed the Quickstart page.

Create a schema

Create a document schema.

REST

  curl --location --request POST --url https://contentwarehouse.googleapis.com/v1/projects/PROJECT_NUMBER/locations/LOCATION/documentSchemas \
  --header "Content-Type: application/json" \
  --header "Authorization: Bearer $(gcloud auth print-access-token)" \
  --data '{
    "display_name": "Test Doc Schema",
    "property_definitions": [
      {
        "name": "plaintiff",
        "display_name": "Plaintiff",
        "is_searchable": true,
        "is_repeatable": true,
        "text_type_options": {}
      }
    ]
  }'

Python

For more information, see the Document AI Warehouse Python API reference documentation.

To authenticate to Document AI Warehouse, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.


from google.cloud import contentwarehouse

# TODO(developer): Uncomment these variables before running the sample.
# project_number = 'YOUR_PROJECT_NUMBER'
# location = 'YOUR_PROJECT_LOCATION' # Format is 'us' or 'eu'


def sample_create_document_schema(project_number: str, location: str) -> None:
    """Creates document schema.

    Args:
        project_number: Google Cloud project number.
        location: Google Cloud project location.
    Returns:
        Response object.
    """
    # Create a Schema Service client.
    document_schema_client = contentwarehouse.DocumentSchemaServiceClient()

    property_definition = contentwarehouse.PropertyDefinition(
        name="stock_symbol",  # Must be unique within a document schema (case insensitive)
        display_name="Searchable text",
        is_searchable=True,
        text_type_options=contentwarehouse.TextTypeOptions(),
    )
    # Initialize request argument(s)
    document_schema = contentwarehouse.DocumentSchema(
        display_name="My Test Schema",
        property_definitions=[property_definition],
    )

    request = contentwarehouse.CreateDocumentSchemaRequest(
        # The full resource name of the location, e.g.:
        # projects/{project_number}/locations/{location}/
        parent=document_schema_client.common_location_path(project_number, location),
        document_schema=document_schema,
    )

    # Make the request
    response = document_schema_client.create_document_schema(request=request)

    # Print response
    print("Document Schema Created:", response)

    return response

Java

For more information, see the Document AI Warehouse Java API reference documentation.

To authenticate to Document AI Warehouse, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.


import com.google.cloud.contentwarehouse.v1.CreateDocumentSchemaRequest;
import com.google.cloud.contentwarehouse.v1.DocumentSchema;
import com.google.cloud.contentwarehouse.v1.DocumentSchemaServiceClient;
import com.google.cloud.contentwarehouse.v1.DocumentSchemaServiceSettings;
import com.google.cloud.contentwarehouse.v1.LocationName;
import com.google.cloud.contentwarehouse.v1.PropertyDefinition;
import com.google.cloud.contentwarehouse.v1.TextTypeOptions;
import com.google.cloud.resourcemanager.v3.Project;
import com.google.cloud.resourcemanager.v3.ProjectName;
import com.google.cloud.resourcemanager.v3.ProjectsClient;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeoutException;

public class CreateDocumentSchema {

  public static void createDocumentSchema() throws IOException, 
        InterruptedException, ExecutionException, TimeoutException {
    String projectId = "your-project-id";
    String location = "your-region"; // Format is "us" or "eu".
    createDocumentSchema(projectId, location);
  }

  // Creates a new Document Schema
  public static void createDocumentSchema(String projectId, String location) throws IOException, 
        InterruptedException, ExecutionException, TimeoutException {
    String projectNumber = getProjectNumber(projectId);

    String endpoint = "contentwarehouse.googleapis.com:443";
    if (!"us".equals(location)) {
      endpoint = String.format("%s-%s", location, endpoint);
    }
    DocumentSchemaServiceSettings documentSchemaServiceSettings = 
         DocumentSchemaServiceSettings.newBuilder().setEndpoint(endpoint).build(); 

    // Create a Schema Service client
    try (DocumentSchemaServiceClient documentSchemaServiceClient =
        DocumentSchemaServiceClient.create(documentSchemaServiceSettings)) {
      /*  The full resource name of the location, e.g.:
      projects/{project_number}/locations/{location} */
      String parent = LocationName.format(projectNumber, location);

      /* Create Document Schema with Text Type Property Definition
       * More detail on managing Document Schemas: 
       * https://cloud.google.com/document-warehouse/docs/manage-document-schemas */
      DocumentSchema documentSchema = DocumentSchema.newBuilder()
          .setDisplayName("Test Doc Schema")
          .setDescription("Test Doc Schema's Description")
          .addPropertyDefinitions(
            PropertyDefinition.newBuilder()
              .setName("plaintiff")
              .setDisplayName("Plaintiff")
              .setIsSearchable(true)
              .setIsRepeatable(true)
              .setTextTypeOptions(TextTypeOptions.newBuilder().build())
              .build()).build();

      // Define Document Schema request
      CreateDocumentSchemaRequest createDocumentSchemaRequest =
          CreateDocumentSchemaRequest.newBuilder()
            .setParent(parent)
            .setDocumentSchema(documentSchema).build();

      // Create Document Schema
      DocumentSchema documentSchemaResponse =
          documentSchemaServiceClient.createDocumentSchema(createDocumentSchemaRequest); 

      System.out.println(documentSchemaResponse.getName());
    }
  }

  private static String getProjectNumber(String projectId) throws IOException { 
    /* Initialize client that will be used to send requests. 
    * This client only needs to be created once, and can be reused for multiple requests. */
    try (ProjectsClient projectsClient = ProjectsClient.create()) { 
      ProjectName projectName = ProjectName.of(projectId); 
      Project project = projectsClient.getProject(projectName);
      String projectNumber = project.getName(); // Format returned is projects/xxxxxx
      return projectNumber.substring(projectNumber.lastIndexOf("/") + 1);
    } 
  }
}

Node.js

For more information, see the Document AI Warehouse Node.js API reference documentation.

To authenticate to Document AI Warehouse, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.


/**
 * TODO(developer): Uncomment these variables before running the sample.
 * const projectNumber = 'YOUR_PROJECT_NUMBER';
 * const location = 'YOUR_PROJECT_LOCATION'; // Format is 'us' or 'eu'
 */

// Import from google cloud
const {DocumentSchemaServiceClient} =
  require('@google-cloud/contentwarehouse').v1;

const apiEndpoint =
  location === 'us'
    ? 'contentwarehouse.googleapis.com'
    : `${location}-contentwarehouse.googleapis.com`;

// Create service client
const serviceClient = new DocumentSchemaServiceClient({
  apiEndpoint: apiEndpoint,
});

// Create Document Schema
async function createDocumentSchema() {
  // The full resource name of the location, e.g.:
  // projects/{project_number}/locations/{location}
  const parent = `projects/${projectNumber}/locations/${location}`;
  // Initialize request argument(s)
  const request = {
    parent: parent,
    // Document Schema
    documentSchema: {
      displayName: 'My Test Schema',
      // Property Definition
      propertyDefinitions: [
        {
          name: 'testPropertyDefinitionName', // Must be unique within a document schema (case insensitive)
          displayName: 'searchable text',
          isSearchable: true,
          textTypeOptions: {},
        },
      ],
    },
  };

  // Make Request
  const response = serviceClient.createDocumentSchema(request);

  // Print out response
  response.then(
    result =>
      console.log(`Document Schema Created: ${JSON.stringify(result)}`),
    error => console.log(`${error}`)
  );
}

Get a schema

Get details of a document schema.

REST

  curl --request GET --url https://contentwarehouse.googleapis.com/v1/projects/PROJECT_NUMBER/locations/LOCATION/documentSchemas/{document_schema_id} \
  --header "Authorization: Bearer $(gcloud auth print-access-token)" \
  --header "Content-Type: application/json; charset=UTF-8"

Python

For more information, see the Document AI Warehouse Python API reference documentation.

To authenticate to Document AI Warehouse, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.


from google.cloud import contentwarehouse

# TODO(developer): Uncomment these variables before running the sample.
# project_number = 'YOUR_PROJECT_NUMBER'
# location = 'YOUR_PROJECT_LOCATION' # Format is 'us' or 'eu'
# document_schema_id = "YOUR_DOCUMENT SCHEMA_ID"


def sample_get_document_schema(
    project_number: str, location: str, document_schema_id: str
) -> None:
    """Gets document schema details.

    Args:
        project_number: Google Cloud project number.
        location: Google Cloud project location.
        document_schema_id: Unique identifier for document schema
    Returns:
        Response object.
    """
    # Create a Schema Service client.
    document_schema_client = contentwarehouse.DocumentSchemaServiceClient()

    # The full resource name of the location, e.g.:
    # projects/{project_number}/locations/{location}/documentSchemas/{document_schema_id}
    document_schema_path = document_schema_client.document_schema_path(
        project=project_number,
        location=location,
        document_schema=document_schema_id,
    )

    # Initialize request argument(s)
    request = contentwarehouse.GetDocumentSchemaRequest(
        name=document_schema_path,
    )

    # Make the request
    response = document_schema_client.get_document_schema(request=request)

    # Handle the response
    print("Document Schema:", response)

    return response

Java

For more information, see the Document AI Warehouse Java API reference documentation.

To authenticate to Document AI Warehouse, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.


import com.google.cloud.contentwarehouse.v1.DocumentSchema;
import com.google.cloud.contentwarehouse.v1.DocumentSchemaName;
import com.google.cloud.contentwarehouse.v1.DocumentSchemaServiceClient;
import com.google.cloud.contentwarehouse.v1.DocumentSchemaServiceSettings;
import com.google.cloud.contentwarehouse.v1.GetDocumentSchemaRequest;
import com.google.cloud.resourcemanager.v3.Project;
import com.google.cloud.resourcemanager.v3.ProjectName;
import com.google.cloud.resourcemanager.v3.ProjectsClient;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeoutException;

public class GetDocumentSchema {

  public static void getDocumentSchema() throws IOException, 
        InterruptedException, ExecutionException, TimeoutException {
    String projectId = "your-project-id";
    String location = "your-region"; // Format is "us" or "eu".
    String documentSchemaId = "your-document-schema-id";
    getDocumentSchema(projectId, location, documentSchemaId);
  }

  // Retrieves details about existing Document Schema
  public static void getDocumentSchema(String projectId, String location, 
        String documentSchemaId) throws IOException, 
            InterruptedException, ExecutionException, TimeoutException {
    String projectNumber = getProjectNumber(projectId);

    String endpoint = "contentwarehouse.googleapis.com:443";
    if (!"us".equals(location)) {
      endpoint = String.format("%s-%s", location, endpoint);
    }
    DocumentSchemaServiceSettings documentSchemaServiceSettings = 
         DocumentSchemaServiceSettings.newBuilder().setEndpoint(endpoint).build(); 

    // Create a Schema Service client
    try (DocumentSchemaServiceClient documentSchemaServiceClient =
        DocumentSchemaServiceClient.create(documentSchemaServiceSettings)) {
      /* The full resource name of the location, e.g.: 
       projects/{project_number}/location/{location}/documentSchemas/{document_schema_id} */
      DocumentSchemaName documentSchemaName = 
          DocumentSchemaName.of(projectNumber, location, documentSchemaId);

      // Define request to get details of a specific Document Schema
      GetDocumentSchemaRequest getDocumentSchemaRequest = 
          GetDocumentSchemaRequest.newBuilder().setName(documentSchemaName.toString()).build();

      // Get details of Document Schema
      DocumentSchema documentSchema = 
          documentSchemaServiceClient.getDocumentSchema(getDocumentSchemaRequest);

      System.out.println(documentSchema.getName());
    }
  }

  private static String getProjectNumber(String projectId) throws IOException { 
    /* Initialize client that will be used to send requests. 
    * This client only needs to be created once, and can be reused for multiple requests. */
    try (ProjectsClient projectsClient = ProjectsClient.create()) { 
      ProjectName projectName = ProjectName.of(projectId); 
      Project project = projectsClient.getProject(projectName);
      String projectNumber = project.getName(); // Format returned is projects/xxxxxx
      return projectNumber.substring(projectNumber.lastIndexOf("/") + 1);
    } 
  }
}

Node.js

For more information, see the Document AI Warehouse Node.js API reference documentation.

To authenticate to Document AI Warehouse, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.


/**
 * TODO(developer): Uncomment these variables before running the sample.
 * const projectNumber = 'YOUR_PROJECT_NUMBER';
 * const location = 'YOUR_PROJECT_LOCATION'; // Format is 'us' or 'eu'
 * const schemaId = 'YOUR_DOCUMENT_SCHEMA_ID';
 */

// Import from google cloud
const {DocumentSchemaServiceClient} =
  require('@google-cloud/contentwarehouse').v1;

const apiEndpoint =
  location === 'us'
    ? 'contentwarehouse.googleapis.com'
    : `${location}-contentwarehouse.googleapis.com`;

// Create service client
const serviceClient = new DocumentSchemaServiceClient({
  apiEndpoint: apiEndpoint,
});

// Get Document Schema
async function getDocumentSchema() {
  // Initialize request argument(s)
  const request = {};

  // The full resource name of the location, e.g.:
  // projects/{project_number}/locations/{location}/documentSchemas/{document_schema_id}
  const name = serviceClient.documentSchemaPath(
    projectNumber,
    location,
    documentSchemaId
  );
  request.name = name;

  // Make Request
  const response = serviceClient.getDocumentSchema(request);

  // Print out response
  response.then(
    result => console.log(`Schema Found: ${JSON.stringify(result)}`),
    error => console.log(`${error}`)
  );
}

List schemas

List document schemas.

REST

  curl --request GET --url https://contentwarehouse.googleapis.com/v1/projects/PROJECT_NUMBER/locations/LOCATION/documentSchemas \
  --header "Authorization: Bearer $(gcloud auth print-access-token)" \
  --header "Content-Type: application/json; charset=UTF-8"

Python

For more information, see the Document AI Warehouse Python API reference documentation.

To authenticate to Document AI Warehouse, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.


from google.cloud import contentwarehouse

# TODO(developer): Uncomment these variables before running the sample.
# project_number = 'YOUR_PROJECT_NUMBER'
# location = 'YOUR_PROJECT_LOCATION' # Format is 'us' or 'eu'


def sample_list_document_schemas(project_number: str, location: str) -> None:
    """Lists document schemas.

    Args:
        project_number: Google Cloud project number.
        location: Google Cloud project location.
    """
    # Create a client
    document_schema_client = contentwarehouse.DocumentSchemaServiceClient()

    # The full resource name of the location, e.g.:
    # projects/{project_number}/locations/{location}
    parent = document_schema_client.common_location_path(
        project=project_number, location=location
    )

    # Initialize request argument(s)
    request = contentwarehouse.ListDocumentSchemasRequest(
        parent=parent,
    )

    # Make the request
    page_result = document_schema_client.list_document_schemas(request=request)

    # Print response
    responses = []
    print("Document Schemas:")
    for response in page_result:
        print(response)
        responses.append(response)

    return responses

Java

For more information, see the Document AI Warehouse Java API reference documentation.

To authenticate to Document AI Warehouse, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.


import com.google.cloud.contentwarehouse.v1.DocumentSchema;
import com.google.cloud.contentwarehouse.v1.DocumentSchemaServiceClient;
import com.google.cloud.contentwarehouse.v1.DocumentSchemaServiceSettings;
import com.google.cloud.contentwarehouse.v1.ListDocumentSchemasRequest;
import com.google.cloud.contentwarehouse.v1.LocationName;
import com.google.cloud.resourcemanager.v3.Project;
import com.google.cloud.resourcemanager.v3.ProjectName;
import com.google.cloud.resourcemanager.v3.ProjectsClient;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeoutException;

public class ListDocumentSchema {
  public static void listDocumentSchemas() throws IOException, 
        InterruptedException, ExecutionException, TimeoutException {
    String projectId = "your-project-id";
    String location = "your-region"; // Format is "us" or "eu".
    listDocumentSchemas(projectId, location);
  }

  // Retrieves all Document Schemas associated with a specified project
  public static void listDocumentSchemas(String projectId, String location) throws IOException, 
        InterruptedException, ExecutionException, TimeoutException {
    String projectNumber = getProjectNumber(projectId);

    String endpoint = "contentwarehouse.googleapis.com:443";
    if (!"us".equals(location)) {
      endpoint = String.format("%s-%s", location, endpoint);
    }
    DocumentSchemaServiceSettings documentSchemaServiceSettings = 
         DocumentSchemaServiceSettings.newBuilder().setEndpoint(endpoint).build(); 

    // Create a Schema Service client
    try (DocumentSchemaServiceClient documentSchemaServiceClient =
        DocumentSchemaServiceClient.create(documentSchemaServiceSettings)) {
      /*  The full resource name of the location, e.g.:
      projects/{project_number}/locations/{location} */
      String parent = LocationName.format(projectNumber, location);

      // Define request to list all Document Schemas
      ListDocumentSchemasRequest listDocumentSchemasRequest = 
          ListDocumentSchemasRequest.newBuilder().setParent(parent).build();

      // Print each schema ID  
      for (DocumentSchema schema :
          documentSchemaServiceClient.listDocumentSchemas(listDocumentSchemasRequest)
            .iterateAll()) {
        System.out.println(schema.getName());
      }
    }
  }

  private static String getProjectNumber(String projectId) throws IOException { 
    /* Initialize client that will be used to send requests. 
    * This client only needs to be created once, and can be reused for multiple requests. */
    try (ProjectsClient projectsClient = ProjectsClient.create()) { 
      ProjectName projectName = ProjectName.of(projectId); 
      Project project = projectsClient.getProject(projectName);
      String projectNumber = project.getName(); // Format returned is projects/xxxxxx
      return projectNumber.substring(projectNumber.lastIndexOf("/") + 1);
    } 
  }
}

Delete a schema

Delete a document schema.

REST

  curl --request DELETE --url https://contentwarehouse.googleapis.com/v1/projects/PROJECT_NUMBER/locations/LOCATION/documentSchemas/{document_schema_id} \
  --header "Authorization: Bearer $(gcloud auth print-access-token)" \
  --header "Content-Type: application/json; charset=UTF-8"

Python

For more information, see the Document AI Warehouse Python API reference documentation.

To authenticate to Document AI Warehouse, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.


from google.cloud import contentwarehouse

# TODO(developer): Uncomment these variables before running the sample.
# project_number = 'YOUR_PROJECT_NUMBER'
# location = 'YOUR_PROJECT_LOCATION' # Format is 'us' or 'eu'
# document_schema_id = "YOUR_DOCUMENT SCHEMA_ID"


def sample_delete_document_schema(
    project_number: str, location: str, document_schema_id: str
) -> None:
    """Deletes document schema.

    Args:
        project_number: Google Cloud project number.
        location: Google Cloud project location.
        document_schema_id: Unique identifier for document schema
    Returns:
        None, if operation is successful
    """
    # Create a client
    document_schema_client = contentwarehouse.DocumentSchemaServiceClient()

    # The full resource name of the location, e.g.:
    # projects/{project_number}/locations/{location}/documentSchemas/{document_schema_id}
    document_schema_path = document_schema_client.document_schema_path(
        project=project_number,
        location=location,
        document_schema=document_schema_id,
    )

    # Initialize request argument(s)
    request = contentwarehouse.DeleteDocumentSchemaRequest(
        name=document_schema_path,
    )

    # Make the request
    response = document_schema_client.delete_document_schema(request=request)

    return response

Java

For more information, see the Document AI Warehouse Java API reference documentation.

To authenticate to Document AI Warehouse, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.


import com.google.cloud.contentwarehouse.v1.DeleteDocumentSchemaRequest;
import com.google.cloud.contentwarehouse.v1.DocumentSchemaName;
import com.google.cloud.contentwarehouse.v1.DocumentSchemaServiceClient;
import com.google.cloud.contentwarehouse.v1.DocumentSchemaServiceSettings;
import com.google.cloud.resourcemanager.v3.Project;
import com.google.cloud.resourcemanager.v3.ProjectName;
import com.google.cloud.resourcemanager.v3.ProjectsClient;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeoutException;

public class DeleteDocumentSchema {

  public static void createDocumentSchema() throws IOException, 
        InterruptedException, ExecutionException, TimeoutException {
    String projectId = "your-project-id";
    String location = "your-region"; // Format is "us" or "eu".
    String documentSchemaId = "your-schema-id";
    deleteDocumentSchema(projectId, location, documentSchemaId);
  }

  // Creates a new Document Schema
  public static void deleteDocumentSchema(String projectId, String location,
      String documentSchemaId) throws IOException,
          InterruptedException, ExecutionException, TimeoutException {
    String projectNumber = getProjectNumber(projectId);

    String endpoint = "contentwarehouse.googleapis.com:443";
    if (!"us".equals(location)) {
      endpoint = String.format("%s-%s", location, endpoint);
    }
    DocumentSchemaServiceSettings documentSchemaServiceSettings = 
         DocumentSchemaServiceSettings.newBuilder().setEndpoint(endpoint).build(); 

    // Create a Schema Service client
    try (DocumentSchemaServiceClient documentSchemaServiceClient =
        DocumentSchemaServiceClient.create(documentSchemaServiceSettings)) {

      /* The full resource name of the location, e.g.: 
       projects/{project_number}/location/{location}/documentSchemas/{document_schema_id} */
      DocumentSchemaName documentSchemaName = 
          DocumentSchemaName.of(projectNumber, location, documentSchemaId);

      /* Create request to delete Document Schema from provided schema ID.
       * More detail on managing Document Schemas: 
       * https://cloud.google.com/document-warehouse/docs/manage-document-schemas */
      DeleteDocumentSchemaRequest deleteDocumentSchemaRequest = 
          DeleteDocumentSchemaRequest.newBuilder()
            .setName(documentSchemaName.toString()).build();

      // Delete Document Schema
      documentSchemaServiceClient.deleteDocumentSchema(deleteDocumentSchemaRequest);

      System.out.println("Document Schema ID " + documentSchemaId + " has been deleted.");

    }
  }

  private static String getProjectNumber(String projectId) throws IOException { 
    /* Initialize client that will be used to send requests. 
    * This client only needs to be created once, and can be reused for multiple requests. */
    try (ProjectsClient projectsClient = ProjectsClient.create()) { 
      ProjectName projectName = ProjectName.of(projectId); 
      Project project = projectsClient.getProject(projectName);
      String projectNumber = project.getName(); // Format returned is projects/xxxxxx
      return projectNumber.substring(projectNumber.lastIndexOf("/") + 1);
    } 
  }
}

Node.js

For more information, see the Document AI Warehouse Node.js API reference documentation.

To authenticate to Document AI Warehouse, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.


/**
 * TODO(developer): Uncomment these variables before running the sample.
 * const projectId = 'YOUR_PROJECT_ID';
 * const location = 'YOUR_PROJECT_LOCATION'; // Format is 'us' or 'eu'
 * const documentSchemaId = 'YOUR_DOCUMENT_SCHEMA_ID';
 */

// Import from google cloud

const {DocumentSchemaServiceClient} =
  require('@google-cloud/contentwarehouse').v1;

const apiEndpoint =
  location === 'us'
    ? 'contentwarehouse.googleapis.com'
    : `${location}-contentwarehouse.googleapis.com`;

// Create service client
const serviceClient = new DocumentSchemaServiceClient({
  apiEndpoint: apiEndpoint,
});

// Delete Document Schema
async function deleteDocumentSchema() {
  // Initialize request argument(s)
  const request = {
    // The full resource name of the location, e.g.:
    // projects/{project_number}/locations/{location}/documentSchemas/{document_schema_id}
    name: `projects/${projectId}/locations/${location}/documentSchemas/${documentSchemaId}`,
  };

  // Make Request
  const response = await serviceClient.deleteDocumentSchema(request);

  // Print out response
  console.log(`Document Schema Deleted: ${JSON.stringify(response)}`);
}

Update a schema

Update a document schema. Currently the update logic only supports adding new property definitions. The new document schema should include all property definitions present in the existing schema.

  • Supported:

    • For existing properties, users can change the following metadata settings: is_repeatable, is_metadata, is_required.
    • For existing ENUM properties, users can add new ENUM possible values or delete existing ENUM possible values. They can update the EnumTypeOptions.validation_check_disabled flag to disable the validation check. The validation check is used to make sure the ENUM values specified in the documents are in the range of possible ENUM values defined in the property definition when calling the CreateDocument API.
    • Adding new property definitions is supported.
  • Not supported:

    • For existing schema, updates to display_name and document_is_folder are not allowed.
    • For existing properties, updates to name, display_name and value_type_options are not allowed.

REST

curl --request PATCH --url https://contentwarehouse.googleapis.com/v1/projects/PROJECT_NUMBER/locations/LOCATION/documentSchemas/{document_schema_id} \
--header "Authorization: Bearer $(gcloud auth print-access-token)" \
--header "Content-Type: application/json; charset=UTF-8" \
--data '{
  "document_schema": {
    "display_name": "Test Doc Schema",
    "property_definitions": [
      {
        "name": "plaintiff",
        "display_name": "Plaintiff",
        "is_repeatable": true,
        "text_type_options": {}
      }
    ]
  }
}'

Python

For more information, see the Document AI Warehouse Python API reference documentation.

To authenticate to Document AI Warehouse, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.


from google.cloud import contentwarehouse

# TODO(developer): Uncomment these variables before running the sample.
# project_number = "YOUR_PROJECT_NUMBER"
# location = "us" # Format is 'us' or 'eu'
# document_schema_id = "YOUR_SCHEMA_ID"


def update_document_schema(
    project_number: str, location: str, document_schema_id: str
) -> None:
    # Create a Schema Service client
    document_schema_client = contentwarehouse.DocumentSchemaServiceClient()

    # The full resource name of the location, e.g.:
    # projects/{project_number}/locations/{location}/documentSchemas/{document_schema_id}
    document_schema_path = document_schema_client.document_schema_path(
        project=project_number,
        location=location,
        document_schema=document_schema_id,
    )

    # Define Schema Property of Text Type with updated values
    updated_property_definition = contentwarehouse.PropertyDefinition(
        name="stock_symbol",  # Must be unique within a document schema (case insensitive)
        display_name="Searchable text",
        is_searchable=True,
        is_repeatable=False,
        is_required=True,
        text_type_options=contentwarehouse.TextTypeOptions(),
    )

    # Define Update Document Schema Request
    update_document_schema_request = contentwarehouse.UpdateDocumentSchemaRequest(
        name=document_schema_path,
        document_schema=contentwarehouse.DocumentSchema(
            display_name="My Test Schema",
            property_definitions=[updated_property_definition],
        ),
    )

    # Update Document schema
    updated_document_schema = document_schema_client.update_document_schema(
        request=update_document_schema_request
    )

    # Read the output
    print(f"Updated Document Schema: {updated_document_schema}")

Java

For more information, see the Document AI Warehouse Java API reference documentation.

To authenticate to Document AI Warehouse, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.


import com.google.cloud.contentwarehouse.v1.DocumentSchema;
import com.google.cloud.contentwarehouse.v1.DocumentSchemaName;
import com.google.cloud.contentwarehouse.v1.DocumentSchemaServiceClient;
import com.google.cloud.contentwarehouse.v1.DocumentSchemaServiceSettings;
import com.google.cloud.contentwarehouse.v1.PropertyDefinition;
import com.google.cloud.contentwarehouse.v1.TextTypeOptions;
import com.google.cloud.contentwarehouse.v1.UpdateDocumentSchemaRequest;
import com.google.cloud.resourcemanager.v3.Project;
import com.google.cloud.resourcemanager.v3.ProjectName;
import com.google.cloud.resourcemanager.v3.ProjectsClient;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeoutException;

public class UpdateDocumentSchema {
  public static void updateDocumentSchema() throws IOException, 
        InterruptedException, ExecutionException, TimeoutException { 
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    String location = "your-region"; // Format is "us" or "eu".
    String documentSchemaId = "your-document-schema-id";
    /* The below method call retrieves details about the schema you are about to update.
     * It is important to note that some properties cannot be edited or removed. 
     * For more information on managing document schemas, please see the below documentation.
     * https://cloud.google.com/document-warehouse/docs/manage-document-schemas */
    GetDocumentSchema.getDocumentSchema(projectId, location, documentSchemaId);
    updateDocumentSchema(projectId, location, documentSchemaId);
  }

  // Updates an existing Document Schema
  public static void updateDocumentSchema(String projectId, String location, 
        String documentSchemaId) throws IOException, InterruptedException,
          ExecutionException, TimeoutException { 
    String projectNumber = getProjectNumber(projectId);

    String endpoint = "contentwarehouse.googleapis.com:443";
    if (!"us".equals(location)) {
      endpoint = String.format("%s-%s", location, endpoint);
    }

    DocumentSchemaServiceSettings documentSchemaServiceSettings = 
             DocumentSchemaServiceSettings.newBuilder().setEndpoint(endpoint).build(); 

    /* Create the Schema Service Client 
     * Initialize client that will be used to send requests. 
     * This client only needs to be created once, and can be reused for multiple requests. */
    try (DocumentSchemaServiceClient documentSchemaServiceClient = 
            DocumentSchemaServiceClient.create(documentSchemaServiceSettings)) {

      /* The full resource name of the location, e.g.: 
       projects/{project_number}/location/{location}/documentSchemas/{document_schema_id} */
      DocumentSchemaName documentSchemaName = 
          DocumentSchemaName.of(projectNumber, location, documentSchemaId);

      // Define the new Schema Property with updated values
      PropertyDefinition propertyDefinition = PropertyDefinition.newBuilder()
          .setName("plaintiff")
          .setDisplayName("Plaintiff")
          .setIsSearchable(true)
          .setIsRepeatable(true)
          .setIsRequired(false)
          .setTextTypeOptions(TextTypeOptions.newBuilder()
          .build())
          .build();

      DocumentSchema updatedDocumentSchema = DocumentSchema.newBuilder()
                    .setDisplayName("Test Doc Schema") 
                    .addPropertyDefinitions(0, propertyDefinition).build();

      // Create the Request to Update the Document Schema
      UpdateDocumentSchemaRequest updateDocumentSchemaRequest = 
            UpdateDocumentSchemaRequest.newBuilder()
            .setName(documentSchemaName.toString())
            .setDocumentSchema(updatedDocumentSchema)
            .build();

      // Update Document Schema
      updatedDocumentSchema = 
        documentSchemaServiceClient.updateDocumentSchema(updateDocumentSchemaRequest);

      // Read the output of Updated Document Schema Name
      System.out.println(updatedDocumentSchema.getName());
    }
  }

  private static String getProjectNumber(String projectId) throws IOException { 
    /* Initialize client that will be used to send requests. 
    * This client only needs to be created once, and can be reused for multiple requests. */
    try (ProjectsClient projectsClient = ProjectsClient.create()) { 
      ProjectName projectName = ProjectName.of(projectId); 
      Project project = projectsClient.getProject(projectName);
      String projectNumber = project.getName(); // Format returned is projects/xxxxxx
      return projectNumber.substring(projectNumber.lastIndexOf("/") + 1);
    } 
  }
}

Next steps