<?xml version=“1.0” encoding=“UTF-8”?> <grammar ns=“schema.mytestbed.net/omf/6.0/protocol” xmlns=“relaxng.org/ns/structure/1.0”>
<start> <choice> <ref name="create"/> <ref name="configure"/> <ref name="request"/> <ref name="release"/> <ref name="inform"/> <ref name="env"/> </choice> </start> <!-- Shared elements among all types of messages --> <define name="common_elements"> <interleave> <optional> <!-- Message ID (optional) --> <attribute name="mid"/> </optional> <!-- Time stamp --> <element name="ts"> <text/> </element> <optional> <!-- Source (who sends it) (optional) --> <element name="src"> <text/> </element> </optional> <optional> <!-- Reply address (who sends it) (optional) --> <element name="replyto"> <text/> </element> </optional> <optional> <!-- Resource properties (optional) --> <element name="props"> <ref name="core_props"/> <zeroOrMore> <ref name="property"/> </zeroOrMore> </element> </optional> <optional> <!-- Guard with filtering properties (optional) --> <element name="guard"> <zeroOrMore> <ref name="property"/> </zeroOrMore> </element> </optional> </interleave> </define> <define name="property"> <element> <anyName/> <optional> <ref name="valid_content"/> </optional> </element> </define> <!-- Valid content type --> <define name="boolean_content"> <attribute name="type"> <value>boolean</value> </attribute> <text/> </define> <define name="integer_content"> <attribute name="type"> <value>integer</value> </attribute> <text/> </define> <define name="float_content"> <attribute name="type"> <value>float</value> </attribute> <text/> </define> <define name="string_content"> <attribute name="type"> <value>string</value> </attribute> <text/> </define> <define name="array_content"> <interleave> <attribute name="type"> <value>array</value> </attribute> <zeroOrMore> <element name="it"> <choice> <optional> <ref name="valid_content"/> </optional> <zeroOrMore> <ref name="property"/> </zeroOrMore> </choice> </element> </zeroOrMore> </interleave> </define> <define name="hash_content"> <interleave> <attribute name="type"> <value>hash</value> </attribute> <zeroOrMore> <ref name="property"/> </zeroOrMore> </interleave> </define> <define name="valid_content"> <choice> <ref name="boolean_content"/> <ref name="integer_content"/> <ref name="float_content"/> <ref name="string_content"/> <ref name="array_content"/> <ref name="hash_content"/> </choice> </define> <!-- Core Resource Proxy Properties --> <define name="res_id"> <element name="res_id"> <ref name="string_content"/> </element> </define> <define name="reason"> <element name="reason"> <ref name="string_content"/> </element> </define> <define name="membership"> <element name="membership"> <choice> <ref name="array_content"/> <ref name="string_content"/> </choice> </element> </define> <define name="uid"> <element name="uid"> <ref name="string_content"/> </element> </define> <define name="type"> <element name="type"> <ref name="string_content"/> </element> </define> <define name="hrn"> <element name="hrn"> <ref name="string_content"/> </element> </define> <define name="name"> <element name="name"> <ref name="string_content"/> </element> </define> <define name="child_resources"> <element name="child_resources"> <ref name="array_content"/> </element> </define> <define name="available_properties"> <element name="available_properties"> <ref name="hash_content"/> </element> </define> <define name="supported_children_type"> <element name="supported_children_type"> <ref name="array_content"/> </element> </define> <define name="certificate"> <element name="certificate"> <ref name="string_content"/> </element> </define> <define name="core_props"> <zeroOrMore> <choice> <ref name="res_id"/> <ref name="reason"/> <ref name="hrn"/> <ref name="membership"/> <ref name="uid"/> <ref name="type"/> <ref name="name"/> <ref name="child_resources"/> <ref name="available_properties"/> <ref name="supported_children_type"/> <ref name="certificate"/> </choice> </zeroOrMore> </define> <!-- Create message --> <define name="create"> <element name="create"> <interleave> <ref name="common_elements"/> <!-- Resource type is required --> <element name="rtype"> <text/> </element> </interleave> </element> </define> <!-- Configure message --> <define name="configure"> <element name="configure"> <ref name="common_elements"/> </element> </define> <!-- Request message --> <define name="request"> <element name="request"> <ref name="common_elements"/> </element> </define> <!-- Release message --> <define name="release"> <element name="release"> <interleave> <ref name="common_elements"/> <optional> <element name="res_id"> <text/> </element> </optional> </interleave> </element> </define> <!-- Inform message --> <define name="inform"> <element name="inform"> <interleave> <ref name="common_elements"/> <optional> <element name="cid"> <text/> </element> </optional> <element name="itype"> <choice> <value>CREATION.OK</value> <value>CREATION.FAILED</value> <value>STATUS</value> <value>RELEASED</value> <value>ERROR</value> <value>WARN</value> </choice> </element> </interleave> </element> </define> <!-- Message can be wrapped in env(elope) --> <define name="env"> <element name="env"> <choice> <ref name="create"/> <ref name="configure"/> <ref name="request"/> <ref name="release"/> <ref name="inform"/> </choice> </element> </define>
</grammar>