Here&#39;s a DTD to go along with the relaxng schema. The DTD is less restrictive, but still provides basic validation.<div><br></div><div>This would go along with a DOCTYPE definition on the protocol document. Perhaps something like this:</div>
<div><br></div><div><div>&lt;!DOCTYPE protocol PUBLIC &quot;-//freedesktop//DTD Wayland 1.0//EN&quot; &quot;<a href="http://wayland.freedesktop.org/wayland-1.0.dtd">http://wayland.freedesktop.org/wayland-1.0.dtd</a>&quot;&gt;</div>
<div><br></div><div>-Jeremy</div><br><div class="gmail_quote">On Thu, Jan 27, 2011 at 1:28 PM, Casey Dahlin <span dir="ltr">&lt;<a href="mailto:cdahlin@redhat.com">cdahlin@redhat.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im">On Thu, Jan 27, 2011 at 11:35:17AM -0500, Jeremy Volkman wrote:<br>
&gt; Sure. xmllint, which comes with libxml2 (libxml2-utils in Ubuntu), supports<br>
&gt; RELAX NG these days.<br>
&gt;<br>
&gt; scout:protocol jvolkman$ xmllint --noout --relaxng schema.xml wayland.xml<br>
&gt; wayland.xml validates<br>
&gt;<br>
&gt; -Jeremy<br>
&gt;<br>
<br>
</div>The only issue is there&#39;s no way to link a relaxng schema from the file,<br>
so there&#39;s no sure path to find the documentation given the file itself.<br>
I think a DTD in addition to the schema would solve that.<br>
<br>
--CJD<br>
<div><div></div><div class="h5"><br>
&gt; 2011/1/27 Kristian Høgsberg &lt;<a href="mailto:krh@bitplanet.net">krh@bitplanet.net</a>&gt;<br>
&gt;<br>
&gt; &gt; On Wed, Jan 26, 2011 at 5:09 PM, Jeremy Volkman &lt;<a href="mailto:jvolkman@gmail.com">jvolkman@gmail.com</a>&gt;<br>
&gt; &gt; wrote:<br>
&gt; &gt; &gt; Here&#39;s my stab at a Wayland schema written in RELAX NG. It can be<br>
&gt; &gt; converted<br>
&gt; &gt; &gt; to a W3C schema if preferred, but RELAX NG provides more functionality.<br>
&gt; &gt; For<br>
&gt; &gt; &gt; example, the schema is able to require an &quot;interface&quot; attribute for an<br>
&gt; &gt; &gt; argument only if the argument type is &quot;object&quot; or &quot;new_id&quot;.<br>
&gt; &gt; &gt; -Jeremy<br>
&gt; &gt;<br>
&gt; &gt; Is there a tool that can verify the protocol against the schema?<br>
&gt; &gt;<br>
&gt; &gt; Kristian<br>
&gt; &gt;<br>
&gt; &gt; &gt; 2011/1/26 Kristian Høgsberg &lt;<a href="mailto:krh@bitplanet.net">krh@bitplanet.net</a>&gt;<br>
&gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt; 2011/1/26 Casey Dahlin &lt;<a href="mailto:cdahlin@redhat.com">cdahlin@redhat.com</a>&gt;:<br>
&gt; &gt; &gt;&gt; &gt; On Wed, Jan 26, 2011 at 01:40:25PM -0500, Kristian Høgsberg wrote:<br>
&gt; &gt; &gt;&gt; &gt;&gt; 2011/1/26 Josh Leverette &lt;<a href="mailto:coder543@gmail.com">coder543@gmail.com</a>&gt;:<br>
&gt; &gt; &gt;&gt; &gt;&gt; &gt; I&#39;m not certain, but I think there could eventually be enough<br>
&gt; &gt; &gt;&gt; &gt;&gt; &gt; variation for that to be needed. However, even if there isn&#39;t,<br>
&gt; &gt; parsing an<br>
&gt; &gt; &gt;&gt; &gt;&gt; &gt; XML file might be a better long term solution that weakly linked<br>
&gt; &gt; functions<br>
&gt; &gt; &gt;&gt; &gt;&gt; &gt; and things like that. Perhaps we could modify his idea about an XML<br>
&gt; &gt; profile<br>
&gt; &gt; &gt;&gt; &gt;&gt; &gt; structure to allow you to delve into each supported profile and<br>
&gt; &gt; find out<br>
&gt; &gt; &gt;&gt; &gt;&gt; &gt; more about what it supports without having to hard code acceptable<br>
&gt; &gt; version<br>
&gt; &gt; &gt;&gt; &gt;&gt; &gt; numbers into a program. The only problem I foresee is how to modify<br>
&gt; &gt; the XML<br>
&gt; &gt; &gt;&gt; &gt;&gt; &gt; file. It&#39;s not going to be the end user&#39;s job.. but if any program<br>
&gt; &gt; could<br>
&gt; &gt; &gt;&gt; &gt;&gt; &gt; modify it there needs to be a fallback system to prevent a rogue<br>
&gt; &gt; program<br>
&gt; &gt; &gt;&gt; &gt;&gt; &gt; from deleting other profile advertisements written in by the system<br>
&gt; &gt; or other<br>
&gt; &gt; &gt;&gt; &gt;&gt; &gt; programs.<br>
&gt; &gt; &gt;&gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt; The XML file isn&#39;t used at runtime.  It&#39;s just a convenient mechanism<br>
&gt; &gt; &gt;&gt; &gt;&gt; to describe the interface.  The way it works is that a client<br>
&gt; &gt; connects<br>
&gt; &gt; &gt;&gt; &gt;&gt; to the server and the server will then advertise all the global<br>
&gt; &gt; &gt;&gt; &gt;&gt; objects available by giving their object id, interface name and<br>
&gt; &gt; &gt;&gt; &gt;&gt; version.  A client can then look through the list to see what&#39;s<br>
&gt; &gt; &gt;&gt; &gt;&gt; available and adjust its behaviour accordingly.<br>
&gt; &gt; &gt;&gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;&gt; Kristian<br>
&gt; &gt; &gt;&gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt; &gt;<br>
&gt; &gt; &gt;&gt; &gt; Does the XML file have a particular schema?<br>
&gt; &gt; &gt;&gt; &gt;<br>
&gt; &gt; &gt;&gt; &gt; It might be useful to install it in /usr/share so it could be used by<br>
&gt; &gt; &gt;&gt; &gt; tools. I&#39;m thinking mostly of a d-feet style introspection tool for<br>
&gt; &gt; the<br>
&gt; &gt; &gt;&gt; &gt; Wayland protocol (we could even go as far as dynamically adaptable<br>
&gt; &gt; &gt;&gt; &gt; bindings for languages like Ruby or Python).<br>
&gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt; I didn&#39;t actually write a schema for it, but if somebody with the<br>
&gt; &gt; &gt;&gt; right XML-fu could do that that would be nice.  It&#39;s a good point that<br>
&gt; &gt; &gt;&gt; dynamic languages probably just want to parse the XML directly and<br>
&gt; &gt; &gt;&gt; generate the bindings on the fly and for that we would need to install<br>
&gt; &gt; &gt;&gt; the XML.  As for introspection/logging/xscope, that&#39;s built into the<br>
&gt; &gt; &gt;&gt; server side library: set WAYLAND_DEBUG=1 and watch the requests and<br>
&gt; &gt; &gt;&gt; events fly by.<br>
&gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt; Kristian<br>
&gt; &gt; &gt;&gt; _______________________________________________<br>
&gt; &gt; &gt;&gt; wayland-devel mailing list<br>
&gt; &gt; &gt;&gt; <a href="mailto:wayland-devel@lists.freedesktop.org">wayland-devel@lists.freedesktop.org</a><br>
&gt; &gt; &gt;&gt; <a href="http://lists.freedesktop.org/mailman/listinfo/wayland-devel" target="_blank">http://lists.freedesktop.org/mailman/listinfo/wayland-devel</a><br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; _______________________________________________<br>
&gt; &gt; &gt; wayland-devel mailing list<br>
&gt; &gt; &gt; <a href="mailto:wayland-devel@lists.freedesktop.org">wayland-devel@lists.freedesktop.org</a><br>
&gt; &gt; &gt; <a href="http://lists.freedesktop.org/mailman/listinfo/wayland-devel" target="_blank">http://lists.freedesktop.org/mailman/listinfo/wayland-devel</a><br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt;<br>
<br>
&gt; _______________________________________________<br>
&gt; wayland-devel mailing list<br>
&gt; <a href="mailto:wayland-devel@lists.freedesktop.org">wayland-devel@lists.freedesktop.org</a><br>
&gt; <a href="http://lists.freedesktop.org/mailman/listinfo/wayland-devel" target="_blank">http://lists.freedesktop.org/mailman/listinfo/wayland-devel</a><br>
<br>
_______________________________________________<br>
wayland-devel mailing list<br>
<a href="mailto:wayland-devel@lists.freedesktop.org">wayland-devel@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/wayland-devel" target="_blank">http://lists.freedesktop.org/mailman/listinfo/wayland-devel</a><br>
</div></div></blockquote></div><br></div>