[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [Elist Home]
Subject: A DBA perspective.
This morning a explored the thought -
'How would a DBA do all this?'.
And then I reviewed Farrukh's XML and XSL examples
on XPath.
The two appeared to be heading to the same point
in time and space (attached corrected XML file BTW).
What I did notice too - is that the XPath approach was
dictating a lot of element content that I'm not at all
sure I'm confortable with - but as you will see shortly
this will no longer be an issue.
Ok - a DBA #1 would not open up their datastore to
generalized queries from Joe Public! This opens
up too many security and content access issues.
Instead they offer a set of customized stored procedures
and grant access rights to run them.
Quite simply this is the way to go! Farrukh's little list of
XSL scripts is already mapping out a set of procedures.
Now - notice if we marry this to the containered query
approach - we get a simple abstraction layer - and
BEST OF ALL - we no longer care about what
query syntax is being used! Finally we have a
simple model and get ourselves out from underneath
trying to microengineer this.
i.e. We simply state what the access functions are,
and what parameter values they accept, and
develop these from the business use cases.
Lots of other good things start falling into place.
We create sets of procedures based on the
RIM and our use case models - and group
them accordingly. Now implementors can
build to support these, conformance testing
can validate them, and the long term we can
extend the sets as feedback indicates nice to
have others. And we can groups sets into
'Must haves', 'Nice to haves' and 'Vendor / Industry
extensions'. We can even build a classification
scheme so we can discover these online via
drilldown and long term get out from under even
having to manage the list of procedures!
And we get out from under having to recommend
lowlevel storage structures!! Even better - we really don't
care how the information is stored internally - so
long as the prescribed procedures return the
right results to the information model.
OK - how do we implement this all? Turns out
its a simple extension to the model I already
posted - adding a new type of 'PROCEDURE' to
the query list, and then extending the <value> block
so that it can becomes values(value+).
Here's the updated DTD and sample, and
a first cut at a list of RIM Procedures and Groups.
RIM Procedures
o Classification
- getClassifedObjects
- getClassificationTree
- getRootClassificationNode
o Association
- getAssociatedObjects
- getObjectsByExternalLink
o Content
- getObjectByName
o Package
- get ObjectsByPackage
o BusinessFunction
- getSupplierCPP
- getObjectsByOrganization
- getObjectsByIndustryClassification
o RegistrySupport
- getRegistryFunctions
- getRegistryTRP
and here is the supporting XML:
The ebXML Registry Ad Hoc Query Accessing
Pass an XML command container that consists
of:
1) Locator + comparitor + (value | valuelist) = query term(s).
a) Valid Locators:
(i) A tag name (any path context)
(ii) Tag root path (specific path context)
(iii) A supported Registry Procedure name.
(iv) GUID or UID or URN
(v) "*" = match any text (HTML style on content)
2) Valid Comparitors:
(i) EQUALS-STRING
(ii) EQUALS-DATE
(iii) LESS-THAN
(iv) GREATER-THAN
(v) IS-EARLIER-THAN
(vi) IS-LATER-THAN
(vii) CONTAINS-STRING
(viii) MATCH
These are based on the OASIS registry query list drafts.
Notice if you wanted to do a subset we could lose
3 of these that are date specific and do string
comparisons only - since current
XML is not typed on dates.
3) Value = string or datestring (YYYY-MM-DD only)
4) Valid joins - OR, AND; NOT OR, NOT AND
Now to insert these into the DTD's for registry access
you simply need to add:
<!ELEMENT RequestItem (RegistryItem)>
<!ATTLIST RequestItem
Action (queryURI | queryContent | queryRAW ) #REQUIRED
>
<!-- Allows specification of Registry information model -->
<!-- compliant references to actual content. -->
<!ELEMENT Locator (term+)>
<!ELEMENT value (#PCDATA)>
<!ELEMENT values (value+)>
<!ELEMENT term (value | values)>
<!ATTLIST term
tagpath CDATA #REQUIRED
tagmode CDATA ( PROCEDURE | TAG | PATH | GUID | UID | URN | ANY )
#REQUIRED
operator (EQUALS-STRING | CONTAINS-STRING | IS-EARLIER-THAN |
IS-LATER-THAN | GREATER-THAN | LESS-THAN | MATCH ) #REQUIRED
join CDATA ( OR | AND | NOT OR | NOT AND | END-QUERY ) #REQUIRED
>
A sample query term would then be:
<requestItem
Action="queryURI">
<RegistryItem/>
</requestItem>
<locator>
<term tagpath="getObjectsByIndustryClassification" tagmode="PROCEDURE"
operator="MATCH"
join="AND">
<values>
<value>GROCERY</value>
<value>DRINK</value>
<value>WINE</value>
</values>
</term>
<term tagpath="country" tagmode="TAG"
operator="EQUALS-STRING"
join="AND" >
<value>FRANCE</value>
</term>
<term tagpath="grape" tagmode="TAG"
operator="CONTAINS-STRING"
join="END-QUERY" >
<value>MERLO</value>
</term>
</locator>
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [Elist Home]
Powered by eList eXpress LLC