use of org.apache.xmpbox.schema.XMPSchema in project pdfbox by apache.
the class RDFAboutAttributeConcordanceValidation method validateRDFAboutAttributes.
/**
* @param metadata the XMP metadata.
* @throws DifferentRDFAboutException
* @throws ValidationException
*/
public void validateRDFAboutAttributes(XMPMetadata metadata) throws ValidationException, DifferentRDFAboutException {
List<XMPSchema> schemas = metadata.getAllSchemas();
if (schemas.isEmpty()) {
throw new ValidationException("Schemas not found in the given metadata representation");
}
String about = schemas.get(0).getAboutValue();
// rdf:description must have an rdf:about attribute
for (XMPSchema xmpSchema : schemas) {
// each rdf:Description must have the same rdf:about (or an empty one)
String schemaAboutValue = xmpSchema.getAboutValue();
if (!("".equals(schemaAboutValue) || "".equals(about) || about.equals(schemaAboutValue))) {
throw new DifferentRDFAboutException();
}
if ("".equals(about)) {
about = schemaAboutValue;
}
}
}
use of org.apache.xmpbox.schema.XMPSchema in project pdfbox by apache.
the class TestValidatePermitedMetadata method checkExistence.
@Test
public void checkExistence() throws Exception {
// ensure schema exists
XMPMetadata xmpmd = new XMPMetadata();
TypeMapping mapping = new TypeMapping(xmpmd);
XMPSchemaFactory factory = mapping.getSchemaFactory(namespace);
assertNotNull("Schema not existing: " + namespace, factory);
// ensure preferred is as expected
XMPSchema schema = factory.createXMPSchema(xmpmd, "aa");
assertEquals(preferred, schema.getPreferedPrefix());
// ensure field is defined
boolean found = false;
Class<?> clz = schema.getClass();
for (Field dfield : clz.getDeclaredFields()) {
PropertyType ptype = dfield.getAnnotation(PropertyType.class);
if (ptype != null) {
// is a field definition
if (String.class.equals(dfield.getType())) {
String value = (String) dfield.get(clz);
if (fieldname.equals(value)) {
// found the field defining
found = true;
break;
}
} else {
// All field declaration are string
throw new IllegalArgumentException("Should be a string : " + dfield.getName());
}
}
}
String msg = String.format("Did not find field definition for '%s' in %s (%s)", fieldname, clz.getSimpleName(), namespace);
assertTrue(msg, found);
}
use of org.apache.xmpbox.schema.XMPSchema in project pdfbox by apache.
the class DeserializationTest method testRdfAboutFound.
@Test
public void testRdfAboutFound() throws Exception {
InputStream fis = DomXmpParser.class.getResourceAsStream("/validxmp/emptyli.xml");
DomXmpParser xdb = new DomXmpParser();
XMPMetadata meta = xdb.parse(fis);
List<XMPSchema> schemas = meta.getAllSchemas();
for (XMPSchema xmpSchema : schemas) {
Assert.assertNotNull(xmpSchema.getAboutAttribute());
}
}
use of org.apache.xmpbox.schema.XMPSchema in project pdfbox by apache.
the class DomXmpParser method parseDescriptionRootAttr.
private void parseDescriptionRootAttr(XMPMetadata xmp, Element description, Attr attr, TypeMapping tm) throws XmpSchemaException, XmpParsingException {
String namespace = attr.getNamespaceURI();
XMPSchema schema = xmp.getSchema(namespace);
if (schema == null && tm.getSchemaFactory(namespace) != null) {
schema = tm.getSchemaFactory(namespace).createXMPSchema(xmp, attr.getPrefix());
loadAttributes(schema, description);
}
// Only process when a schema was successfully found
if (schema != null) {
ComplexPropertyContainer container = schema.getContainer();
PropertyType type = checkPropertyDefinition(xmp, new QName(attr.getNamespaceURI(), attr.getLocalName()));
// Default to text if no type is found
if (type == null) {
type = TypeMapping.createPropertyType(Types.Text, Cardinality.Simple);
}
try {
AbstractSimpleProperty sp = tm.instanciateSimpleProperty(namespace, schema.getPrefix(), attr.getLocalName(), attr.getValue(), type.type());
container.addProperty(sp);
} catch (IllegalArgumentException e) {
throw new XmpParsingException(ErrorType.Format, e.getMessage() + " in " + schema.getPrefix() + ":" + attr.getLocalName(), e);
}
}
}
use of org.apache.xmpbox.schema.XMPSchema in project pdfbox by apache.
the class DomXmpParser method parseChildrenAsProperties.
private void parseChildrenAsProperties(XMPMetadata xmp, List<Element> properties, TypeMapping tm, Element description) throws XmpParsingException, XmpSchemaException {
// parse children elements as properties
for (Element property : properties) {
String namespace = property.getNamespaceURI();
PropertyType type = checkPropertyDefinition(xmp, DomHelper.getQName(property));
// create the container
if (!tm.isDefinedSchema(namespace)) {
throw new XmpParsingException(ErrorType.NoSchema, "This namespace is not a schema or a structured type : " + namespace);
}
XMPSchema schema = xmp.getSchema(namespace);
if (schema == null) {
schema = tm.getSchemaFactory(namespace).createXMPSchema(xmp, property.getPrefix());
loadAttributes(schema, description);
}
ComplexPropertyContainer container = schema.getContainer();
// create property
createProperty(xmp, property, type, container);
}
}
Aggregations