Re: Datamodel Strawman (ACTION-298)

Xpath expressions returns a list of nodes, and nodes can be elements, 
attributes, and typed literal values.  So we'd need at minimum some kind 
of list in RIF (which we've talked about quite a bit), and I don't know 
what you do about elements and attributes.  Forbid them?  Introduce an 
opaque nodeId?

My worry is that a big component of a data model is the relationships 
among the types/classes.  I would expect to be able to reason about 
those relationships using rules.  E.g. find the mothers of twins in a 
family tree expressed in an xml document.  I don't know how to do that 
if all I can do is pick out typed literal values (leaves) from that xml 
document using an xpath builtin. 

Dave Reynolds wrote:

>
> Gary Hallmark wrote:
>
>>
>> You think adding xpath to RIF is easier than adding generic lists and 
>> frame types?  
>
>
> No. But it may be easier than adding a type/class system for typed 
> frames that is compatible with both RDFS/OWL classes and XMLSchema 
> complex types without giving an appearance of duplication.
>
>> Does xpath have a model theory?  
>
>
> No, I don't think so, but it is not a logic language so one wouldn't 
> expect it to.
>
>> If it did, would it be compatible with RIF's?
>
>
> Doesn't need to be. The Xpath accessors would simply be builtins 
> working over an opaque datatype, pure side-effect-free functions, no 
> worries :-)
>
> Dave
>
>>
>> Christian de Sainte Marie wrote:
>>
>>> Gary,
>>>
>>> Gary Hallmark wrote:
>>>
>>>> The statement for this action reads "Show how to use XML Schema for 
>>>> App Data Model".
>>>> This begs the question: what is an "App Data Model"?  I believe 
>>>> that we must define such a thing in RIF, and only then can we 
>>>> define a mapping between XML Schema (or relational databases, or 
>>>> OWL, or RDFS, etc.) and this RIF Data Model (RDM).
>>>
>>>
>>> During F2F6, in Innsbruck, there seemed to be broad agreement that 
>>> RIF should not invent its own data model/schema language, as Dave 
>>> and Paul point out.
>>>
>>> The action to "show how to use an XML schema for ADM" was seen as 
>>> necessary because it was felt that, although several participants 
>>> (including myself) contented that being able to use a data model 
>>> specified in an XML Schema (or DTD) was a requirement, nobody seemed 
>>> to have a precise idea of what it meant.
>>>
>>> As I understand it, there are basically two places where we may need 
>>> the reference to an external, or application data model:
>>>
>>> 1. when specifying the type of a variable beyond the builtin types 
>>> (and of a slot if we decide that RIF should allow type checking);
>>>
>>> 2. when navigating a data source, that is, to specify data accessors.
>>>
>>> As regards case 1, I suppose that a QName is all we need (in 
>>> addition to  the metadata that will tell us what this ruleset 
>>> requires, e.g. a data model represented by an XML schema, the URI of 
>>> that schema etc).
>>>
>>> As regards case 2, as I understand it, it is the 'op' property of an 
>>> UNITERM that specifies the path to the data to be accessed, where 
>>> the 'args' give the context.
>>>
>>> E.g., suppose that the data model is specified by the XML Schema in 
>>> [1], and that there is a rule that says (informally) (taken from the 
>>> MISMO POC [2]:
>>>
>>> Forall ?R: Root()
>>> If ?R.division="wholesale" and ?R.occupancy="Investors"
>>> Then r.occupancyAdjustment = 0.95d
>>>
>>> The RIF XML could be (probably not compliant with Sandro's proposed 
>>> rules, but that is not the purpose):
>>>
>>> <Ruleset xmlns:mismo="(the URL in [1]">
>>> ...
>>>   <Rule>
>>>      <Forall>
>>>         <declare>
>>>            <Var>
>>>               <name>?R</name>
>>>               <type>mismo:root</type>
>>>            </Var>
>>>         </declare>
>>>      <if>
>>>         <And>
>>>            <Equal>
>>>               <side>
>>>                  (*) Here we would like something like an XPath expr 
>>> selecting the "division" element where the value of ?R is the context
>>>               </side>
>>>               <side>"wholesale"</side>
>>>  ...
>>>
>>> (*) E.g. <Uniterm><op>mismo:division</op><arg>?R</arg></Uniterm>, 
>>> where the arg could itself be another uniterm if we needed to 
>>> navigate deeper; or a single 'op' could be a complete XPath 
>>> expression; etc. The slotted syntax may be more appropriate for that 
>>> case, btw.
>>>
>>> The question is: if there is a standard way, associated to the data 
>>> model, to navigate the source - e.g. XPath if the data model is an 
>>> DTD or XML Schema,etc -, should that be the syntax for accessors 
>>> (and thus the syntax for accessor 'op's or slots may vary depending 
>>> on the data model? Or does RIF need to define a RIF "data source 
>>> navigation language" that works for, e.g., XML-S, RDF-S OWL, etc?
>>>
>>> Christian
>>>
>>> [1] 
>>> http://anonsvn.labs.jboss.com/labs/jbossrules/contrib/apocrif/jrules/src/test/resources/xsd/mismo.xsd 
>>>
>>> [2] 
>>> http://anonsvn.labs.jboss.com/labs/jbossrules/contrib/apocrif/jrules/src/test/resources/irl/mismo2.irl 
>>>
>>>
>>
>

-- 


Oracle <http://www.oracle.com>
Gary Hallmark | Architect | +1.503.525.8043
Oracle Server Technologies
1211 SW 5th Avenue, Suite 800
Portland, OR 97204

Received on Friday, 20 July 2007 17:20:03 UTC