[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]
Subject: [no subject]
-----Original Message-----
From: Peter Manolescue [mailto:manolescue@pandora.be]
Sent: Tuesday, August 24, 2004 10:47 AM
To: Brian Frank; obix-xml@lists.oasis-open.org
Subject: RE: [obix-xml] obix, discovery, and more...
Sounds good. Can we make sure there is no overlap with the WS-Discovery =
and WS-MetaDataExchange proposals in the latest version of the proposed =
Devices Profile for Web Services? ( =
http://msdn.microsoft.com/library/en-us/dnglobspec/html/devprof.asp?frame=
=3Dtrue) No point in reinventing the wheel.
-----Original Message-----
From: Brian Frank [mailto:bfrank@tridium.com]=20
Sent: 20 August 2004 17:08
To: obix-xml@lists.oasis-open.org
Subject: [obix-xml] obix, discovery, and more...
I'm starting to get back into obix after a summer of distractions. =
Lately I've been doing=20
some brainstorming on our current design and how it relates to =
discovery. This process=20
has led to the following conclusions:
=20
- The main value of the work we did under the guise of the PointService =
is really to normalize
how primitives are represented and annotated with meta-data (like min, =
max, range, etc)
=20
- That led me to think that maybe the PointService is really just the =
service used to read and
write data primitives
=20
- That led me to think about the DiscoveryService as a way to read =
complex structures down
to the primitive level
=20
- That led me to think that maybe Discovery and Points is really all =
just one thing...
=20
What I am thinking is that we collapse Discovery and Points into a =
single service which I've been
thinking of as the Reflection service. To me it encapsulates two =
primary goals:
=20
- to learn the structure of any vendor's system without needing to know =
a whole bunch
of types and data structures ahead of time
=20
- to normalize key data primitives so that systems can exchange basic =
data
=20
I've been thinking about the Reflection service similar to COM's =
IDispatch or Java/.Net reflection
APIs. It lets me use a small set of wrapper types to generically =
describe and interact with the
vendor's native data model without needing to know all the gory details =
about the vendor's native
type system. =20
=20
Plus we would still use the Reflection service as a discovery and jump =
point into other more rigidly=20
defined services. Thus reflection can be used to interact with a =
vendor's system generically using
loose typing, but still let's us jump to strongly typed services for =
solving domain specific problems
like history, scheduling, or alarming.
=20
My thinking is that the reflection service provides two operations Get =
and Put. I've haven't given
a lot of thought to the exact XML syntax, but just to show an example:
=20
<Get>
<Locale>en</Locale>
<Include>
<Facets>true</Facets>
</Include>
<Depth>1</Depth>
<Id>someid</Id>
</Get>
=20
<GetResp>
<!-- root object of the get request -->
<Object>
<Id>someid</Id>
<Facets>
<Icon>/icons/happyFace.png</Icon>
</Facets>
<Children>
<!-- child object, string description -->
<Object>
<Id>description</Id>
<Type>string</Type>
<Value>someid's description</Value>
</Object>
<!-- child object, int counter with facets -->
<Object>
<Id>counter</Id>
<Type>int</Type>
<Value>73</Value>
<Facets>
<Min>0</Min>
<Max>100</Max>
</Facets>
</Object>
</Children>
</Object>
</GetResp>
=20
Does this seem like a sane way to proceed?
Brian
=20
=20
=20
------_=_NextPart_001_01C489EB.BF37532F
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META HTTP-EQUIV=3D"Content-Type" CONTENT=3D"text/html; =
charset=3Diso-8859-1">
<TITLE>Message</TITLE>
<META content=3D"MSHTML 6.00.2800.1458" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=3D#ffffff>
<DIV><SPAN class=3D642470015-24082004><FONT face=3DArial color=3D#0000ff =
size=3D2>I=20
don't think there is any overlap.</FONT></SPAN></DIV>
<DIV><SPAN class=3D642470015-24082004><FONT face=3DArial color=3D#0000ff =
size=3D2></FONT></SPAN> </DIV>
<DIV><SPAN class=3D642470015-24082004><FONT face=3DArial color=3D#0000ff =
size=3D2>Microsoft's WS-Discovery is really about using multi-casts to =
discovery=20
other</FONT></SPAN></DIV>
<DIV><SPAN class=3D642470015-24082004><FONT face=3DArial color=3D#0000ff =
size=3D2>nodes=20
on the network. I'm working from the assumption that oBIX comes=20
into</FONT></SPAN></DIV>
<DIV><SPAN class=3D642470015-24082004><FONT face=3DArial color=3D#0000ff =
size=3D2>play=20
at a later stage once I know an URI of the server I want to talk=20
to.</FONT></SPAN></DIV>
<DIV><SPAN class=3D642470015-24082004><FONT face=3DArial color=3D#0000ff =
size=3D2></FONT></SPAN> </DIV>
<DIV><SPAN class=3D642470015-24082004><FONT face=3DArial color=3D#0000ff =
size=3D2>From=20
what I understand about WS-MetaDataExchange it is primary=20
concerned</FONT></SPAN></DIV>
<DIV><SPAN class=3D642470015-24082004><FONT face=3DArial color=3D#0000ff =
size=3D2>with=20
meta-data about the plumbing, not the data model. The primary use =
case=20
</FONT></SPAN></DIV>
<DIV><SPAN class=3D642470015-24082004><FONT face=3DArial color=3D#0000ff =
size=3D2>seems=20
to be exchanging security policy information. Although it might come =
into=20
</FONT></SPAN></DIV>
<DIV><SPAN class=3D642470015-24082004><FONT face=3DArial color=3D#0000ff =
size=3D2>play=20
as </FONT></SPAN><SPAN class=3D642470015-24082004><FONT face=3DArial =
color=3D#0000ff=20
size=3D2>a way to retrieve WSDL docs from a server at =
runtime.</FONT></SPAN></DIV>
<BLOCKQUOTE dir=3Dltr style=3D"MARGIN-RIGHT: 0px">
<DIV class=3DOutlookMessageHeader dir=3Dltr align=3Dleft><FONT =
face=3DTahoma=20
size=3D2>-----Original Message-----<BR><B>From:</B> Peter Manolescue=20
[mailto:manolescue@pandora.be]<BR><B>Sent:</B> Tuesday, August 24, =
2004 10:47=20
AM<BR><B>To:</B> Brian Frank; =
obix-xml@lists.oasis-open.org<BR><B>Subject:</B>=20
RE: [obix-xml] obix, discovery, and more...<BR><BR></FONT></DIV>
<DIV><SPAN class=3D957484014-24082004><FONT face=3DArial =
color=3D#0000ff=20
size=3D2>Sounds good. Can we make sure there is no overlap with =
the=20
WS-Discovery and WS-MetaDataExchange proposals in the latest version =
of the=20
proposed Devices Profile for Web Services? (<A=20
=
href=3D"http://msdn.microsoft.com/library/en-us/dnglobspec/html/devprof.a=
sp?frame=3Dtrue">http://msdn.microsoft.com/library/en-us/dnglobspec/html/=
devprof.asp?frame=3Dtrue</A>)=20
No point in reinventing the wheel.</FONT></SPAN></DIV>
<BLOCKQUOTE dir=3Dltr style=3D"MARGIN-RIGHT: 0px">
<DIV></DIV>
<DIV class=3DOutlookMessageHeader lang=3Den-us dir=3Dltr =
align=3Dleft><FONT=20
face=3DTahoma size=3D2>-----Original Message-----<BR><B>From:</B> =
Brian Frank=20
[mailto:bfrank@tridium.com] <BR><B>Sent:</B> 20 August 2004=20
17:08<BR><B>To:</B> obix-xml@lists.oasis-open.org<BR><B>Subject:</B> =
[obix-xml] obix, discovery, and more...<BR><BR></FONT></DIV>
<DIV><FONT face=3DArial size=3D2>I'm starting to get back into obix =
after a=20
summer of distractions. Lately I've been doing </FONT></DIV>
<DIV><FONT face=3DArial size=3D2>some brainstorming on our current =
design and=20
how it relates to discovery. This process </FONT></DIV>
<DIV><FONT face=3DArial size=3D2>has led to the following=20
conclusions:</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>- The main value of the work we did =
under the=20
guise of the PointService is really to normalize</FONT></DIV>
<DIV><FONT face=3DArial size=3D2> how primitives are =
represented and=20
annotated with meta-data (like min, max, range, etc)</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>- That led me to think that maybe =
the=20
PointService is really just the service used to read =
and</FONT></DIV>
<DIV><FONT face=3DArial size=3D2> write data =
primitives</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>- That led me to think about the=20
DiscoveryService as a way to read complex structures =
down</FONT></DIV>
<DIV><FONT face=3DArial size=3D2> to the primitive =
level</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>- That led me to think that maybe =
Discovery and=20
Points is really all just one thing...</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>What I am thinking is that we =
collapse=20
Discovery and Points into a single service which I've =
been</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>thinking of as the Reflection=20
service. To me it encapsulates two primary =
goals:</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2> - to learn the structure of =
any vendor's=20
system without needing to know a whole bunch</FONT></DIV>
<DIV><FONT face=3DArial size=3D2> of types and data =
structures ahead=20
of time</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2> - to normalize key data =
primitives so=20
that systems can exchange basic data</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>I've been thinking about the =
Reflection service=20
similar to COM's IDispatch or Java/.Net reflection</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>APIs. It lets me use a small =
set of=20
wrapper types to generically describe and interact with =
the</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>vendor's native data model without =
needing to=20
know all the gory details about the vendor's native</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>type system. </FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>Plus we would still use the =
Reflection service=20
as a discovery and jump point into </FONT><FONT face=3DArial =
size=3D2>other=20
more rigidly </FONT></DIV>
<DIV><FONT face=3DArial size=3D2>defined </FONT><FONT face=3DArial=20
size=3D2>services. Thus reflection can be used to interact =
with a=20
vendor's system generically using</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>loose typing, but still let's us =
jump to=20
strongly typed services for solving domain specific </FONT><FONT =
face=3DArial=20
size=3D2>problems</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>like history, scheduling, or=20
alarming.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>My thinking is that the reflection =
service=20
provides two operations Get and Put. I've haven't =
given</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>a lot of thought to the exact XML =
syntax, but=20
just to show an example:</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DCourier size=3D2><Get></FONT></DIV>
<DIV><FONT face=3DCourier size=3D2> =20
<Locale>en</Locale></FONT></DIV>
<DIV><FONT face=3DCourier size=3D2> =
<Include></FONT></DIV><FONT=20
size=3D2><FONT size=3D2>
<DIV><FONT face=3DCourier size=3D2> =20
<Facets>true</Facets></FONT></DIV>
<DIV><FONT face=3DCourier> </Include></FONT></DIV>
<DIV>
<DIV><FONT face=3DCourier> =20
<Depth>1</Depth></FONT></DIV><FONT face=3DCourier> =
<Id>someid</Id></FONT></FONT></DIV>
<DIV><FONT face=3DCourier></Get></FONT></DIV>
<DIV><FONT face=3DCourier></FONT> </DIV>
<DIV><FONT face=3DCourier><GetResp></FONT></DIV>
<DIV><FONT face=3DCourier> <FONT color=3D#008000><!-- root =
object of=20
the get request --></FONT></FONT></DIV>
<DIV><FONT face=3DCourier> <Object></FONT></DIV>
<DIV><FONT face=3DCourier> =20
<Id>someid</Id></FONT></DIV>
<DIV><FONT =
face=3DCourier> <Facets></FONT></DIV>
<DIV><FONT face=3DCourier> =20
<Icon>/icons/happyFace.png</Icon></FONT></DIV>
<DIV><FONT face=3DCourier>
<DIV><FONT=20
=
face=3DCourier> </Facets></FONT></DIV> =
=20
<Children></FONT></DIV>
<DIV>
<DIV><FONT face=3DCourier> <FONT=20
color=3D#008000><!-- child object, string description=20
--></FONT></FONT></DIV><FONT=20
face=3DCourier> =20
<Object></FONT></DIV>
<DIV>
<DIV>
<DIV>
<DIV><FONT face=3DCourier> =
=20
<Id>description</Id></FONT></DIV><FONT=20
face=3DCourier> =20
<Type>string</Type></FONT></DIV>
<DIV><FONT =
face=3DCourier> =20
<Value>someid's description</Value></FONT></DIV><FONT=20
face=3DCourier> =20
</Object></FONT></DIV>
<DIV>
<DIV><FONT face=3DCourier> <FONT=20
color=3D#008000><!-- child object, int counter with=20
facets --></FONT></FONT></DIV><FONT=20
face=3DCourier> =20
<Object></FONT></DIV>
<DIV>
<DIV>
<DIV>
<DIV><FONT face=3DCourier> =
=20
<Id>counter</Id></FONT></DIV><FONT=20
face=3DCourier> =20
<Type>int</Type></FONT></DIV>
<DIV><FONT =
face=3DCourier> =20
<Value>73</Value></FONT></DIV>
<DIV><FONT =
face=3DCourier> =20
<Facets></FONT></DIV>
<DIV><FONT=20
=
face=3DCourier> &nbs=
p;=20
<Min>0</Min></FONT></DIV>
<DIV>
<DIV><FONT=20
=
face=3DCourier> &nbs=
p;=20
<Max>100</Max></FONT></DIV><FONT=20
face=3DCourier> =20
</Facets></FONT></DIV><FONT=20
face=3DCourier> =20
</Object></FONT></DIV><FONT face=3DCourier> =20
</Children></FONT></DIV></DIV>
<DIV><FONT face=3DCourier> </Object></FONT></DIV>
<DIV><FONT face=3DCourier></GetResp></FONT></FONT></DIV>
<DIV><FONT face=3D"Courier New"></FONT> </DIV><PRE><FONT =
face=3DArial size=3D2>Does this seem like a sane way to =
proceed?</FONT></PRE><PRE><FONT face=3DArial =
size=3D2>Brian</FONT></PRE><PRE> </PRE>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial=20
size=3D2></FONT> </DIV></BLOCKQUOTE></BLOCKQUOTE></BODY></HTML>
------_=_NextPart_001_01C489EB.BF37532F--
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]