<?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.
-->
<entry xmlns="http://www.w3.org/2005/Atom" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"
    xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xml:base="http://some.host.com/service.root/ReferenceScenario.svc/">
    <id>http://some.host.com/service.root/ReferenceScenario.svc/Rooms('1')</id>
    <title type="text">Room 1</title>
    <updated>2013-04-19T10:58:03.646Z</updated>
    <category term="RefScenario.Room" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
    <link href="Rooms('1')" rel="edit" title="Room" />
    <link href="Rooms('1')/nr_Employees" rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/nr_Employees"
        title="nr_Employees" type="application/atom+xml; type=feed" />
    <link href="Rooms('1')/nr_Building" rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/nr_Building"
        title="nr_Building" type="application/atom+xml; type=entry">
        <m:inline>
            <entry>
                <id>http://some.host.com/service.root/ReferenceScenario.svc/Buildings('1')</id>
                <title type="text">Buildings</title>
                <updated>2013-04-19T10:58:03.646Z</updated>
                <author>
                    <name>Building 1</name>
                </author>
                <category term="RefScenario.Building" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
                <link href="Buildings('1')" rel="edit" title="Building" />
                <link href="Buildings('1')/nb_Rooms" rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/nb_Rooms"
                    title="nb_Rooms" type="application/atom+xml; type=feed" />
                <content type="application/xml">
                    <m:properties>
                        <d:Id>1</d:Id>
                        <d:Name>Building 1</d:Name>
                        <d:Image m:null="true" />
                    </m:properties>
                </content>
            </entry>
        </m:inline>
    </link>
    <content type="application/xml">
        <m:properties>
            <d:Id>1</d:Id>
            <d:Name>Room 1</d:Name>
            <d:Seats>1</d:Seats>
            <d:Version>1</d:Version>
        </m:properties>
    </content>
</entry>
