1. Go to this page and download the library: Download xterr/php-espd library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
xterr / php-espd example snippets
use Xterr\UBL\Xml\XmlDeserializer;
use Xterr\Espd\Doc\QualificationApplicationRequest;
$xml = file_get_contents('espd-request.xml');
$deserializer = new XmlDeserializer();
$request = $deserializer->deserialize($xml, QualificationApplicationRequest::class);
echo $request->getId()->getValue(); // "ESPDREQ-..."
echo $request->getProfileExecutionID()->getValue(); // "ESPD-EDMv4.1.0"
echo count($request->getTenderingCriterions()); // 62
use Xterr\UBL\Xml\XmlSerializer;
$serializer = new XmlSerializer();
$xml = $serializer->serialize($request);
use Xterr\Espd\Validation\EspdValidator;
$validator = EspdValidator::create();
$result = $validator->validate($request);
if (!$result->isValid()) {
foreach ($result->getFailures() as $violation) {
echo $violation . PHP_EOL;
// [fatal] BR-OTH-04-01: The element '/cbc:UBLVersionID' is mandatory. (at /*)
}
}
// Filter by severity
$result->getFatals(); // Severity::Fatal only
$result->getErrors(); // Severity::Error only
$result->getWarnings(); // Severity::Warning only
$result->getFailures(); // Fatal + Error combined
use Xterr\Espd\Validation\DocumentType;
$xml = file_get_contents('espd-response.xml');
$result = $validator->validateXml($xml, DocumentType::Response);
use Xterr\Espd\Codelist\CriterionCode;
use Xterr\Espd\Codelist\CriterionElement;
use Xterr\Espd\Codelist\ResponseData;
$criterion = $request->getTenderingCriterions()[0];
// CriterionCode enum — not a raw string
$typeCode = $criterion->getCriterionTypeCode(); // CriterionCode::CRIME_ORG
echo $typeCode->value; // "crime-org"
$group = $criterion->getTenderingCriterionPropertyGroups()[0];
$prop = $group->getTenderingCriterionProperties()[0];
$prop->getTypeCode(); // CriterionElement::QUESTION
$prop->getValueDataTypeCode(); // ResponseData::INDICATOR
use Xterr\Espd\Codelist\CriterionCode;
use Xterr\Espd\Codelist\EspdPart;
$code = CriterionCode::CORRUPTION;
$code->getPart(); // EspdPart::III
$code->getPart()->label(); // "Exclusion grounds"
$code->getSection(); // "A" — Criminal convictions (Directive 2014/24/EU Art. 57(1))
// Works for all codes — v4 short-form and v2 legacy
CriterionCode::PROF_REGIST->getPart(); // EspdPart::IV (Selection criteria)
CriterionCode::PROF_REGIST->getSection(); // "A" (Suitability)
CriterionCode::SME->getPart(); // EspdPart::II (Economic operator info)
CriterionCode::SME->getSection(); // "A"
CriterionCode::STAFF_RED->getPart(); // EspdPart::V (Reduction of candidates)
// V2 codes inherit Part/Section from their v4 equivalent
CriterionCode::V2_CRITERION_EXCLUSION_CONVICTIONS_CORRUPTION->getPart(); // EspdPart::III
CriterionCode::V2_CRITERION_EXCLUSION_CONVICTIONS_CORRUPTION->getSection(); // "A"
// The property type is: BooleanGUIControl|FinancialRatio|OccupationCode|null
$expectedCode = $prop->getExpectedCode();
if ($expectedCode instanceof \Xterr\Espd\Codelist\BooleanGUIControl) {
// e.g. BooleanGUIControl::CHECKBOX_TRUE
}
$taxonomyXml = file_get_contents('vendor/xterr/php-espd/resources/criterion/v4.1.0/ESPD-criterion.xml');
$taxonomy = $deserializer->deserialize($taxonomyXml, QualificationApplicationRequest::class);
// 62 criteria with their property groups, questions, and response types
foreach ($taxonomy->getTenderingCriterions() as $criterion) {
echo $criterion->getCriterionTypeCode()->value . "\n";
}
use Xterr\Espd\Validation\EspdValidator;
$validator = EspdValidator::create();
// Version is auto-detected from the document's ProfileExecutionID
$result = $validator->validate($request);
$result = $validator->validateXml($xml, DocumentType::Request);