Commit f954e795 authored by Mark Canterbury's avatar Mark Canterbury
Browse files

Adding mechanism for embedding EC XML plus examples

parent 02476e40
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -2,11 +2,11 @@
<HI1Message xmlns="http://uri.etsi.org/03120/common/2019/10/Core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:common="http://uri.etsi.org/03120/common/2016/02/Common" xmlns:task="http://uri.etsi.org/03120/common/2020/09/Task" xmlns:auth="http://uri.etsi.org/03120/common/2020/09/Authorisation" xmlns:doc="http://uri.etsi.org/03120/common/2020/09/Document">
    <!--
   
    Example rendering of EPOC into TS 103 120
    Example rendering of EPOC into TS 103 120 - Mapping everything into native TS 103 120
    Form 1 (Production)
    From IssuingAuthority in country XX (technical ID = IssuingAuthorityID)
    To ServiceProvider in country YY (technical ID = ServiceProviderID)
    The request is for data on an MSISDN (cover multiple IDs / date ranges in a separate example)
    The request is for data on an email address (cover multiple IDs / date ranges in a separate example)
    In this case, the EPOC was validated by a ValidatingAuthority (technical ID = ValidatingAuthorityID)
    This example is not an emergency (cover that in a separate example)
    This example is not related to any previous EPOC/EPOC-PR (section D - cover that in a separate example)
@@ -243,6 +243,8 @@
                <ActionRequest>
                    <ActionIdentifier>2</ActionIdentifier>
                    <CREATE>
                        <!-- This DocumentObject represents the "source" PDF with the original form in it -->
                        <!-- together with some structured metadata that has been mapped out -->
                        <HI1Object xsi:type="doc:DocumentObject">
                            <ObjectIdentifier>83e9d910-e36a-4e18-8128-0dd1c38b8ffd</ObjectIdentifier>
                            <CountryCode>XX</CountryCode>                           <!-- Mapped from Section A - Issuing State -->
@@ -275,7 +277,8 @@
                                <!-- Since those are only sent to an EnforcingAuthority, we'll leave that to another example -->
                            </doc:DocumentProperties>
                            <doc:DocumentBody>
                                <!-- Obviously this isn't actually a PDF -->
                                <!-- This would contain the actual PDF with the form in it -->
                                <!-- (Obviously this isn't actually a PDF) -->
                                <doc:Contents>VGhlIHNpZ25lZCBQREYgd291bGQgZ28gaGVyZQ==</doc:Contents>
                                <doc:ContentType>application/pdf</doc:ContentType>
                                <doc:Checksum>checksum value</doc:Checksum>
+254 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="UTF-8"?>
<HI1Message xmlns="http://uri.etsi.org/03120/common/2019/10/Core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:common="http://uri.etsi.org/03120/common/2016/02/Common" xmlns:task="http://uri.etsi.org/03120/common/2020/09/Task" xmlns:auth="http://uri.etsi.org/03120/common/2020/09/Authorisation" xmlns:doc="http://uri.etsi.org/03120/common/2020/09/Document" xmlns:etsiepoc="http://uri.etsi.org/03120/common/2016/02/EPOC" xmlns:epoc="http://data.europa.eu/edm/1/ns/epoc"  xmlns:epocform1="http://data.europa.eu/edm/1/ns/forms/EPOC-FORM-1#">
    <!--
   
    Example rendering of EPOC into TS 103 120 - Mapping only fields which are not specific to EPOC-only
    EPOC-specific information is included as XML following the EC schema
    Form 1 (Production)
    From IssuingAuthority in country XX (technical ID = IssuingAuthorityID)
    To ServiceProvider in country YY (technical ID = ServiceProviderID)
    The request is for data on an Email address (cover multiple IDs / date ranges in a separate example)
    In this case, the EPOC was validated by a ValidatingAuthority (technical ID = ValidatingAuthorityID)
    This example is not an emergency (cover that in a separate example)
    This example is not related to any previous EPOC/EPOC-PR (section D - cover that in a separate example)

    Section K is not yet mapped - does this get included in the EPOC to the SP?
    -->
    <Header>
        <SenderIdentifier>
            <CountryCode>XX</CountryCode>
            <UniqueIdentifier>IssuingAuthorityID</UniqueIdentifier>
        </SenderIdentifier>
        <ReceiverIdentifier>
            <CountryCode>YY</CountryCode>
            <UniqueIdentifier>ServiceProviderID</UniqueIdentifier>
        </ReceiverIdentifier>
        <TransactionIdentifier>120fdb3a-d2c2-441e-8563-7898ecc822b9</TransactionIdentifier>
        <Timestamp>2024-12-17T08:43:00.000000Z</Timestamp>
        <Version>
            <ETSIVersion>V1.18.1</ETSIVersion>
            <!-- ? -->
            <NationalProfileOwner>EU</NationalProfileOwner>
            <NationalProfileVersion>0.1</NationalProfileVersion>
        </Version>
    </Header>
    <Payload>
        <RequestPayload>
            <ActionRequests>
                <ActionRequest>
                    <ActionIdentifier>0</ActionIdentifier>
                    <CREATE>
                        <HI1Object xsi:type="auth:AuthorisationObject">
                            <ObjectIdentifier>6874131d-754e-47b2-b8a4-2a869412b9f5</ObjectIdentifier>
                            <!-- Mapped from Section A - Issuing State -->
                            <CountryCode>XX</CountryCode>
                            <!-- Mapped from Section A - Issuing Authority -->
                            <OwnerIdentifier>IssuingAuthority</OwnerIdentifier>
                            <!-- Mapped from Section G - Nature and Legal Classification of offence -->
                            <!-- Except that here we just signal that it is an EPOC -->
                            <!-- You can dig out the EPOC-specifics if needed from the XML at the end -->
                            <auth:AuthorisationLegalType>
                                <common:Owner>ETSI</common:Owner>
                                <common:Name>NatureAndClassificationOfOffence</common:Name>
                                <common:Value>EPOC</common:Value>
                            </auth:AuthorisationLegalType>
                            <!-- Mapped from Section C - Deadlines -->
                            <!-- and potentially also from the Section B emergency flag -->
                            <auth:AuthorisationPriority>
                                <common:Owner>ETSI</common:Owner>
                                <common:Name>EPOCDeadlines</common:Name>
                                <common:Value>WithinTenDays</common:Value>
                            </auth:AuthorisationPriority>
                            <!-- Mapped from section B - Service Provider Concerned (assuming this is a techincal ID) -->
                            <auth:AuthorisationCSPID>
                                <!-- Interestingly, we can put more than one CSPID in here... -->
                                <auth:CSPID>
                                    <CountryCode>YY</CountryCode>
                                    <UniqueIdentifier>ServiceProviderID</UniqueIdentifier>
                                </auth:CSPID>
                            </auth:AuthorisationCSPID>
                            <!-- Could be useful when mapping some of the other forms? -->
                            <auth:AuthorisationCreationTimestamp>2024-12-17T09:00:00Z</auth:AuthorisationCreationTimestamp>
                            <!-- Could be useful when mapping some of the other forms? -->
                            <auth:AuthorisationServedTimestamp>2024-12-17T09:00:01Z</auth:AuthorisationServedTimestamp>
                            <auth:AuthorisationApprovalDetails>
                                <common:ApprovalType>IssuingAuthority</common:ApprovalType>
                                <!-- Mapped from section I - File Number -->
                                <common:ApprovalReference>File number</common:ApprovalReference>
                                <common:ApproverDetails>
                                    <!-- Mapped from Section I - Name of Authority -->
                                    <common:ApproverName>Name of Authority</common:ApproverName>
                                    <!-- Mapped from Section I - Post Held (title/grade)-->
                                    <common:ApproverRole>Post held</common:ApproverRole>
                                    <common:ApproverContactDetails>
                                        <!-- Mapped from Section I - Name of representative -->
                                        <common:ApproverAlternateName>Name of representative</common:ApproverAlternateName>
                                        <!-- Mapped from Section I - Email -->
                                        <common:ApproverEmailAddress>email@example.com</common:ApproverEmailAddress>
                                        <!-- Mapped from Section I - Tel No -->
                                        <common:ApproverPhoneNumber>493023125000</common:ApproverPhoneNumber>
                                        <!-- May need to extend this for Fax Number, Postal Address, Lanmguages Spoken, -->
                                    </common:ApproverContactDetails>
                                </common:ApproverDetails>
                            </auth:AuthorisationApprovalDetails>
                            <auth:AuthorisationApprovalDetails>
                                <common:ApprovalType>ValidatingAuthority</common:ApprovalType>
                                <!-- Mapped from section J - File Number -->
                                <common:ApprovalReference>File number</common:ApprovalReference>
                                <common:ApproverDetails>
                                    <!-- Mapped from Section J - Name of Authority -->
                                    <common:ApproverName>Name of Authority</common:ApproverName>
                                    <!-- Mapped from Section J - Post Held (title/grade)-->
                                    <common:ApproverRole>Post held</common:ApproverRole>
                                    <common:ApproverContactDetails>
                                        <!-- Mapped from Section J - Name of representative -->
                                        <common:ApproverAlternateName>Name of representative</common:ApproverAlternateName>
                                        <!-- Mapped from Section J - Email -->
                                        <common:ApproverEmailAddress>email@example.com</common:ApproverEmailAddress>
                                        <!-- Mapped from Section J - Tel No -->
                                        <common:ApproverPhoneNumber>493023125000</common:ApproverPhoneNumber>
                                        <!-- May need to extend this for Fax Number, Postal Address, Lanmguages Spoken, -->
                                    </common:ApproverContactDetails>
                                </common:ApproverDetails>
                            </auth:AuthorisationApprovalDetails>
                            <auth:AuthorisationLegalEntity>ServiceProviderAddressee</auth:AuthorisationLegalEntity>
                        </HI1Object>
                    </CREATE>
                </ActionRequest>
                <ActionRequest>
                    <ActionIdentifier>1</ActionIdentifier>
                    <CREATE>
                        <HI1Object xsi:type="task:LDTaskObject">
                            <ObjectIdentifier>83e9d910-e36a-4e18-8128-0dd1c38b8ffd</ObjectIdentifier>
                            <CountryCode>XX</CountryCode>                           <!-- Mapped from Section A - Issuing State -->
                            <OwnerIdentifier>IssuingAuthority</OwnerIdentifier>     <!-- Mapped from Section A - Issuing Authority -->
                            <AssociatedObjects>
                                <AssociatedObject>6874131d-754e-47b2-b8a4-2a869412b9f5</AssociatedObject>
                            </AssociatedObjects>
                            <!-- Mapped from Section E and F -->
                            <task:RequestDetails>
                                <!-- Mapped from Section F - Top level box (may be unecessary if they can be inferred from subtypes below)  -->
                                <task:Type>
                                    <common:Owner>ETSI</common:Owner>
                                    <common:Name>EPOCSectionFTypes</common:Name>
                                    <common:Value>SubscriberData</common:Value>
                                </task:Type>
                                <task:RequestValues>
                                    <task:RequestValue>
                                        <task:FormatType>
                                            <task:FormatOwner>ETSI</task:FormatOwner>
                                            <task:FormatName>EmailAddress</task:FormatName>
                                        </task:FormatType>
                                        <task:Value>username@example.com</task:Value>
                                    </task:RequestValue>
                                </task:RequestValues>
                                <task:Subtype>
                                    <!-- Mapped from section F - "EPOC concerns" tickboxes -->
                                    <!-- Although generally we would hope these are replaced with CSP-provided dictionaries -->
                                    <!-- since the tickboxes make very little sense for actual SPs -->
                                    <task:RequestSubtype>
                                        <common:Owner>ETSI</common:Owner>
                                        <common:Name>EPOCSectionFSubtypes</common:Name>
                                        <common:Value>InitialRegistrationInformation</common:Value>
                                    </task:RequestSubtype>
                                    <task:RequestSubtype>
                                        <common:Owner>ETSI</common:Owner>
                                        <common:Name>EPOCSectionFSubyypes</common:Name>
                                        <common:Value>ProfileInformation</common:Value>
                                    </task:RequestSubtype>
                                </task:Subtype>
                            </task:RequestDetails>
                            <task:DeliveryDetails>
                                <task:LDDeliveryDestination>
                                    <!-- Mapped from Section L - Transfer To... -->
                                    <!-- Could also consider introducing a new type for this (and for the Name/Contact details part) -->
                                    <task:DeliveryAddress>
                                        <task:DeliveryInformationID>ToIssuingAuthority</task:DeliveryInformationID>
                                    </task:DeliveryAddress>
                                    <!-- Mapped from Section L - Preferred Format -->
                                    <task:LDHandoverFormat>
                                        <common:Owner>ETSI</common:Owner>
                                        <common:Name>EPOCHandoverFormats</common:Name>
                                        <common:Value>SomeDictToBeAgreed</common:Value>
                                    </task:LDHandoverFormat>
                                </task:LDDeliveryDestination>
                            </task:DeliveryDetails>
                            <!-- Mapped from section B - Service Provider Concerned (assuming this is a techincal ID) -->
                            <!-- But can also be mapped in Authorisation. So maybe we don't need this one? -->
                            <task:CSPID>
                                <CountryCode>YY</CountryCode>
                                <UniqueIdentifier>ServiceProviderID</UniqueIdentifier>
                            </task:CSPID>
                        </HI1Object>
                    </CREATE>
                </ActionRequest>
                <ActionRequest>
                    <ActionIdentifier>2</ActionIdentifier>
                    <CREATE>
                        <!-- This DocumentObject represents the "source" PDF with the original form in it -->
                        <!-- together with some structured metadata that has been mapped out -->
                        <HI1Object xsi:type="doc:DocumentObject">
                            <ObjectIdentifier>83e9d910-e36a-4e18-8128-0dd1c38b8ffd</ObjectIdentifier>
                            <CountryCode>XX</CountryCode>                           <!-- Mapped from Section A - Issuing State -->
                            <OwnerIdentifier>IssuingAuthority</OwnerIdentifier>     <!-- Mapped from Section A - Issuing Authority -->
                            <AssociatedObjects>
                                <AssociatedObject>6874131d-754e-47b2-b8a4-2a869412b9f5</AssociatedObject>
                            </AssociatedObjects>
                            <!-- We can use this to signal that the document contains the PDF -->
                            <!-- (although that can also be unambiguously determined from other fields) -->
                            <doc:DocumentType>
                                <common:Owner>ETSI</common:Owner>
                                <common:Name>EPOCDocumentTypes</common:Name>
                                <common:Value>EPOCForm1AsPDF</common:Value>
                            </doc:DocumentType>
                            <doc:DocumentBody>
                                <!-- This would contain the actual PDF with the form in it -->
                                <!-- (Obviously this isn't actually a PDF) -->
                                <doc:Contents>VGhlIHNpZ25lZCBQREYgd291bGQgZ28gaGVyZQ==</doc:Contents>
                                <doc:ContentType>application/pdf</doc:ContentType>
                                <doc:Checksum>checksum value</doc:Checksum>
                                <doc:ChecksumType>sha-256</doc:ChecksumType>
                            </doc:DocumentBody>
                        </HI1Object>
                    </CREATE>
                </ActionRequest>
                <ActionRequest>
                    <ActionIdentifier>3</ActionIdentifier>
                    <CREATE>
                        <!-- This is a sketch of the kind of object we could create as a container -->
                        <!-- for the EC-defined EPOCXML. This approach removes the need for base64 encoding -->
                        <!-- and allows single-pass validation and parsing. -->
                        <!-- On the other hand, it couples the schemas -->
                        <!-- For an example of an alternative approach, see the "EmbedXML" variant -->
                        <HI1Object xsi:type="etsiepoc:EPOCObject">
                            <ObjectIdentifier>b0d61f1c-36ab-42b6-8fb4-4edd186cee93</ObjectIdentifier>  
                            <CountryCode>XX</CountryCode>                          <!-- Mapped from Section A - Issuing State -->
                            <OwnerIdentifier>IssuingAuthority</OwnerIdentifier>    <!-- Mapped from Section A - Issuing Authority -->
                            <AssociatedObjects>
                                <AssociatedObject>6874131d-754e-47b2-b8a4-2a869412b9f5</AssociatedObject>
                            </AssociatedObjects>
                            <etsiepoc:EPOCForm>
                                <etsiepoc:Form1>
                                    <!-- At this point we are following the EC definitions -->
                                    <!-- The EC XSD for each Form is conveniently broken down into sections, -->
                                    <!-- so we could consider importing those individually if we wanted -->
                                    <!-- to avoid any duplication between this and the mapped fields above -->
                                    <!-- There is a lot of flexibility in how we link the schemas, if needed. -->
                                    <epocform1:SectionA>
                                        <epoc:IssuingState>XX</epoc:IssuingState>
                                    </epocform1:SectionA>
                                    <epocform1:SectionB>
                                        <epoc:Addressee>
                                            <epoc:Authority>etc etc</epoc:Authority>
                                            <!-- The rest is omitted for brevity, hopefully the approach is clear -->
                                        </epoc:Addressee>
                                    </epocform1:SectionB>
                                </etsiepoc:Form1>
                            </etsiepoc:EPOCForm>
                        </HI1Object>
                    </CREATE>
                </ActionRequest>
            </ActionRequests>
        </RequestPayload>
    </Payload>
</HI1Message>
+276 −0

File added.

Preview size limit exceeded, changes collapsed.

+21 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:etsi="http://uri.etsi.org/03280/common/2017/07" xmlns:common="http://uri.etsi.org/03120/common/2016/02/Common" xmlns:core="http://uri.etsi.org/03120/common/2019/10/Core" xmlns="http://uri.etsi.org/03120/common/2016/02/Notification" targetNamespace="http://uri.etsi.org/03120/common/2016/02/Notification" xmlns:epocform1="http://data.europa.eu/edm/1/ns/forms/EPOC-FORM-1#" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:import namespace="http://uri.etsi.org/03120/common/2016/02/Common"/>
    <xs:import namespace="http://uri.etsi.org/03120/common/2019/10/Core"/>
    <xs:import namespace="http://uri.etsi.org/03280/common/2017/07"/>
    <xs:import namespace="http://data.europa.eu/edm/1/ns/forms/EPOC-FORM-1#"/>
    <xs:complexType name="EPOCObject">
        <xs:complexContent>
            <xs:extension base="core:HI1Object">
                <xs:sequence>
                    <xs:element name="EPOCForm" type="EPOCForm" minOccurs="0"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="EPOCForm">
        <xs:choice>
            <xs:element name="Form1" type="epocform1:Epoc_Form1_Type" />
        </xs:choice>
    </xs:complexType>
</xs:schema>