This is an automated email from the ASF dual-hosted git repository. tballison pushed a commit to branch metadata-key-registry in repository https://gitbox.apache.org/repos/asf/tika.git
commit 78b4a3fd8261310f80b3888b845a0174536fbadf Author: tallison <[email protected]> AuthorDate: Mon Jul 27 15:18:41 2026 -0400 metadata schema --- tika-metadata-schema/README.md | 50 ++ tika-metadata-schema/pom.xml | 59 ++ .../tika/metadata/schema/SchemaGenerator.java | 157 +++++ .../org/apache/tika/metadata/metadata-keys.json | 636 +++++++++++++++++++++ .../tika/metadata/metadata-open-namespaces.json | 38 ++ .../tika/metadata/schema/MetadataSchemaTest.java | 48 ++ 6 files changed, 988 insertions(+) diff --git a/tika-metadata-schema/README.md b/tika-metadata-schema/README.md new file mode 100644 index 0000000000..e58f2a7083 --- /dev/null +++ b/tika-metadata-schema/README.md @@ -0,0 +1,50 @@ +<!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +# tika-metadata-schema + +A machine-readable schema of Apache Tika's metadata keys. Two registries, because Tika has two +kinds of keys: + +## `metadata-keys.json` — the closed set (generated + gated) +Every key Tika declares as a `Property` constant, plus the bounded digest cross-product +(`X-TIKA:digest:<ALGORITHM>[:<ENCODING>]`, enumerated from `DigestDef`). Each record: +`{ key, namespace, valueType, cardinality }`. + +**Generated, never hand-edited.** `SchemaGenerator` scans the parser classpath for classes that +declare a `Property` field, force-loads them, reads the global `Property` table, and writes stable +sorted JSON. `MetadataSchemaTest` regenerates in-memory and asserts it matches the committed file, so +the registry can never drift from the declarations. + +Regenerate after adding/changing a `Property`: +``` +java -cp <tika-metadata-schema + deps classpath> \ + org.apache.tika.metadata.schema.SchemaGenerator \ + src/main/resources/org/apache/tika/metadata/metadata-keys.json +``` + +## `metadata-open-namespaces.json` — the open sets (curated) +Keys minted at **runtime** whose names are not `Property` constants, so they cannot be generated: +- **open/passthrough namespaces** — file-controlled key names (scraped HTML `<meta>` under `html:`, + OOXML `custom:`, email `Message:Raw-Header:`, Access `MDB_PROP:`, Vorbis comments, GRIB/NetCDF/FLV + attributes, …); +- **templates** — e.g. XMP `rdf:Alt` language variants `<base-key>:<lang>` (`dc:title:fr`). + +**Curated (hand-maintained, reviewed), not generated**, and possibly not exhaustive; the +closed-namespace lint (a follow-up) is the intended completeness backstop. + +Together the two files describe the whole key space: closed keys are enumerated and gated; open keys +are described by rule. diff --git a/tika-metadata-schema/pom.xml b/tika-metadata-schema/pom.xml new file mode 100644 index 0000000000..19b3779091 --- /dev/null +++ b/tika-metadata-schema/pom.xml @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.apache.tika</groupId> + <artifactId>tika-parent</artifactId> + <version>${revision}</version> + <relativePath>../tika-parent/pom.xml</relativePath> + </parent> + + <artifactId>tika-metadata-schema</artifactId> + <name>Apache Tika metadata schema</name> + <description>Generates and enforces the machine-readable metadata key registry + (metadata-keys.json) from the live Property declarations.</description> + + <dependencies> + <dependency> + <groupId>org.apache.tika</groupId> + <artifactId>tika-core</artifactId> + <version>${project.version}</version> + </dependency> + <!-- brings the standard parser classes onto the classpath so their Property + constants are discoverable by the generator --> + <dependency> + <groupId>org.apache.tika</groupId> + <artifactId>tika-parsers-standard-package</artifactId> + <version>${project.version}</version> + <type>pom</type> + </dependency> + + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter</artifactId> + <scope>test</scope> + </dependency> + </dependencies> + <!-- Regenerate the committed registry with: + java -cp <module+deps classpath> org.apache.tika.metadata.schema.SchemaGenerator \ + src/main/resources/org/apache/tika/metadata/metadata-keys.json + MetadataSchemaTest regenerates in-memory and asserts no diff, so CI catches drift. --> +</project> diff --git a/tika-metadata-schema/src/main/java/org/apache/tika/metadata/schema/SchemaGenerator.java b/tika-metadata-schema/src/main/java/org/apache/tika/metadata/schema/SchemaGenerator.java new file mode 100644 index 0000000000..4b4d189491 --- /dev/null +++ b/tika-metadata-schema/src/main/java/org/apache/tika/metadata/schema/SchemaGenerator.java @@ -0,0 +1,157 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.tika.metadata.schema; + +import java.io.File; +import java.io.IOException; +import java.lang.reflect.Field; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Enumeration; +import java.util.Map; +import java.util.TreeMap; +import java.util.jar.JarEntry; +import java.util.jar.JarFile; + +import org.apache.tika.digest.DigestDef; +import org.apache.tika.metadata.Property; + +/** + * Generates the machine-readable metadata key registry ({@code metadata-keys.json}) from the live + * {@link Property} declarations. Dependency-free: it scans the runtime classpath for classes that + * declare a {@code Property} field, force-loads them (their static init registers into the global + * {@code Property} table), then serializes that table as stable, sorted JSON. + * + * <p>The generated file is committed; {@code MetadataSchemaTest} regenerates and asserts no diff, + * so the registry can never drift from the declarations. + */ +public final class SchemaGenerator { + + // Field/parameter descriptor for org.apache.tika.metadata.Property in a .class constant pool. + private static final byte[] PROP_DESC = + "Lorg/apache/tika/metadata/Property;".getBytes(StandardCharsets.ISO_8859_1); + + private SchemaGenerator() { + } + + /** @return the registry as stable JSON (sorted by key). */ + public static String generate() throws Exception { + ClassLoader cl = SchemaGenerator.class.getClassLoader(); + for (String entry : System.getProperty("java.class.path").split(File.pathSeparator)) { + File f = new File(entry); + if (f.isDirectory()) { + scanDir(f, f.toPath(), cl); + } else if (f.getName().endsWith(".jar")) { + scanJar(f, cl); + } + } + Field fld = Property.class.getDeclaredField("PROPERTIES"); + fld.setAccessible(true); + @SuppressWarnings("unchecked") + Map<String, Property> reg = (Map<String, Property>) fld.get(null); + + TreeMap<String, String[]> entries = new TreeMap<>(); // key -> [valueType, cardinality] + for (Map.Entry<String, Property> e : reg.entrySet()) { + entries.put(e.getKey(), new String[]{ + e.getValue().getValueType().toString(), e.getValue().getPropertyType().toString()}); + } + // Digest keys are a CLOSED cross-product of the supported algorithms and encodings, not an + // open template. Synthesize them via the real DigestDef.metadataKey() so they can't drift. + for (DigestDef.Algorithm a : DigestDef.Algorithm.values()) { + for (DigestDef.Encoding enc : DigestDef.Encoding.values()) { + entries.put(new DigestDef(a, enc).metadataKey(), new String[]{"TEXT", "SIMPLE"}); + } + } + return toJson(entries); + } + + private static void scanDir(File root, Path dir, ClassLoader cl) throws IOException { + try (var stream = Files.walk(dir)) { + for (Path p : (Iterable<Path>) stream::iterator) { + if (!p.toString().endsWith(".class")) { + continue; + } + String rel = root.toPath().relativize(p).toString().replace(File.separatorChar, '/'); + maybeLoad(rel, Files.readAllBytes(p), cl); + } + } + } + + private static void scanJar(File jar, ClassLoader cl) throws IOException { + try (JarFile jf = new JarFile(jar)) { + for (Enumeration<JarEntry> e = jf.entries(); e.hasMoreElements(); ) { + JarEntry je = e.nextElement(); + if (!je.getName().endsWith(".class")) { + continue; + } + maybeLoad(je.getName(), jf.getInputStream(je).readAllBytes(), cl); + } + } + } + + private static void maybeLoad(String classPath, byte[] bytes, ClassLoader cl) { + if (!classPath.startsWith("org/apache/tika/") || !contains(bytes, PROP_DESC)) { + return; + } + String cn = classPath.substring(0, classPath.length() - 6).replace('/', '.'); + try { + Class.forName(cn, true, cl); // static init registers any Property constants + } catch (Throwable ignore) { + // classes whose static init needs an absent dependency are skipped; the corpus test backs this + } + } + + private static boolean contains(byte[] hay, byte[] needle) { + outer: + for (int i = 0; i <= hay.length - needle.length; i++) { + for (int j = 0; j < needle.length; j++) { + if (hay[i + j] != needle[j]) { + continue outer; + } + } + return true; + } + return false; + } + + private static String toJson(TreeMap<String, String[]> entries) { + StringBuilder sb = new StringBuilder("[\n"); + int i = 0; + int n = entries.size(); + for (Map.Entry<String, String[]> e : entries.entrySet()) { + String k = e.getKey(); + String ns = k.contains(":") ? k.substring(0, k.indexOf(':')) : ""; + sb.append(" {\"key\":").append(quote(k)) + .append(",\"namespace\":").append(quote(ns)) + .append(",\"valueType\":\"").append(e.getValue()[0]) + .append("\",\"cardinality\":\"").append(e.getValue()[1]) + .append("\"}").append(++i < n ? "," : "").append('\n'); + } + return sb.append("]\n").toString(); + } + + private static String quote(String s) { + return '"' + s.replace("\\", "\\\\").replace("\"", "\\\"") + '"'; + } + + public static void main(String[] args) throws Exception { + Path out = Path.of(args[0]); + Files.writeString(out, generate()); + System.out.println("wrote " + out); + } +} diff --git a/tika-metadata-schema/src/main/resources/org/apache/tika/metadata/metadata-keys.json b/tika-metadata-schema/src/main/resources/org/apache/tika/metadata/metadata-keys.json new file mode 100644 index 0000000000..6a804c72ba --- /dev/null +++ b/tika-metadata-schema/src/main/resources/org/apache/tika/metadata/metadata-keys.json @@ -0,0 +1,636 @@ +[ + {"key":"Camera:MicroVideo","namespace":"Camera","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"Camera:MicroVideoOffset","namespace":"Camera","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"Camera:MicroVideoPresentationTimestampUs","namespace":"Camera","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"Camera:MicroVideoVersion","namespace":"Camera","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"Camera:MotionPhoto","namespace":"Camera","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"Camera:MotionPhotoPresentationTimestampUs","namespace":"Camera","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"Camera:MotionPhotoVersion","namespace":"Camera","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"Content-Type-Hint","namespace":"","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"Content-Type-Magic-Detected","namespace":"","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"Content-Type-Override","namespace":"","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"Content-Type-Parser-Override","namespace":"","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"Iptc4xmpCore:CiAdrCity","namespace":"Iptc4xmpCore","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"Iptc4xmpCore:CiAdrCtry","namespace":"Iptc4xmpCore","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"Iptc4xmpCore:CiAdrExtadr","namespace":"Iptc4xmpCore","valueType":"TEXT","cardinality":"BAG"}, + {"key":"Iptc4xmpCore:CiAdrPcode","namespace":"Iptc4xmpCore","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"Iptc4xmpCore:CiAdrRegion","namespace":"Iptc4xmpCore","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"Iptc4xmpCore:CiEmailWork","namespace":"Iptc4xmpCore","valueType":"TEXT","cardinality":"BAG"}, + {"key":"Iptc4xmpCore:CiTelWork","namespace":"Iptc4xmpCore","valueType":"TEXT","cardinality":"BAG"}, + {"key":"Iptc4xmpCore:CiUrlWork","namespace":"Iptc4xmpCore","valueType":"TEXT","cardinality":"BAG"}, + {"key":"Iptc4xmpCore:CountryCode","namespace":"Iptc4xmpCore","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"Iptc4xmpCore:CreatorContactInfo","namespace":"Iptc4xmpCore","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"Iptc4xmpCore:IntellectualGenre","namespace":"Iptc4xmpCore","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"Iptc4xmpCore:Location","namespace":"Iptc4xmpCore","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"Iptc4xmpCore:Scene","namespace":"Iptc4xmpCore","valueType":"TEXT","cardinality":"BAG"}, + {"key":"Iptc4xmpCore:SubjectCode","namespace":"Iptc4xmpCore","valueType":"TEXT","cardinality":"BAG"}, + {"key":"Iptc4xmpExt:AOCopyrightNotice","namespace":"Iptc4xmpExt","valueType":"TEXT","cardinality":"BAG"}, + {"key":"Iptc4xmpExt:AOCreator","namespace":"Iptc4xmpExt","valueType":"TEXT","cardinality":"BAG"}, + {"key":"Iptc4xmpExt:AODateCreated","namespace":"Iptc4xmpExt","valueType":"TEXT","cardinality":"BAG"}, + {"key":"Iptc4xmpExt:AOSource","namespace":"Iptc4xmpExt","valueType":"TEXT","cardinality":"BAG"}, + {"key":"Iptc4xmpExt:AOSourceInvNo","namespace":"Iptc4xmpExt","valueType":"TEXT","cardinality":"BAG"}, + {"key":"Iptc4xmpExt:AOTitle","namespace":"Iptc4xmpExt","valueType":"TEXT","cardinality":"BAG"}, + {"key":"Iptc4xmpExt:AddlModelInfo","namespace":"Iptc4xmpExt","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"Iptc4xmpExt:ArtworkOrObject","namespace":"Iptc4xmpExt","valueType":"TEXT","cardinality":"BAG"}, + {"key":"Iptc4xmpExt:CVterm","namespace":"Iptc4xmpExt","valueType":"TEXT","cardinality":"BAG"}, + {"key":"Iptc4xmpExt:DigImageGUID","namespace":"Iptc4xmpExt","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"Iptc4xmpExt:DigitalSourceType","namespace":"Iptc4xmpExt","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"Iptc4xmpExt:DigitalSourcefileType","namespace":"Iptc4xmpExt","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"Iptc4xmpExt:Event","namespace":"Iptc4xmpExt","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"Iptc4xmpExt:IptcLastEdited","namespace":"Iptc4xmpExt","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"Iptc4xmpExt:LocationCreated","namespace":"Iptc4xmpExt","valueType":"TEXT","cardinality":"BAG"}, + {"key":"Iptc4xmpExt:LocationCreatedCity","namespace":"Iptc4xmpExt","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"Iptc4xmpExt:LocationCreatedCountryCode","namespace":"Iptc4xmpExt","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"Iptc4xmpExt:LocationCreatedCountryName","namespace":"Iptc4xmpExt","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"Iptc4xmpExt:LocationCreatedProvinceState","namespace":"Iptc4xmpExt","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"Iptc4xmpExt:LocationCreatedSublocation","namespace":"Iptc4xmpExt","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"Iptc4xmpExt:LocationCreatedWorldRegion","namespace":"Iptc4xmpExt","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"Iptc4xmpExt:LocationShown","namespace":"Iptc4xmpExt","valueType":"TEXT","cardinality":"BAG"}, + {"key":"Iptc4xmpExt:LocationShownCity","namespace":"Iptc4xmpExt","valueType":"TEXT","cardinality":"BAG"}, + {"key":"Iptc4xmpExt:LocationShownCountryCode","namespace":"Iptc4xmpExt","valueType":"TEXT","cardinality":"BAG"}, + {"key":"Iptc4xmpExt:LocationShownCountryName","namespace":"Iptc4xmpExt","valueType":"TEXT","cardinality":"BAG"}, + {"key":"Iptc4xmpExt:LocationShownProvinceState","namespace":"Iptc4xmpExt","valueType":"TEXT","cardinality":"BAG"}, + {"key":"Iptc4xmpExt:LocationShownSublocation","namespace":"Iptc4xmpExt","valueType":"TEXT","cardinality":"BAG"}, + {"key":"Iptc4xmpExt:LocationShownWorldRegion","namespace":"Iptc4xmpExt","valueType":"TEXT","cardinality":"BAG"}, + {"key":"Iptc4xmpExt:MaxAvailHeight","namespace":"Iptc4xmpExt","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"Iptc4xmpExt:MaxAvailWidth","namespace":"Iptc4xmpExt","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"Iptc4xmpExt:ModelAge","namespace":"Iptc4xmpExt","valueType":"TEXT","cardinality":"BAG"}, + {"key":"Iptc4xmpExt:OrganisationInImageCode","namespace":"Iptc4xmpExt","valueType":"TEXT","cardinality":"BAG"}, + {"key":"Iptc4xmpExt:OrganisationInImageName","namespace":"Iptc4xmpExt","valueType":"TEXT","cardinality":"BAG"}, + {"key":"Iptc4xmpExt:PersonInImage","namespace":"Iptc4xmpExt","valueType":"TEXT","cardinality":"BAG"}, + {"key":"Iptc4xmpExt:RegItemId","namespace":"Iptc4xmpExt","valueType":"TEXT","cardinality":"BAG"}, + {"key":"Iptc4xmpExt:RegOrgId","namespace":"Iptc4xmpExt","valueType":"TEXT","cardinality":"BAG"}, + {"key":"Iptc4xmpExt:RegistryId","namespace":"Iptc4xmpExt","valueType":"TEXT","cardinality":"BAG"}, + {"key":"Message:BCC-Display-Name","namespace":"Message","valueType":"TEXT","cardinality":"BAG"}, + {"key":"Message:BCC-Email","namespace":"Message","valueType":"TEXT","cardinality":"BAG"}, + {"key":"Message:BCC-Name","namespace":"Message","valueType":"TEXT","cardinality":"BAG"}, + {"key":"Message:CC-Display-Name","namespace":"Message","valueType":"TEXT","cardinality":"BAG"}, + {"key":"Message:CC-Email","namespace":"Message","valueType":"TEXT","cardinality":"BAG"}, + {"key":"Message:CC-Name","namespace":"Message","valueType":"TEXT","cardinality":"BAG"}, + {"key":"Message:From-Email","namespace":"Message","valueType":"TEXT","cardinality":"BAG"}, + {"key":"Message:From-Name","namespace":"Message","valueType":"TEXT","cardinality":"BAG"}, + {"key":"Message:To-Display-Name","namespace":"Message","valueType":"TEXT","cardinality":"BAG"}, + {"key":"Message:To-Email","namespace":"Message","valueType":"TEXT","cardinality":"BAG"}, + {"key":"Message:To-Name","namespace":"Message","valueType":"TEXT","cardinality":"BAG"}, + {"key":"Password","namespace":"","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:EXCEPTION:container_exception","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:EXCEPTION:embedded_bytes_exception","namespace":"X-TIKA","valueType":"TEXT","cardinality":"BAG"}, + {"key":"X-TIKA:EXCEPTION:embedded_depth_limit_reached","namespace":"X-TIKA","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"X-TIKA:EXCEPTION:embedded_exception","namespace":"X-TIKA","valueType":"TEXT","cardinality":"BAG"}, + {"key":"X-TIKA:EXCEPTION:embedded_parser","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:EXCEPTION:embedded_resource_limit_reached","namespace":"X-TIKA","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"X-TIKA:EXCEPTION:embedded_stream_exception","namespace":"X-TIKA","valueType":"TEXT","cardinality":"BAG"}, + {"key":"X-TIKA:EXCEPTION:embedded_warning","namespace":"X-TIKA","valueType":"TEXT","cardinality":"BAG"}, + {"key":"X-TIKA:EXCEPTION:warn","namespace":"X-TIKA","valueType":"TEXT","cardinality":"BAG"}, + {"key":"X-TIKA:EXCEPTION:write_limit_reached","namespace":"X-TIKA","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"X-TIKA:Parsed-By","namespace":"X-TIKA","valueType":"TEXT","cardinality":"BAG"}, + {"key":"X-TIKA:Parsed-By-Full-Set","namespace":"X-TIKA","valueType":"TEXT","cardinality":"BAG"}, + {"key":"X-TIKA:WARN:truncated_metadata","namespace":"X-TIKA","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"X-TIKA:content","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:content_handler","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:content_handler_type","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:decodedCharset","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:detectedEncoding","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:detected_language","namespace":"X-TIKA","valueType":"TEXT","cardinality":"BAG"}, + {"key":"X-TIKA:detected_language_confidence","namespace":"X-TIKA","valueType":"TEXT","cardinality":"BAG"}, + {"key":"X-TIKA:detected_language_confidence_raw","namespace":"X-TIKA","valueType":"REAL","cardinality":"SEQ"}, + {"key":"X-TIKA:detection_content_length","namespace":"X-TIKA","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"X-TIKA:digest:MD2","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:digest:MD2:BASE32","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:digest:MD2:BASE64","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:digest:MD5","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:digest:MD5:BASE32","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:digest:MD5:BASE64","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:digest:SHA1","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:digest:SHA1:BASE32","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:digest:SHA1:BASE64","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:digest:SHA256","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:digest:SHA256:BASE32","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:digest:SHA256:BASE64","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:digest:SHA384","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:digest:SHA384:BASE32","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:digest:SHA384:BASE64","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:digest:SHA3_256","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:digest:SHA3_256:BASE32","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:digest:SHA3_256:BASE64","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:digest:SHA3_384","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:digest:SHA3_384:BASE32","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:digest:SHA3_384:BASE64","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:digest:SHA3_512","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:digest:SHA3_512:BASE32","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:digest:SHA3_512:BASE64","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:digest:SHA512","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:digest:SHA512:BASE32","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:digest:SHA512:BASE64","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:embeddedRelationshipId","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:embedded_depth","namespace":"X-TIKA","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"X-TIKA:embedded_id","namespace":"X-TIKA","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"X-TIKA:embedded_id_path","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:embedded_resource_path","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:encodingDetectionTrace","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:encodingDetector","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:encrypted","namespace":"X-TIKA","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"X-TIKA:final_embedded_resource_path","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:internalPath","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:origResourceName","namespace":"X-TIKA","valueType":"TEXT","cardinality":"BAG"}, + {"key":"X-TIKA:parse_time_millis","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:pipes_result","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:resourceName","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:resourceNameExtensionInferred","namespace":"X-TIKA","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"X-TIKA:sourcePath","namespace":"X-TIKA","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"X-TIKA:truncated_content_for_detection","namespace":"X-TIKA","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"X-TIKA:versionCount","namespace":"X-TIKA","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"X-TIKA:versionNumber","namespace":"X-TIKA","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"access_permission:assemble_document","namespace":"access_permission","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"access_permission:can_modify","namespace":"access_permission","valueType":"TEXT","cardinality":"BAG"}, + {"key":"access_permission:can_print","namespace":"access_permission","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"access_permission:can_print_faithful","namespace":"access_permission","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"access_permission:extract_content","namespace":"access_permission","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"access_permission:extract_for_accessibility","namespace":"access_permission","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"access_permission:fill_in_form","namespace":"access_permission","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"access_permission:modify_annotations","namespace":"access_permission","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"audio:bitrate","namespace":"audio","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"audio:disc-count","namespace":"audio","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"audio:has-drm","namespace":"audio","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"audio:is-variable-bitrate","namespace":"audio","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"audio:raw-disc-number","namespace":"audio","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"audio:raw-track-number","namespace":"audio","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"audio:track-count","namespace":"audio","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"aux:Lens","namespace":"aux","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"aux:LensID","namespace":"aux","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"aux:LensInfo","namespace":"aux","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"aux:SerialNumber","namespace":"aux","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"cp:category","namespace":"cp","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"cp:contentStatus","namespace":"cp","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"cp:lastModifiedBy","namespace":"cp","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"cp:lastPrinted","namespace":"cp","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"cp:revision","namespace":"cp","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"cp:subject","namespace":"cp","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"cp:version","namespace":"cp","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"csv:delimiter","namespace":"csv","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"csv:num_columns","namespace":"csv","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"csv:num_rows","namespace":"csv","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"database:column_count","namespace":"database","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"database:column_name","namespace":"database","valueType":"TEXT","cardinality":"BAG"}, + {"key":"database:row_count","namespace":"database","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"database:table_name","namespace":"database","valueType":"TEXT","cardinality":"BAG"}, + {"key":"dc:contributor","namespace":"dc","valueType":"TEXT","cardinality":"BAG"}, + {"key":"dc:coverage","namespace":"dc","valueType":"TEXT","cardinality":"BAG"}, + {"key":"dc:creator","namespace":"dc","valueType":"TEXT","cardinality":"BAG"}, + {"key":"dc:date","namespace":"dc","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"dc:description","namespace":"dc","valueType":"TEXT","cardinality":"BAG"}, + {"key":"dc:format","namespace":"dc","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"dc:identifier","namespace":"dc","valueType":"TEXT","cardinality":"BAG"}, + {"key":"dc:language","namespace":"dc","valueType":"TEXT","cardinality":"BAG"}, + {"key":"dc:publisher","namespace":"dc","valueType":"TEXT","cardinality":"BAG"}, + {"key":"dc:relation","namespace":"dc","valueType":"TEXT","cardinality":"BAG"}, + {"key":"dc:rights","namespace":"dc","valueType":"TEXT","cardinality":"BAG"}, + {"key":"dc:source","namespace":"dc","valueType":"TEXT","cardinality":"BAG"}, + {"key":"dc:subject","namespace":"dc","valueType":"TEXT","cardinality":"BAG"}, + {"key":"dc:title","namespace":"dc","valueType":"TEXT","cardinality":"BAG"}, + {"key":"dc:type","namespace":"dc","valueType":"TEXT","cardinality":"BAG"}, + {"key":"dcterms:created","namespace":"dcterms","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"dcterms:modified","namespace":"dcterms","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"dwg:applicationComment","namespace":"dwg","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"dwg:applicationName","namespace":"dwg","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"dwg:applicationVersion","namespace":"dwg","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"dwg:productInfo","namespace":"dwg","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"embeddedResourceType","namespace":"","valueType":"CLOSED_CHOICE","cardinality":"SIMPLE"}, + {"key":"emf:iconOnly","namespace":"emf","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"emf:iconString","namespace":"emf","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"epub:rendition:layout","namespace":"epub","valueType":"CLOSED_CHOICE","cardinality":"SIMPLE"}, + {"key":"epub:version","namespace":"epub","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"exif:DateTimeOriginal","namespace":"exif","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"exif:ExposureTime","namespace":"exif","valueType":"RATIONAL","cardinality":"SIMPLE"}, + {"key":"exif:FNumber","namespace":"exif","valueType":"RATIONAL","cardinality":"SIMPLE"}, + {"key":"exif:Flash","namespace":"exif","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"exif:FocalLength","namespace":"exif","valueType":"RATIONAL","cardinality":"SIMPLE"}, + {"key":"exif:IsoSpeedRatings","namespace":"exif","valueType":"INTEGER","cardinality":"SEQ"}, + {"key":"exif:PageCount","namespace":"exif","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"extended-properties:AppVersion","namespace":"extended-properties","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"extended-properties:Application","namespace":"extended-properties","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"extended-properties:Company","namespace":"extended-properties","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"extended-properties:DocSecurity","namespace":"extended-properties","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"extended-properties:DocSecurityString","namespace":"extended-properties","valueType":"CLOSED_CHOICE","cardinality":"SIMPLE"}, + {"key":"extended-properties:HiddedSlides","namespace":"extended-properties","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"extended-properties:Manager","namespace":"extended-properties","valueType":"TEXT","cardinality":"BAG"}, + {"key":"extended-properties:Notes","namespace":"extended-properties","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"extended-properties:PresentationFormat","namespace":"extended-properties","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"extended-properties:Template","namespace":"extended-properties","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"extended-properties:TotalTime","namespace":"extended-properties","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"external-process:exit-value","namespace":"external-process","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"external-process:stderr","namespace":"external-process","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"external-process:stderr-length","namespace":"external-process","valueType":"REAL","cardinality":"SIMPLE"}, + {"key":"external-process:stderr-truncated","namespace":"external-process","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"external-process:stdout","namespace":"external-process","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"external-process:stdout-length","namespace":"external-process","valueType":"REAL","cardinality":"SIMPLE"}, + {"key":"external-process:stdout-truncated","namespace":"external-process","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"external-process:timeout","namespace":"external-process","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"file:mime","namespace":"file","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"font:name","namespace":"font","valueType":"TEXT","cardinality":"BAG"}, + {"key":"fs:accessed","namespace":"fs","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"fs:created","namespace":"fs","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"fs:modified","namespace":"fs","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"geo:alt","namespace":"geo","valueType":"REAL","cardinality":"SIMPLE"}, + {"key":"geo:lat","namespace":"geo","valueType":"REAL","cardinality":"SIMPLE"}, + {"key":"geo:long","namespace":"geo","valueType":"REAL","cardinality":"SIMPLE"}, + {"key":"geo:timestamp","namespace":"geo","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"hasSignature","namespace":"","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"html:scriptSrc","namespace":"html","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"imagereader:NumImages","namespace":"imagereader","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"iworks:build-version-history","namespace":"iworks","valueType":"TEXT","cardinality":"BAG"}, + {"key":"iworks:document-id","namespace":"iworks","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"machine:architectureBits","namespace":"machine","valueType":"CLOSED_CHOICE","cardinality":"SIMPLE"}, + {"key":"machine:endian","namespace":"machine","valueType":"CLOSED_CHOICE","cardinality":"SIMPLE"}, + {"key":"machine:machineType","namespace":"machine","valueType":"CLOSED_CHOICE","cardinality":"SIMPLE"}, + {"key":"machine:platform","namespace":"machine","valueType":"CLOSED_CHOICE","cardinality":"SIMPLE"}, + {"key":"mapi:attach:content-id","namespace":"mapi","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"mapi:attach:content-location","namespace":"mapi","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"mapi:attach:display-name","namespace":"mapi","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"mapi:attach:extension","namespace":"mapi","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"mapi:attach:file-name","namespace":"mapi","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"mapi:attach:flags","namespace":"mapi","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"mapi:attach:hidden","namespace":"mapi","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"mapi:attach:language","namespace":"mapi","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"mapi:attach:long-file-name","namespace":"mapi","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"mapi:attach:long-path-name","namespace":"mapi","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"mapi:attach:mime","namespace":"mapi","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"mapi:body-types-processed","namespace":"mapi","valueType":"TEXT","cardinality":"BAG"}, + {"key":"mapi:client-submit-time","namespace":"mapi","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"mapi:conversation-index","namespace":"mapi","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"mapi:conversation-topic","namespace":"mapi","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"mapi:creation-time","namespace":"mapi","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"mapi:deferred-delivery-time","namespace":"mapi","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"mapi:deliver-time","namespace":"mapi","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"mapi:expiry-time","namespace":"mapi","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"mapi:from-representing-email","namespace":"mapi","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"mapi:from-representing-name","namespace":"mapi","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"mapi:importance","namespace":"mapi","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"mapi:in-reply-to-id","namespace":"mapi","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"mapi:internet-message-id","namespace":"mapi","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"mapi:internet-references","namespace":"mapi","valueType":"TEXT","cardinality":"BAG"}, + {"key":"mapi:is-flagged","namespace":"mapi","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"mapi:last-modification-time","namespace":"mapi","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"mapi:latest-delivery-time","namespace":"mapi","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"mapi:message-class","namespace":"mapi","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"mapi:message-class-raw","namespace":"mapi","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"mapi:message-delivery-time","namespace":"mapi","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"mapi:message-download-time","namespace":"mapi","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"mapi:msg-submission-accepted-at-time","namespace":"mapi","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"mapi:msg-submission-id","namespace":"mapi","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"mapi:original-delivery-time","namespace":"mapi","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"mapi:original-submit-time","namespace":"mapi","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"mapi:priority","namespace":"mapi","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"mapi:provider-submit-time","namespace":"mapi","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"mapi:receipt-time","namespace":"mapi","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"mapi:recipients-string","namespace":"mapi","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"mapi:reply-time","namespace":"mapi","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"mapi:report-time","namespace":"mapi","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"mapi:sent-by-server-type","namespace":"mapi","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"meta:author","namespace":"meta","valueType":"TEXT","cardinality":"BAG"}, + {"key":"meta:character-count","namespace":"meta","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"meta:character-count-with-spaces","namespace":"meta","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"meta:creation-date","namespace":"meta","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"meta:image-count","namespace":"meta","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"meta:initial-author","namespace":"meta","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"meta:keyword","namespace":"meta","valueType":"TEXT","cardinality":"BAG"}, + {"key":"meta:last-author","namespace":"meta","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"meta:line-count","namespace":"meta","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"meta:object-count","namespace":"meta","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"meta:page-count","namespace":"meta","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"meta:paragraph-count","namespace":"meta","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"meta:print-date","namespace":"meta","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"meta:save-date","namespace":"meta","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"meta:slide-count","namespace":"meta","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"meta:table-count","namespace":"meta","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"meta:word-count","namespace":"meta","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"msoffice:comment-person-display-name","namespace":"msoffice","valueType":"TEXT","cardinality":"BAG"}, + {"key":"msoffice:doc:has-attached-template","namespace":"msoffice","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"msoffice:doc:has-framesets","namespace":"msoffice","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"msoffice:doc:has-hidden-text","namespace":"msoffice","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"msoffice:doc:has-mail-merge","namespace":"msoffice","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"msoffice:doc:has-subdocuments","namespace":"msoffice","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"msoffice:embeddedStorageClassId","namespace":"msoffice","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"msoffice:excel:has-data-connections","namespace":"msoffice","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"msoffice:excel:has-dde-links","namespace":"msoffice","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"msoffice:excel:has-external-links","namespace":"msoffice","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"msoffice:excel:has-external-pivot-data","namespace":"msoffice","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"msoffice:excel:has-hidden-cols","namespace":"msoffice","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"msoffice:excel:has-hidden-rows","namespace":"msoffice","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"msoffice:excel:has-hidden-sheets","namespace":"msoffice","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"msoffice:excel:has-power-query","namespace":"msoffice","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"msoffice:excel:has-very-hidden-sheets","namespace":"msoffice","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"msoffice:excel:has-web-queries","namespace":"msoffice","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"msoffice:excel:hidden-sheet-names","namespace":"msoffice","valueType":"TEXT","cardinality":"BAG"}, + {"key":"msoffice:excel:protected-worksheet","namespace":"msoffice","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"msoffice:excel:sheet-number","namespace":"msoffice","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"msoffice:excel:sheet-numbers","namespace":"msoffice","valueType":"INTEGER","cardinality":"SEQ"}, + {"key":"msoffice:excel:very-hidden-sheet-names","namespace":"msoffice","valueType":"TEXT","cardinality":"BAG"}, + {"key":"msoffice:excel:workbook-codename","namespace":"msoffice","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"msoffice:has-comments","namespace":"msoffice","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"msoffice:has-external-chart-data","namespace":"msoffice","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"msoffice:has-external-ole-objects","namespace":"msoffice","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"msoffice:has-field-hyperlinks","namespace":"msoffice","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"msoffice:has-hover-hyperlinks","namespace":"msoffice","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"msoffice:has-linked-ole-objects","namespace":"msoffice","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"msoffice:has-track-changes","namespace":"msoffice","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"msoffice:has-vml-hyperlinks","namespace":"msoffice","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"msoffice:ocxName","namespace":"msoffice","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"msoffice:ppt:has-animations","namespace":"msoffice","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"msoffice:ppt:has-hidden-slides","namespace":"msoffice","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"msoffice:ppt:num-hidden-slides","namespace":"msoffice","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"msoffice:ppt:num-unlisted-slides","namespace":"msoffice","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"msoffice:ppt:unlisted-slide-names","namespace":"msoffice","valueType":"TEXT","cardinality":"BAG"}, + {"key":"msoffice:progID","namespace":"msoffice","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"pdf:PDFExtensionVersion","namespace":"pdf","valueType":"RATIONAL","cardinality":"SIMPLE"}, + {"key":"pdf:PDFVersion","namespace":"pdf","valueType":"RATIONAL","cardinality":"SIMPLE"}, + {"key":"pdf:Trapped","namespace":"pdf","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"pdf:actionTrigger","namespace":"pdf","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"pdf:actionTriggers","namespace":"pdf","valueType":"TEXT","cardinality":"BAG"}, + {"key":"pdf:actionTypes","namespace":"pdf","valueType":"TEXT","cardinality":"BAG"}, + {"key":"pdf:annotationSubtypes","namespace":"pdf","valueType":"TEXT","cardinality":"BAG"}, + {"key":"pdf:annotationTypes","namespace":"pdf","valueType":"TEXT","cardinality":"BAG"}, + {"key":"pdf:associatedFileRelationship","namespace":"pdf","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"pdf:charsPerPage","namespace":"pdf","valueType":"INTEGER","cardinality":"SEQ"}, + {"key":"pdf:containsDamagedFont","namespace":"pdf","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"pdf:containsNonEmbeddedFont","namespace":"pdf","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"pdf:docinfo:created","namespace":"pdf","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"pdf:docinfo:creator","namespace":"pdf","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"pdf:docinfo:creator_tool","namespace":"pdf","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"pdf:docinfo:keywords","namespace":"pdf","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"pdf:docinfo:modified","namespace":"pdf","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"pdf:docinfo:producer","namespace":"pdf","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"pdf:docinfo:subject","namespace":"pdf","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"pdf:docinfo:title","namespace":"pdf","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"pdf:docinfo:trapped","namespace":"pdf","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"pdf:embeddedFileAnnotationType","namespace":"pdf","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"pdf:embeddedFileDescription","namespace":"pdf","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"pdf:embeddedFileSubtype","namespace":"pdf","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"pdf:encrypted","namespace":"pdf","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"pdf:eofOffsets","namespace":"pdf","valueType":"REAL","cardinality":"SEQ"}, + {"key":"pdf:has3D","namespace":"pdf","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"pdf:hasAcroFormFields","namespace":"pdf","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"pdf:hasCollection","namespace":"pdf","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"pdf:hasMarkedContent","namespace":"pdf","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"pdf:hasSignatureFields","namespace":"pdf","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"pdf:hasXFA","namespace":"pdf","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"pdf:hasXMP","namespace":"pdf","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"pdf:illustrator:type","namespace":"pdf","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"pdf:incrementalUpdateCount","namespace":"pdf","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"pdf:incrementalUpdateNumber","namespace":"pdf","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"pdf:jsName","namespace":"pdf","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"pdf:num3DAnnotations","namespace":"pdf","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"pdf:ocrPageCount","namespace":"pdf","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"pdf:overallPercentageUnmappedUnicodeChars","namespace":"pdf","valueType":"REAL","cardinality":"SIMPLE"}, + {"key":"pdf:producer","namespace":"pdf","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"pdf:totalUnmappedUnicodeChars","namespace":"pdf","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"pdf:unmappedUnicodeCharsPerPage","namespace":"pdf","valueType":"INTEGER","cardinality":"SEQ"}, + {"key":"pdf:xmpLocation","namespace":"pdf","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"pdfa:PDFVersion","namespace":"pdfa","valueType":"RATIONAL","cardinality":"SIMPLE"}, + {"key":"pdfaid:conformance","namespace":"pdfaid","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"pdfaid:part","namespace":"pdfaid","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"pdfuaid:part","namespace":"pdfuaid","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"pdfvt:modified","namespace":"pdfvt","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"pdfvt:version","namespace":"pdfvt","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"pdfx:conformance","namespace":"pdfx","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"pdfx:version","namespace":"pdfx","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"pdfxid:version","namespace":"pdfxid","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"photoshop:AuthorsPosition","namespace":"photoshop","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"photoshop:CaptionWriter","namespace":"photoshop","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"photoshop:Category","namespace":"photoshop","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"photoshop:City","namespace":"photoshop","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"photoshop:ColorMode","namespace":"photoshop","valueType":"CLOSED_CHOICE","cardinality":"SIMPLE"}, + {"key":"photoshop:Country","namespace":"photoshop","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"photoshop:Credit","namespace":"photoshop","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"photoshop:DateCreated","namespace":"photoshop","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"photoshop:Headline","namespace":"photoshop","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"photoshop:ICCProfile","namespace":"photoshop","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"photoshop:Instructions","namespace":"photoshop","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"photoshop:Source","namespace":"photoshop","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"photoshop:State","namespace":"photoshop","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"photoshop:SupplementalCategories","namespace":"photoshop","valueType":"TEXT","cardinality":"BAG"}, + {"key":"photoshop:TransmissionReference","namespace":"photoshop","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"photoshop:Urgency","namespace":"photoshop","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"plus:CopyrightOwner","namespace":"plus","valueType":"TEXT","cardinality":"BAG"}, + {"key":"plus:CopyrightOwnerID","namespace":"plus","valueType":"TEXT","cardinality":"BAG"}, + {"key":"plus:CopyrightOwnerId","namespace":"plus","valueType":"TEXT","cardinality":"BAG"}, + {"key":"plus:CopyrightOwnerName","namespace":"plus","valueType":"TEXT","cardinality":"BAG"}, + {"key":"plus:ImageCreator","namespace":"plus","valueType":"TEXT","cardinality":"BAG"}, + {"key":"plus:ImageCreatorID","namespace":"plus","valueType":"TEXT","cardinality":"BAG"}, + {"key":"plus:ImageCreatorId","namespace":"plus","valueType":"TEXT","cardinality":"BAG"}, + {"key":"plus:ImageCreatorName","namespace":"plus","valueType":"TEXT","cardinality":"BAG"}, + {"key":"plus:ImageSupplier","namespace":"plus","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"plus:ImageSupplierID","namespace":"plus","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"plus:ImageSupplierId","namespace":"plus","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"plus:ImageSupplierImageID","namespace":"plus","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"plus:ImageSupplierName","namespace":"plus","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"plus:Licensor","namespace":"plus","valueType":"TEXT","cardinality":"BAG"}, + {"key":"plus:LicensorCity","namespace":"plus","valueType":"TEXT","cardinality":"BAG"}, + {"key":"plus:LicensorCountry","namespace":"plus","valueType":"TEXT","cardinality":"BAG"}, + {"key":"plus:LicensorEmail","namespace":"plus","valueType":"TEXT","cardinality":"BAG"}, + {"key":"plus:LicensorExtendedAddress","namespace":"plus","valueType":"TEXT","cardinality":"BAG"}, + {"key":"plus:LicensorID","namespace":"plus","valueType":"TEXT","cardinality":"BAG"}, + {"key":"plus:LicensorId","namespace":"plus","valueType":"TEXT","cardinality":"BAG"}, + {"key":"plus:LicensorName","namespace":"plus","valueType":"TEXT","cardinality":"BAG"}, + {"key":"plus:LicensorPostalCode","namespace":"plus","valueType":"TEXT","cardinality":"BAG"}, + {"key":"plus:LicensorRegion","namespace":"plus","valueType":"TEXT","cardinality":"BAG"}, + {"key":"plus:LicensorStreetAddress","namespace":"plus","valueType":"TEXT","cardinality":"BAG"}, + {"key":"plus:LicensorTelephone1","namespace":"plus","valueType":"TEXT","cardinality":"BAG"}, + {"key":"plus:LicensorTelephone2","namespace":"plus","valueType":"TEXT","cardinality":"BAG"}, + {"key":"plus:LicensorURL","namespace":"plus","valueType":"TEXT","cardinality":"BAG"}, + {"key":"plus:MinorModelAgeDisclosure","namespace":"plus","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"plus:ModelReleaseID","namespace":"plus","valueType":"TEXT","cardinality":"BAG"}, + {"key":"plus:ModelReleaseStatus","namespace":"plus","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"plus:PropertyReleaseID","namespace":"plus","valueType":"TEXT","cardinality":"BAG"}, + {"key":"plus:PropertyReleaseStatus","namespace":"plus","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"plus:Version","namespace":"plus","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"pst:discriptorNodeId","namespace":"pst","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"pst:isValid","namespace":"pst","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"quicktime:still-image-time","namespace":"quicktime","valueType":"REAL","cardinality":"SIMPLE"}, + {"key":"rendering:Rendered-By","namespace":"rendering","valueType":"TEXT","cardinality":"BAG"}, + {"key":"rendering:pdfbox-image-writing-ms","namespace":"rendering","valueType":"REAL","cardinality":"SIMPLE"}, + {"key":"rendering:pdfbox-rendering-ms","namespace":"rendering","valueType":"REAL","cardinality":"SIMPLE"}, + {"key":"rendering:rendering-time-ms","namespace":"rendering","valueType":"REAL","cardinality":"SIMPLE"}, + {"key":"rtf_meta:contains_encapsulated_html","namespace":"rtf_meta","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"rtf_meta:emb_app_version","namespace":"rtf_meta","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"rtf_meta:emb_class","namespace":"rtf_meta","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"rtf_meta:emb_item","namespace":"rtf_meta","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"rtf_meta:emb_topic","namespace":"rtf_meta","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"rtf_meta:thumbnail","namespace":"rtf_meta","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"signature:contact-info","namespace":"signature","valueType":"TEXT","cardinality":"BAG"}, + {"key":"signature:date","namespace":"signature","valueType":"DATE","cardinality":"BAG"}, + {"key":"signature:filter","namespace":"signature","valueType":"TEXT","cardinality":"BAG"}, + {"key":"signature:location","namespace":"signature","valueType":"TEXT","cardinality":"BAG"}, + {"key":"signature:name","namespace":"signature","valueType":"TEXT","cardinality":"BAG"}, + {"key":"signature:reason","namespace":"signature","valueType":"TEXT","cardinality":"BAG"}, + {"key":"tess:image_magick_processed","namespace":"tess","valueType":"BOOLEAN","cardinality":"SEQ"}, + {"key":"tess:orientation","namespace":"tess","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"tess:orientation_confidence","namespace":"tess","valueType":"REAL","cardinality":"SIMPLE"}, + {"key":"tess:page_number","namespace":"tess","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"tess:rotate","namespace":"tess","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"tess:rotation","namespace":"tess","valueType":"REAL","cardinality":"SEQ"}, + {"key":"tess:script","namespace":"tess","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"tess:script_confidence","namespace":"tess","valueType":"REAL","cardinality":"SIMPLE"}, + {"key":"tiff:BitsPerSample","namespace":"tiff","valueType":"INTEGER","cardinality":"SEQ"}, + {"key":"tiff:ImageLength","namespace":"tiff","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"tiff:ImageWidth","namespace":"tiff","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"tiff:Make","namespace":"tiff","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"tiff:Model","namespace":"tiff","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"tiff:Orientation","namespace":"tiff","valueType":"CLOSED_CHOICE","cardinality":"SIMPLE"}, + {"key":"tiff:ResolutionUnit","namespace":"tiff","valueType":"CLOSED_CHOICE","cardinality":"SIMPLE"}, + {"key":"tiff:SamplesPerPixel","namespace":"tiff","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"tiff:Software","namespace":"tiff","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"tiff:XResolution","namespace":"tiff","valueType":"RATIONAL","cardinality":"SIMPLE"}, + {"key":"tiff:YResolution","namespace":"tiff","valueType":"RATIONAL","cardinality":"SIMPLE"}, + {"key":"tika_pg:page_number","namespace":"tika_pg","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"tika_pg:page_numbers","namespace":"tika_pg","valueType":"INTEGER","cardinality":"SEQ"}, + {"key":"tika_pg:page_rotation","namespace":"tika_pg","valueType":"RATIONAL","cardinality":"SIMPLE"}, + {"key":"w:Comments","namespace":"w","valueType":"TEXT","cardinality":"BAG"}, + {"key":"warc:WARC-Record-ID","namespace":"warc","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"warc:payload-content-type","namespace":"warc","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"warc:record-content-type","namespace":"warc","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"warc:warning","namespace":"warc","valueType":"TEXT","cardinality":"BAG"}, + {"key":"wordperfect:Build","namespace":"wordperfect","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"wordperfect:Encrypted","namespace":"wordperfect","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"wordperfect:FileId","namespace":"wordperfect","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"wordperfect:FileSize","namespace":"wordperfect","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"wordperfect:FileType","namespace":"wordperfect","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"wordperfect:Id","namespace":"wordperfect","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"wordperfect:LowestVersion","namespace":"wordperfect","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"wordperfect:MajorVersion","namespace":"wordperfect","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"wordperfect:MinorVersion","namespace":"wordperfect","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"wordperfect:ProductType","namespace":"wordperfect","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"wordperfect:Version","namespace":"wordperfect","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"xmlprofiler:entity_local_names","namespace":"xmlprofiler","valueType":"TEXT","cardinality":"BAG"}, + {"key":"xmlprofiler:entity_uris","namespace":"xmlprofiler","valueType":"TEXT","cardinality":"BAG"}, + {"key":"xmlprofiler:root_entity","namespace":"xmlprofiler","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmp:About","namespace":"xmp","valueType":"TEXT","cardinality":"BAG"}, + {"key":"xmp:Advisory","namespace":"xmp","valueType":"TEXT","cardinality":"BAG"}, + {"key":"xmp:CreateDate","namespace":"xmp","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"xmp:CreatorTool","namespace":"xmp","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmp:Identifier","namespace":"xmp","valueType":"TEXT","cardinality":"BAG"}, + {"key":"xmp:Label","namespace":"xmp","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmp:MetadataDate","namespace":"xmp","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"xmp:ModifyDate","namespace":"xmp","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"xmp:NickName","namespace":"xmp","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmp:Rating","namespace":"xmp","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"xmp:Title","namespace":"xmp","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmp:dc:contributor","namespace":"xmp","valueType":"TEXT","cardinality":"BAG"}, + {"key":"xmp:dc:coverage","namespace":"xmp","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmp:dc:creator","namespace":"xmp","valueType":"TEXT","cardinality":"BAG"}, + {"key":"xmp:dc:date","namespace":"xmp","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"xmp:dc:description","namespace":"xmp","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmp:dc:format","namespace":"xmp","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmp:dc:identifier","namespace":"xmp","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmp:dc:language","namespace":"xmp","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmp:dc:publisher","namespace":"xmp","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmp:dc:relation","namespace":"xmp","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmp:dc:rights","namespace":"xmp","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmp:dc:source","namespace":"xmp","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmp:dc:subject","namespace":"xmp","valueType":"TEXT","cardinality":"BAG"}, + {"key":"xmp:dc:title","namespace":"xmp","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmp:dc:type","namespace":"xmp","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmp:dcterms:created","namespace":"xmp","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"xmp:dcterms:modified","namespace":"xmp","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"xmp:exif:DateTimeOriginal","namespace":"xmp","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"xmp:exif:IsoSpeedRatings","namespace":"xmp","valueType":"INTEGER","cardinality":"SEQ"}, + {"key":"xmp:exif:PixelXDimension","namespace":"xmp","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"xmp:exif:PixelYDimension","namespace":"xmp","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"xmp:pdf:About","namespace":"xmp","valueType":"TEXT","cardinality":"BAG"}, + {"key":"xmp:pdf:Keywords","namespace":"xmp","valueType":"TEXT","cardinality":"BAG"}, + {"key":"xmp:pdf:PDFVersion","namespace":"xmp","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmp:pdf:Producer","namespace":"xmp","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmp:tiff:BitsPerSample","namespace":"xmp","valueType":"INTEGER","cardinality":"SEQ"}, + {"key":"xmp:tiff:ImageLength","namespace":"xmp","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"xmp:tiff:ImageWidth","namespace":"xmp","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"xmp:tiff:Make","namespace":"xmp","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmp:tiff:Model","namespace":"xmp","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmp:tiff:Orientation","namespace":"xmp","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmp:tiff:SamplesPerPixel","namespace":"xmp","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"xmp:tiff:Software","namespace":"xmp","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmpDM:absPeakAudioFilePath","namespace":"xmpDM","valueType":"URI","cardinality":"SIMPLE"}, + {"key":"xmpDM:album","namespace":"xmpDM","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmpDM:albumArtist","namespace":"xmpDM","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmpDM:altTapeName","namespace":"xmpDM","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmpDM:artist","namespace":"xmpDM","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmpDM:audioChannelType","namespace":"xmpDM","valueType":"CLOSED_CHOICE","cardinality":"SIMPLE"}, + {"key":"xmpDM:audioCompressor","namespace":"xmpDM","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmpDM:audioModDate","namespace":"xmpDM","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"xmpDM:audioSampleRate","namespace":"xmpDM","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"xmpDM:audioSampleType","namespace":"xmpDM","valueType":"CLOSED_CHOICE","cardinality":"SIMPLE"}, + {"key":"xmpDM:compilation","namespace":"xmpDM","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"xmpDM:composer","namespace":"xmpDM","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmpDM:copyright","namespace":"xmpDM","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmpDM:discNumber","namespace":"xmpDM","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"xmpDM:duration","namespace":"xmpDM","valueType":"REAL","cardinality":"SIMPLE"}, + {"key":"xmpDM:engineer","namespace":"xmpDM","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmpDM:fileDataRate","namespace":"xmpDM","valueType":"RATIONAL","cardinality":"SIMPLE"}, + {"key":"xmpDM:genre","namespace":"xmpDM","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmpDM:instrument","namespace":"xmpDM","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmpDM:key","namespace":"xmpDM","valueType":"CLOSED_CHOICE","cardinality":"SIMPLE"}, + {"key":"xmpDM:logComment","namespace":"xmpDM","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmpDM:loop","namespace":"xmpDM","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"xmpDM:metadataModDate","namespace":"xmpDM","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"xmpDM:numberOfBeats","namespace":"xmpDM","valueType":"REAL","cardinality":"SIMPLE"}, + {"key":"xmpDM:pullDown","namespace":"xmpDM","valueType":"CLOSED_CHOICE","cardinality":"SIMPLE"}, + {"key":"xmpDM:relativePeakAudioFilePath","namespace":"xmpDM","valueType":"URI","cardinality":"SIMPLE"}, + {"key":"xmpDM:releaseDate","namespace":"xmpDM","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"xmpDM:scaleType","namespace":"xmpDM","valueType":"CLOSED_CHOICE","cardinality":"SIMPLE"}, + {"key":"xmpDM:scene","namespace":"xmpDM","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmpDM:shotDate","namespace":"xmpDM","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"xmpDM:shotLocation","namespace":"xmpDM","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmpDM:shotName","namespace":"xmpDM","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmpDM:speakerPlacement","namespace":"xmpDM","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmpDM:stretchMode","namespace":"xmpDM","valueType":"CLOSED_CHOICE","cardinality":"SIMPLE"}, + {"key":"xmpDM:tapeName","namespace":"xmpDM","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmpDM:tempo","namespace":"xmpDM","valueType":"REAL","cardinality":"SIMPLE"}, + {"key":"xmpDM:timeSignature","namespace":"xmpDM","valueType":"CLOSED_CHOICE","cardinality":"SIMPLE"}, + {"key":"xmpDM:trackNumber","namespace":"xmpDM","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"xmpDM:videoAlphaMode","namespace":"xmpDM","valueType":"CLOSED_CHOICE","cardinality":"SIMPLE"}, + {"key":"xmpDM:videoAlphaUnityIsTransparent","namespace":"xmpDM","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"xmpDM:videoColorSpace","namespace":"xmpDM","valueType":"CLOSED_CHOICE","cardinality":"SIMPLE"}, + {"key":"xmpDM:videoCompressor","namespace":"xmpDM","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmpDM:videoFieldOrder","namespace":"xmpDM","valueType":"CLOSED_CHOICE","cardinality":"SIMPLE"}, + {"key":"xmpDM:videoFrameRate","namespace":"xmpDM","valueType":"OPEN_CHOICE","cardinality":"SIMPLE"}, + {"key":"xmpDM:videoModDate","namespace":"xmpDM","valueType":"DATE","cardinality":"SIMPLE"}, + {"key":"xmpDM:videoPixelAspectRatio","namespace":"xmpDM","valueType":"RATIONAL","cardinality":"SIMPLE"}, + {"key":"xmpDM:videoPixelDepth","namespace":"xmpDM","valueType":"CLOSED_CHOICE","cardinality":"SIMPLE"}, + {"key":"xmpMM:DerivedFrom:DocumentID","namespace":"xmpMM","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmpMM:DerivedFrom:InstanceID","namespace":"xmpMM","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmpMM:DerivedFrom:OriginalDocumentID","namespace":"xmpMM","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmpMM:DerivedFrom:RenditionClass","namespace":"xmpMM","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmpMM:DocumentID","namespace":"xmpMM","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmpMM:History:Action","namespace":"xmpMM","valueType":"TEXT","cardinality":"BAG"}, + {"key":"xmpMM:History:Changed","namespace":"xmpMM","valueType":"TEXT","cardinality":"BAG"}, + {"key":"xmpMM:History:InstanceID","namespace":"xmpMM","valueType":"TEXT","cardinality":"BAG"}, + {"key":"xmpMM:History:Parameters","namespace":"xmpMM","valueType":"TEXT","cardinality":"BAG"}, + {"key":"xmpMM:History:SoftwareAgent","namespace":"xmpMM","valueType":"TEXT","cardinality":"BAG"}, + {"key":"xmpMM:History:When","namespace":"xmpMM","valueType":"TEXT","cardinality":"BAG"}, + {"key":"xmpMM:InstanceID","namespace":"xmpMM","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmpMM:OriginalDocumentID","namespace":"xmpMM","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmpMM:RenditionClass","namespace":"xmpMM","valueType":"OPEN_CHOICE","cardinality":"SIMPLE"}, + {"key":"xmpMM:RenditionParams","namespace":"xmpMM","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmpRights:Certificate","namespace":"xmpRights","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmpRights:Marked","namespace":"xmpRights","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"xmpRights:Owner","namespace":"xmpRights","valueType":"TEXT","cardinality":"BAG"}, + {"key":"xmpRights:UsageTerms","namespace":"xmpRights","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmpRights:WebStatement","namespace":"xmpRights","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"xmpTPg:NPages","namespace":"xmpTPg","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"xmpidq:Scheme","namespace":"xmpidq","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"zip:centralDirectoryOnlyEntries","namespace":"zip","valueType":"TEXT","cardinality":"BAG"}, + {"key":"zip:comment","namespace":"zip","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"zip:compressedSize","namespace":"zip","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"zip:compressionMethod","namespace":"zip","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"zip:crc32","namespace":"zip","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"zip:detectorDataDescriptorRequired","namespace":"zip","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"zip:detectorZipFileOpened","namespace":"zip","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"zip:duplicateEntryNames","namespace":"zip","valueType":"TEXT","cardinality":"BAG"}, + {"key":"zip:encrypted","namespace":"zip","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"zip:integrityCheckResult","namespace":"zip","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"zip:localHeaderOnlyEntries","namespace":"zip","valueType":"TEXT","cardinality":"BAG"}, + {"key":"zip:platform","namespace":"zip","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"zip:salvaged","namespace":"zip","valueType":"BOOLEAN","cardinality":"SIMPLE"}, + {"key":"zip:uncompressedSize","namespace":"zip","valueType":"TEXT","cardinality":"SIMPLE"}, + {"key":"zip:unixMode","namespace":"zip","valueType":"INTEGER","cardinality":"SIMPLE"}, + {"key":"zip:versionMadeBy","namespace":"zip","valueType":"INTEGER","cardinality":"SIMPLE"} +] diff --git a/tika-metadata-schema/src/main/resources/org/apache/tika/metadata/metadata-open-namespaces.json b/tika-metadata-schema/src/main/resources/org/apache/tika/metadata/metadata-open-namespaces.json new file mode 100644 index 0000000000..40eae02925 --- /dev/null +++ b/tika-metadata-schema/src/main/resources/org/apache/tika/metadata/metadata-open-namespaces.json @@ -0,0 +1,38 @@ +{ + "_note": "Open / passthrough namespaces and templates. These keys are minted at RUNTIME (their names come from the document, an external tool, or a per-item qualifier), so they are NOT registered Property constants and do NOT appear in metadata-keys.json. This file is CURATED (hand-maintained, reviewed), not generated, and may not be exhaustive; the closed-namespace lint is the intended completeness backstop. provenance: 'file' = key name taken from document content; 'tool' = key name [...] + + "open-namespaces": [ + {"prefix": "html:", "provenance": "file", "note": "scraped HTML <meta>/http-equiv/OpenGraph names"}, + {"prefix": "custom:", "provenance": "file", "note": "OOXML/OLE2/ODF user-defined document properties"}, + {"prefix": "pdf:docinfo:custom:", "provenance": "file", "note": "PDF Info-dictionary custom keys"}, + {"prefix": "Message:Raw-Header:", "provenance": "file", "note": "RFC822 / Outlook raw email header names"}, + {"prefix": "MboxParser-", "provenance": "file", "note": "mbox header names"}, + {"prefix": "warc:", "provenance": "file", "note": "WARC record + HTTP response header names (also warc:http:)"}, + {"prefix": "mapi:property:", "provenance": "file", "note": "MSG MAPI named properties"}, + {"prefix": "MDB_PROP:", "provenance": "file", "note": "MS Access document properties (also MDB_SUMMARY_PROP:, MDB_USER_PROP:)"}, + {"prefix": "img:", "provenance": "file", "note": "ImageIO/drewnoakes unrecognized image tag names (also ICC:)"}, + {"prefix": "dwg-custom:", "provenance": "file", "note": "DWG custom properties (DWGParser)"}, + {"prefix": "dwg:", "provenance": "file", "note": "DWGRead JSON field passthrough"}, + {"prefix": "iworks:", "provenance": "file", "note": "iWork '13 package plist keys"}, + {"prefix": "numbers:", "provenance": "file", "note": "iWork Numbers element names"}, + {"prefix": "flv:", "provenance": "file", "note": "FLV onMetaData ECMA-array keys"}, + {"prefix": "vorbis:", "provenance": "file", "note": "Vorbis/FLAC/Opus/Speex comment field names"}, + {"prefix": "streams-", "provenance": "file", "note": "Ogg per-stream metadata"}, + {"prefix": "grib:", "provenance": "file", "note": "GRIB global attribute names"}, + {"prefix": "netcdf:", "provenance": "file", "note": "NetCDF global attribute names"}, + {"prefix": "envi.", "provenance": "file", "note": "ENVI header field names"}, + {"prefix": "rtf_pict:", "provenance": "file", "note": "RTF embedded-object \\sn/\\sv keys"}, + {"prefix": "grobid:header_", "provenance": "tool", "note": "GROBID TEI header fields"}, + {"prefix": "NER_", "provenance": "tool", "note": "named-entity types (NamedEntityParser)"}, + {"prefix": "ctakes:", "provenance": "tool", "note": "cTAKES/UIMA type names"} + ], + + "templates": [ + { + "pattern": "<base-key>:<BCP-47-language-tag>", + "provenance": "file", + "note": "XMP rdf:Alt language variants, e.g. dc:title:x-default, dc:title:fr. The unqualified base key holds the x-default value; to type a variant, resolve to its base key. NOTE: the language qualifier reuses ':' so 'dc:title:fr' is only disambiguated from a sub-namespace by this rule.", + "example-base-keys": ["dc:title", "dc:description", "dc:rights", "xmpRights:UsageTerms"] + } + ] +} diff --git a/tika-metadata-schema/src/test/java/org/apache/tika/metadata/schema/MetadataSchemaTest.java b/tika-metadata-schema/src/test/java/org/apache/tika/metadata/schema/MetadataSchemaTest.java new file mode 100644 index 0000000000..eff7626df5 --- /dev/null +++ b/tika-metadata-schema/src/test/java/org/apache/tika/metadata/schema/MetadataSchemaTest.java @@ -0,0 +1,48 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.tika.metadata.schema; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import java.io.InputStream; +import java.nio.charset.StandardCharsets; + +import org.junit.jupiter.api.Test; + +/** + * The CI gate: regenerate the registry from the live {@link org.apache.tika.metadata.Property} + * declarations and assert it matches the committed {@code metadata-keys.json}. If a Property is + * added/changed/renamed without regenerating, this fails — the registry cannot silently drift. + */ +public class MetadataSchemaTest { + + private static final String RESOURCE = "/org/apache/tika/metadata/metadata-keys.json"; + + @Test + public void committedRegistryMatchesDeclarations() throws Exception { + String committed; + try (InputStream in = MetadataSchemaTest.class.getResourceAsStream(RESOURCE)) { + assertNotNull(in, "committed " + RESOURCE + " is missing"); + committed = new String(in.readAllBytes(), StandardCharsets.UTF_8); + } + String regenerated = SchemaGenerator.generate(); + assertEquals(committed, regenerated, + "metadata-keys.json is stale. Run `mvn -pl tika-metadata-schema exec:java` " + + "(or SchemaGenerator.main) and commit the regenerated file."); + } +}
