7. Examples
This section illustrates a longer and more complex example, as shown in Figure 15. In this example, additional data is added by the end device, included by the VoIP provider, and provided by the access network provider (via the PIDF-LO). O +----+ [============] [=============] /|\ | UA | [ Access ] [ VoIP ] | +----+ [ Network ] [ Provider ] / \ [ Provider ] [ example.org ] [ ] [ ] (1) [ ] (2) [ ] Emergency Call [ ] Emergency Call [ ] ------------------------------------------------------> ] +Device Info [ ] +Device Info [ ] +Data Prov. Info [ ^ ] +Data Provider Info [ | ] +Location URI [=======.====] +Location URI [====|========] . | . | +Location . [==============] | +Owner/Subscriber Info . [ ] (3) | +Device Info . (4) [ <------------+ +Data Provider Info #3 ..........> ] Emergency Call [ ] +Device Info [ PSAP ] +Data Prov. Info #2 [ ] +Location URI [==============] Legend: --- Emergency Call Setup Procedure ... Location Retrieval/Response Figure 15: Additional Data Example Flow
The example scenario starts with the end device itself adding device information, owner/subscriber information, a location URI, and data provider information to the outgoing emergency call setup message (see step #1 in Figure 15). The SIP INVITE example is shown in Figure 16. INVITE urn:service:sos SIP/2.0 Via: SIPS/2.0/TLS server.example.com;branch=z9hG4bK74bf9 Max-Forwards: 70 To: <urn:service:sos> From: Hannes Tschofenig <sips:hannes@example.com>;tag=9fxced76sl Call-ID: 3848276298220188511@example.com Call-Info: <http://wwww.example.com/hannes/photo.jpg> ;purpose=icon, <http://www.example.com/hannes/> ;purpose=info, <cid:1234567890@atlanta.example.com> ;purpose=EmergencyCallData.ProviderInfo, <cid:0123456789@atlanta.example.com> ;purpose=EmergencyCallData.DeviceInfo Geolocation: <https://ls.example.net:9768/357yc6s64ceyoiuy5ax3o> Geolocation-Routing: yes Accept: application/sdp, application/pidf+xml, application/EmergencyCallData.ProviderInfo+xml CSeq: 31862 INVITE Contact: <sips:hannes@example.com> Content-Type: multipart/mixed; boundary=boundary1 Content-Length: ... --boundary1 Content-Type: application/sdp ...SDP goes here --boundary1 Content-Type: application/EmergencyCallData.DeviceInfo+xml Content-ID: <0123456789@atlanta.example.com> Content-Disposition: by-reference;handling=optional <?xml version="1.0" encoding="UTF-8"?> <dev:EmergencyCallData.DeviceInfo xmlns:dev= "urn:ietf:params:xml:ns:EmergencyCallData:DeviceInfo"> <dev:DataProviderReference> d4b3072df09876543@[93.184.216.119] </dev:DataProviderReference> <dev:DeviceClassification>laptop</dev:DeviceClassification> <dev:UniqueDeviceID TypeOfDeviceID="MAC">00-0d-4b-30-72-df
</dev:UniqueDeviceID>
</dev:EmergencyCallData.DeviceInfo>
--boundary1
Content-Type: application/EmergencyCallData.ProviderInfo+xml
Content-ID: <1234567890@atlanta.example.com>
Content-Disposition: by-reference;handling=optional
<?xml version="1.0" encoding="UTF-8"?>
<pi:EmergencyCallData.ProviderInfo
xmlns:pi=
"urn:ietf:params:xml:ns:EmergencyCallData:ProviderInfo">
<pi:DataProviderReference>d4b3072df09876543@[93.184.216.119]
</pi:DataProviderReference>
<pi:DataProviderString>Hannes Tschofenig</pi:DataProviderString>
<pi:TypeOfProvider>Client</pi:TypeOfProvider>
<pi:ContactURI>tel:+1-555-555-0123</pi:ContactURI>
<pi:Language>en</pi:Language>
<pi:DataProviderContact
xmlns="urn:ietf:params:xml:ns:vcard-4.0">
<vcard>
<fn><text>Hannes Tschofenig</text></fn>
<n>
<surname>Hannes</surname>
<given>Tschofenig</given>
<additional/>
<prefix/>
<suffix>Dipl. Ing.</suffix>
</n>
<bday><date>--0203</date></bday>
<anniversary>
<date-time>20090808T1430-0500</date-time>
</anniversary>
<gender><sex>M</sex></gender>
<lang>
<parameters><pref><integer>1</integer></pref>
</parameters>
<language-tag>de</language-tag>
</lang>
<lang>
<parameters><pref><integer>2</integer></pref>
</parameters>
<language-tag>en</language-tag>
</lang>
<adr>
<parameters>
<type><text>work</text></type>
<label><text>Hannes Tschofenig
Linnoitustie 6
Espoo, Finland
02600</text></label>
</parameters>
<pobox/>
<ext/>
<street>Linnoitustie 6</street>
<locality>Espoo</locality>
<region>Uusimaa</region>
<code>02600</code>
<country>Finland</country>
</adr>
<adr>
<parameters>
<type><text>home</text></type>
<label><text>Hannes Tschofenig
c/o Hotel DuPont
42 W 11th St
Wilmington, DE 19801
USA</text></label>
</parameters>
<pobox/>
<ext/>
<street>42 W 11th St</street>
<locality>Wilmington</locality>
<region>DE</region>
<code>19801</code>
<country>USA</country>
</adr>
<tel>
<parameters>
<type>
<text>work</text>
<text>voice</text>
</type>
</parameters>
<uri>tel:+358 50 4871445</uri>
</tel>
<tel>
<parameters>
<type>
<text>home</text>
<text>voice</text>
</type>
</parameters>
<uri>tel:+1-555-555-0123</uri>
</tel>
<tel>
<parameters> <type> <text>work</text> <text>voice</text> <text>main-number</text> </type> </parameters> <uri>tel:+1-302-594-3100</uri> </tel> <email> <parameters><type><text>work</text></type> </parameters> <text>hannes.tschofenig@nsn.com</text> </email> <geo> <parameters><type><text>work</text></type> </parameters> <uri>geo:60.210796,24.812924</uri> </geo> <geo> <parameters><type><text>home</text></type> </parameters> <uri>geo:39.746537,-75.548027</uri> </geo> <key> <parameters> <type><text>home</text></type> </parameters> <uri>https://www.example.com/key.asc</uri> </key> <tz><text>Finland/Helsinki</text></tz> <url> <parameters><type><text>home</text></type> </parameters> <uri>http://example.com/hannes.tschofenig </uri> </url> </vcard> </pi:DataProviderContact> </pi:EmergencyCallData.ProviderInfo> --boundary1-- Figure 16: End Device Sending SIP INVITE with Additional Data In this example, information available to the access network provider is included in the call setup message only indirectly via the use of the location reference. The PSAP has to retrieve it via a separate lookup step. Since the access network provider and the VoIP service
provider are two independent entities in this scenario, the access network provider is not involved in application-layer exchanges; the SIP INVITE transits the access network transparently, as illustrated in steps #1 and #2 (the access network does not alter the SIP INVITE). The VoIP service provider receives the message and determines, based on the service URN, that the incoming request is an emergency call. It performs typical emergency-services-related tasks (such as location-based routing) and adds additional data, namely service and subscriber information as well as data provider information #2, to the outgoing message. For the example, we assume a VoIP service provider deploys a back-to-back user agent allowing additional data to be included in the body of the SIP message (rather than by reference), which allows us to illustrate the use of multiple data provider info blocks. The resulting message is shown in Figure 17. The SIP INVITE is sent to the PSAP in step #3. INVITE sips:psap@example.org SIP/2.0 Via: SIPS/2.0/TLS server.example.com;branch=z9hG4bK74bf9 Max-Forwards: 70 To: <urn:service:sos> From: Hannes Tschofenig <sips:hannes@example.com>;tag=9fxced76sl Call-ID: 3848276298220188511@example.com Call-Info: <http://wwww.example.com/hannes/photo.jpg>; purpose=icon, <http://www.example.com/hannes/>; purpose=info, <cid:1234567890@atlanta.example.com>; purpose=EmergencyCallData.ProviderInfo <cid:0123456789@atlanta.example.com>; purpose=EmergencyCallData.DeviceInfo Call-Info: <cid:bloorpyhex@atlanta.example.com>; purpose=EmergencyCallData.ServiceInfo Call-Info: <cid:aaabbb@atlanta.example.com>; purpose=EmergencyCallData.ProviderInfo Geolocation: <https://ls.example.net:9768/357yc6s64ceyoiuy5ax3o> Geolocation-Routing: yes Accept: application/sdp, application/pidf+xml, application/EmergencyCallData.ProviderInfo+xml CSeq: 31862 INVITE Contact: <sips:hannes@example.com> Content-Type: multipart/mixed; boundary=boundary1 Content-Length: ... --boundary1 Content-Type: application/sdp ...SDP goes here
--boundary1
Content-Type: application/EmergencyCallData.DeviceInfo+xml
Content-ID: <0123456789@atlanta.example.com>
Content-Disposition: by-reference;handling=optional
<?xml version="1.0" encoding="UTF-8"?>
<dev:EmergencyCallData.DeviceInfo
xmlns:dev=
"urn:ietf:params:xml:ns:EmergencyCallData:DeviceInfo">
<dev:DataProviderReference>d4b3072df09876543@[93.184.216.119]
</dev:DataProviderReference>
<dev:DeviceClassification>laptop</dev:DeviceClassification>
<dev:UniqueDeviceID
TypeOfDeviceID="MAC">00-0d-4b-30-72-df</dev:UniqueDeviceID>
</dev:EmergencyCallData.DeviceInfo>
--boundary1
Content-Type: application/EmergencyCallData.ProviderInfo+xml
Content-ID: <1234567890@atlanta.example.com>
Content-Disposition: by-reference;handling=optional
<?xml version="1.0" encoding="UTF-8"?>
<pi:EmergencyCallData.ProviderInfo
xmlns:pi=
"urn:ietf:params:xml:ns:EmergencyCallData:ProviderInfo">
<pi:DataProviderReference>d4b3072df09876543@[93.184.216.119]
</pi:DataProviderReference>
<pi:DataProviderString>Hannes Tschofenig
</pi:DataProviderString>
<pi:TypeOfProvider>Client</pi:TypeOfProvider>
<pi:ContactURI>tel:+1-555-555-0123</pi:ContactURI>
<pi:Language>en</pi:Language>
<pi:DataProviderContact
xmlns="urn:ietf:params:xml:ns:vcard-4.0">
<vcard>
<fn><text>Hannes Tschofenig</text></fn>
<n>
<surname>Hannes</surname>
<given>Tschofenig</given>
<additional/>
<prefix/>
<suffix>Dipl. Ing.</suffix>
</n>
<bday><date>--0203</date></bday>
<anniversary>
<date-time>20090808T1430-0500</date-time>
</anniversary>
<gender><sex>M</sex></gender>
<lang>
<parameters><pref><integer>1</integer></pref>
</parameters>
<language-tag>de</language-tag>
</lang>
<lang>
<parameters><pref><integer>2</integer></pref>
</parameters>
<language-tag>en</language-tag>
</lang>
<adr>
<parameters>
<type><text>work</text></type>
<label><text>Hannes Tschofenig
Linnoitustie 6
Espoo, Finland
02600</text></label>
</parameters>
<pobox/>
<ext/>
<street>Linnoitustie 6</street>
<locality>Espoo</locality>
<region>Uusimaa</region>
<code>02600</code>
<country>Finland</country>
</adr>
<adr>
<parameters>
<type><text>home</text></type>
<label><text>Hannes Tschofenig
c/o Hotel DuPont
42 W 11th St
Wilmington, DE 19801
USA</text></label>
</parameters>
<pobox/>
<ext/>
<street>42 W 11th St</street>
<locality>Wilmington</locality>
<region>DE</region>
<code>19801</code>
<country>USA</country>
</adr>
<tel>
<parameters>
<type>
<text>work</text>
<text>voice</text>
</type>
</parameters>
<uri>tel:+358 50 4871445</uri>
</tel>
<tel>
<parameters>
<type>
<text>home</text>
<text>voice</text>
</type>
</parameters>
<uri>tel:+1-555-555-0123</uri>
</tel>
<email>
<parameters><type><text>work</text></type>
</parameters>
<text>hannes.tschofenig@nsn.com</text>
</email>
<geo>
<parameters><type><text>work</text></type>
</parameters>
<uri>geo:60.210796,24.812924</uri>
</geo>
<geo>
<parameters><type><text>home</text></type>
</parameters>
<uri>geo:39.746537,-75.548027</uri>
</geo>
<key>
<parameters>
<type><text>home</text></type>
</parameters>
<uri>https://www.example.com/key.asc</uri>
</key>
<tz><text>Finland/Helsinki</text></tz>
<url>
<parameters><type><text>home</text></type>
</parameters>
<uri>http://example.com/hannes.tschofenig</uri>
</url>
</vcard>
</pi:DataProviderContact>
</pi:EmergencyCallData.ProviderInfo>
--boundary1
Content-Type: application/EmergencyCallData.ServiceInfo+xml
Content-ID: <bloorpyhex@atlanta.example.com>
Content-Disposition: by-reference;handling=optional
<?xml version="1.0" encoding="UTF-8"?>
<svc:EmergencyCallData.ServiceInfo
xmlns:svc=
"urn:ietf:params:xml:ns:EmergencyCallData:ServiceInfo">
<svc:DataProviderReference>string0987654321@example.org
</svc:DataProviderReference>
<svc:ServiceEnvironment>Residence</svc:ServiceEnvironment>
<svc:ServiceType>VOIP</svc:ServiceType>
<svc:ServiceMobility>Unknown</svc:ServiceMobility>
</svc:EmergencyCallData.ServiceInfo>
--boundary1
Content-Type: application/EmergencyCallData.ProviderInfo+xml
Content-ID: <aaabbb@atlanta.example.com>
Content-Disposition: by-reference;handling=optional
<?xml version="1.0" encoding="UTF-8"?>
<pi:EmergencyCallData.ProviderInfo
xmlns:pi=
"urn:ietf:params:xml:ns:EmergencyCallData:ProviderInfo">
<pi:DataProviderReference>string0987654321@example.org
</pi:DataProviderReference>
<pi:DataProviderString>Exemplar VoIP Provider
</pi:DataProviderString>
<pi:ProviderID>urn:nena:companyid:ID123</pi:ProviderID>
<pi:ProviderIDSeries>NENA</pi:ProviderIDSeries>
<pi:TypeOfProvider>Service Provider</pi:TypeOfProvider>
<pi:ContactURI>sip:voip-provider@example.com</pi:ContactURI>
<pi:Language>en</pi:Language>
<pi:DataProviderContact
xmlns="urn:ietf:params:xml:ns:vcard-4.0">
<vcard>
<fn><text>John Doe</text></fn>
<n>
<surname>John</surname>
<given>Doe</given>
<additional/>
<prefix/>
<suffix/>
</n>
<bday><date>--0203</date></bday>
<anniversary>
<date-time>20090808T1430-0500</date-time>
</anniversary>
<gender><sex>M</sex></gender>
<lang>
<parameters><pref><integer>1</integer></pref>
</parameters>
<language-tag>en</language-tag>
</lang>
<org>
<parameters><type><text>work</text></type>
</parameters>
<text>Exemplar VoIP Provider</text>
</org>
<adr>
<parameters>
<type><text>work</text></type>
<label><text>John Doe
123 Middle Street
The Sticks, IA 50055</text></label>
</parameters>
<pobox/>
<ext/>
<street>123 Middle Street</street>
<locality>The Sticks</locality>
<region>IA</region>
<code>50055</code>
<country>USA</country>
</adr>
<tel>
<parameters>
<type>
<text>work</text>
<text>voice</text>
<text>main-number</text>
</type>
</parameters>
<uri>sips:john.doe@example.com</uri>
</tel>
<email>
<parameters><type><text>work</text></type>
</parameters>
<text>john.doe@example.com</text>
</email>
<geo>
<parameters><type><text>work</text></type>
</parameters>
<uri>geo:41.761838,-92.963268</uri>
</geo>
<tz><text>America/Chicago</text></tz>
<url>
<parameters><type><text>home</text></type>
</parameters>
<uri>http://www.example.com/john.doe</uri>
</url>
</vcard> </pi:DataProviderContact> </pi:EmergencyCallData.ProviderInfo> --boundary1-- Figure 17: VoIP Provider Sending SIP INVITE with Additional Data Finally, the PSAP requests location information from the access network provider. The response is shown in Figure 18. Along with the location information, additional data is provided in the <provided-by> element of the PIDF-LO. This request and response is step #4. <?xml version="1.0" encoding="UTF-8"?> <presence xmlns="urn:ietf:params:xml:ns:pidf" xmlns:gp="urn:ietf:params:xml:ns:pidf:geopriv10" xmlns:gbp="urn:ietf:params:xml:ns:pidf:geopriv10:basicPolicy" xmlns:dm="urn:ietf:params:xml:ns:pidf:data-model" entity="pres:alice@atlanta.example.com"> <dm:device id="target123-1"> <gp:geopriv> <gp:location-info> <civicAddress xmlns="urn:ietf:params:xml:ns:pidf:geopriv10:civicAddr"> <country>US</country> <A1>DE</A1> <A3>Wilmington</A3> <PRD>W</PRD> <RD>11th</RD> <STS>Street</STS> <HNO>42</HNO> <NAM>The Hotel DuPont</NAM> <PC>19801</PC> </civicAddress> </gp:location-info> <gp:usage-rules> <gbp:retransmission-allowed>true </gbp:retransmission-allowed> <gbp:retention-expiry>2013-12-10T20:00:00Z </gbp:retention-expiry> </gp:usage-rules> <gp:method>802.11</gp:method> <gp:provided-by xmlns="urn:ietf:params:xml:ns:EmergencyCallData">
<EmergencyCallDataReference purpose="EmergencyCallData.ServiceInfo" ref="https://example.com/ref2" /> <EmergencyCallDataValue> <EmergencyCallData.ProviderInfo xmlns= "urn:ietf:params:xml:ns:EmergencyCallData:ProviderInfo"> <DataProviderReference>88QV4FpfZ976T@example.com </DataProviderReference> <DataProviderString>Diamond State Exemplar </DataProviderString> <ProviderID>urn:nena:companyid:diamond</ProviderID> <ProviderIDSeries>NENA</ProviderIDSeries> <TypeOfProvider>Access Network Provider</TypeOfProvider> <ContactURI>tel:+1-302-555-0000</ContactURI> <Language>en</Language> </EmergencyCallData.ProviderInfo> <EmergencyCallData.Comment xmlns="urn:ietf:params:xml:ns:EmergencyCallData:Comment"> <DataProviderReference>88QV4FpfZ976T@example.com </DataProviderReference> <Comment xml:lang="en">This is an example text.</Comment> </EmergencyCallData.Comment> </EmergencyCallDataValue> </gp:provided-by> </gp:geopriv> <dm:deviceID>mac:00-0d-4b-30-72-df</dm:deviceID> <dm:timestamp>2013-07-09T20:57:29Z</dm:timestamp> </dm:device> </presence> Figure 18: Access Network Provider Returning PIDF-LO with Additional Data8. XML Schemas
This section defines the XML schemas of the five data blocks. Additionally, the provided-by schema is specified.
8.1. EmergencyCallData.ProviderInfo XML Schema
<?xml version="1.0"?> <xs:schema targetNamespace= "urn:ietf:params:xml:ns:EmergencyCallData:ProviderInfo" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:pi="urn:ietf:params:xml:ns:EmergencyCallData:ProviderInfo" xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xc="urn:ietf:params:xml:ns:vcard-4.0" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2009/01/xml.xsd"/> <xs:import namespace="urn:ietf:params:xml:ns:vcard-4.0" schemaLocation="vcard.xsd"/> <xs:element name="EmergencyCallData.ProviderInfo" type="pi:ProviderInfoType"/> <xs:simpleType name="SubcontractorPriorityType"> <xs:restriction base="xs:string"> <xs:enumeration value="sub"/> <xs:enumeration value="main"/> </xs:restriction> </xs:simpleType> <xs:complexType name="ProviderInfoType"> <xs:sequence> <xs:element name="DataProviderReference" type="xs:token" minOccurs="1" maxOccurs="1"/> <xs:element name="DataProviderString" type="xs:string" minOccurs="1" maxOccurs="1"/> <xs:element name="ProviderID" type="xs:string" minOccurs="0" maxOccurs="1"/> <xs:element name="ProviderIDSeries" type="xs:string" minOccurs="0" maxOccurs="1"/> <xs:element name="TypeOfProvider" type="xs:token" minOccurs="1" maxOccurs="1"/>
<xs:element name="ContactURI" type="xs:anyURI" minOccurs="1" maxOccurs="1"/> <xs:element name="Language" minOccurs="1" maxOccurs="unbounded"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="([a-z]{2,3}((-[a-z]{3}){0,3})?|[a-z]{4,8}) (-[a-z]{4})?(-([a-z]{2}|\d{3}))?(-([0-9a-z]{5,8}| \d[0-9a-z]{3}))*(-[0-9a-wyz](-[0-9a-z]{2,8})+)* (-x(-[0-9a-z]{1,8})+)?|x(-[0-9a-z]{1,8})+|[a-z]{1,3} (-[0-9a-z]{2,8}){1,2}"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="DataProviderContact" minOccurs="0" maxOccurs="1"> <xs:complexType> <xs:sequence> <xs:element minOccurs="0" maxOccurs="unbounded" ref="xc:vcard"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="SubcontractorPrincipal" type="xs:string" minOccurs="0" maxOccurs="1"/> <xs:element name="SubcontractorPriority" type="pi:SubcontractorPriorityType" minOccurs="0" maxOccurs="1"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:schema> Figure 19: EmergencyCallData.ProviderInfo XML Schema
8.2. EmergencyCallData.ServiceInfo XML Schema
<?xml version="1.0"?> <xs:schema targetNamespace= "urn:ietf:params:xml:ns:EmergencyCallData:ServiceInfo" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:svc="urn:ietf:params:xml:ns:EmergencyCallData:ServiceInfo" xmlns:xml="http://www.w3.org/XML/1998/namespace" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd"/> <xs:element name="EmergencyCallData.ServiceInfo" type="svc:ServiceInfoType"/> <xs:complexType name="ServiceInfoType"> <xs:sequence> <xs:element name="DataProviderReference" type="xs:token" minOccurs="1" maxOccurs="1"/> <xs:element name="ServiceEnvironment" type="xs:string" minOccurs="0" maxOccurs="1"/> <xs:element name="ServiceType" type="xs:string" minOccurs="1" maxOccurs="unbounded"/> <xs:element name="ServiceMobility" type="xs:string" minOccurs="1" maxOccurs="1"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:schema> Figure 20: EmergencyCallData.ServiceInfo XML Schema
8.3. EmergencyCallData.DeviceInfo XML Schema
<?xml version="1.0"?> <xs:schema targetNamespace= "urn:ietf:params:xml:ns:EmergencyCallData:DeviceInfo" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:dev="urn:ietf:params:xml:ns:EmergencyCallData:DeviceInfo" xmlns:xml="http://www.w3.org/XML/1998/namespace" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd"/> <xs:element name="EmergencyCallData.DeviceInfo" type="dev:DeviceInfoType"/> <xs:complexType name="DeviceInfoType"> <xs:sequence> <xs:element name="DataProviderReference" type="xs:token" minOccurs="1" maxOccurs="1"/> <xs:element name="DeviceClassification" type="xs:string" minOccurs="0" maxOccurs="1"/> <xs:element name="DeviceMfgr" type="xs:string" minOccurs="0" maxOccurs="1"/> <xs:element name="DeviceModelNr" type="xs:string" minOccurs="0" maxOccurs="1"/> <xs:element name="UniqueDeviceID" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="TypeOfDeviceID" type="xs:string" use="required"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> <xs:element name="DeviceSpecificData" type="xs:anyURI" minOccurs="0" maxOccurs="1"/>
<xs:element name="DeviceSpecificType" type="xs:string" minOccurs="0" maxOccurs="1"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:schema> Figure 21: EmergencyCallData.DeviceInfo XML Schema
8.4. EmergencyCallData.SubscriberInfo XML Schema
<?xml version="1.0"?> <xs:schema targetNamespace= "urn:ietf:params:xml:ns:EmergencyCallData:SubscriberInfo" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:sub= "urn:ietf:params:xml:ns:EmergencyCallData:SubscriberInfo" xmlns:xc="urn:ietf:params:xml:ns:vcard-4.0" xmlns:xml="http://www.w3.org/XML/1998/namespace" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd"/> <xs:import namespace="urn:ietf:params:xml:ns:vcard-4.0" schemaLocation="vcard.xsd"/> <xs:element name="EmergencyCallData.SubscriberInfo" type="sub:SubscriberInfoType"/> <xs:complexType name="SubscriberInfoType"> <xs:sequence> <xs:element name="DataProviderReference" type="xs:token" minOccurs="1" maxOccurs="1"/> <xs:element name="SubscriberData"> <xs:complexType> <xs:sequence> <xs:element ref="xc:vcard" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="privacyRequested" type="xs:boolean" use="required"/> </xs:complexType> </xs:schema> Figure 22: EmergencyCallData.SubscriberInfo XML Schema
8.5. EmergencyCallData.Comment XML Schema
<?xml version="1.0"?> <xs:schema targetNamespace= "urn:ietf:params:xml:ns:EmergencyCallData:Comment" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:com="urn:ietf:params:xml:ns:EmergencyCallData:Comment" xmlns:xml="http://www.w3.org/XML/1998/namespace" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd"/> <xs:element name="EmergencyCallData.Comment" type="com:CommentType"/> <xs:complexType name="CommentType"> <xs:sequence> <xs:element name="DataProviderReference" type="xs:token" minOccurs="1" maxOccurs="1"/> <xs:element name="Comment" type="com:CommentSubType" minOccurs="0" maxOccurs="unbounded"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> <xs:complexType name="CommentSubType"> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute ref="xml:lang"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:schema> Figure 23: EmergencyCallData.Comment XML Schema
8.6. provided-by XML Schema
This section defines the provided-by schema. <?xml version="1.0"?> <xs:schema targetNamespace="urn:ietf:params:xml:ns:EmergencyCallData" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ad="urn:ietf:params:xml:ns:EmergencyCallData" xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:pi="urn:ietf:params:xml:ns:EmergencyCallData:ProviderInfo" xmlns:svc="urn:ietf:params:xml:ns:EmergencyCallData:ServiceInfo" xmlns:dev="urn:ietf:params:xml:ns:EmergencyCallData:DeviceInfo" xmlns:sub="urn:ietf:params:xml:ns:EmergencyCallData:SubscriberInfo" xmlns:com="urn:ietf:params:xml:ns:EmergencyCallData:Comment" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:import namespace="urn:ietf:params:xml:ns:EmergencyCallData:ProviderInfo" schemaLocation="ProviderInfo.xsd"/> <xs:import namespace="urn:ietf:params:xml:ns:EmergencyCallData:ServiceInfo" schemaLocation="ServiceInfo.xsd"/> <xs:import namespace="urn:ietf:params:xml:ns:EmergencyCallData:DeviceInfo" schemaLocation="DeviceInfo.xsd"/> <xs:import namespace="urn:ietf:params:xml:ns:EmergencyCallData:SubscriberInfo" schemaLocation="SubscriberInfo.xsd"/> <xs:import namespace="urn:ietf:params:xml:ns:EmergencyCallData:Comment" schemaLocation="Comment.xsd"/> <xs:element name="EmergencyCallDataReference" type="ad:ByRefType"/> <xs:element name="EmergencyCallDataValue" type="ad:EmergencyCallDataValueType"/> <!-- Additional Data By Reference --> <xs:complexType name="ByRefType"> <xs:sequence> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="purpose" type="xs:token" use="required"/> <xs:attribute name="ref" type="xs:anyURI" use="required"/> </xs:complexType> <!-- Additional Data By Value --> <xs:complexType name="EmergencyCallDataValueType"> <xs:sequence>
<xs:element ref="pi:EmergencyCallData.ProviderInfo" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="svc:EmergencyCallData.ServiceInfo" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="dev:EmergencyCallData.DeviceInfo" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="sub:EmergencyCallData.SubscriberInfo" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="com:EmergencyCallData.Comment" minOccurs="0" maxOccurs="unbounded"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:schema> Figure 24: provided-by XML Schema