MarkLogic- NoSQL before NoSQL was cool

February 25, 2012

In response to NoSQL before NoSQL was cool and the proof

Advertisements

I love you, your perfect, Now Change!!!

April 24, 2010

I have been working at Marklogic now for a little short of 2 months and I must say it has been an awesome experience to work in a place where everyone shares your passion for XML development and XQuery.  I can say that I find it hard to write in any other language and have to remind myself to not to start writing let statements $var as xs:string := “xxxx” or beginning a loop as a flwor statement.  With my total love for ML and XQuery, I still find myself defending my its honor to my Java/.NET colleagues. While I may win on many levels with regards to object orientation and how imperative languages are beginning to look alot like functional languages.  And how more natural (yet verbose) XML is to Object Orientation than say the Relational model.  I don’t lose to many arguments on those points.  I think I am one to fight tooth and nail to support XQuery.  I can say that Marklogic, makes building Search and REST services a trivial effort and pretty much anything that is exposed as XML can be easily worked with.   .  Yet I have been thinking for sometime that I would love to see it evolve from XML Search Platform and XML Query Language  into the Rapid Application development Platform for____fill in the blanks_______.  This evolution needs to start with writing the next killer application that can reach the masses of developers who struggle  to develop XML applications, but rely on Java/.NET because of the lack frameworks beyond Parsing, Transforming and Searching XML.

  • We need a Rails type frameworks  for web development.
  • We need a Service Bus framework for Enterprise integration
  • We need an AOP framework that allows loose coupling between our application and business logic.
  • We need the ability to inspect and parse XQuery to support dynamic programming.
  • We need better integration with our imperative brothers and sisters.
  • We need XQuery to Change!!!!

Converting Arabic to Roman Numerals

April 13, 2009

So I spent a little time cracking my head to write a number converter for roman numerals in XQuery.  Most examples from java and such use a while loop to do the conversion.  This is not possible in xquery so to simulate the while loop using recursion the solution is very simple just use a simulated queue that pops off the values while it builds the Roman Numerals.

declare variable

$romanAlpha as xs:string* :=
(“M”, “CM”, “D”, “CD”, “C”, “XC”, “L”, “XL”,“X”,“IX”, “V”, “IV”,“I”);

declare variable $romanNums as xs:integer* :=
(1000,900,500,400,100,90,50,40,10,9,5,4,1);(:~
converts arabic number to a roman numeral
~:)


declare function local:number-to-roman($num as xs:integer){
if($num eq 0) then
“”
else if($num gt 3999) then
fn:error(xs:QName(“INVALID_ARGUMENT”),“Cannot Convert Number Larger than 3999”)
else
local:recursive-roman($num,“”,$romanNums)
};
(:~
Recursion Method used to calculate the roman numeral
~:)

declare function local:recursive-roman(
$num as xs:integer,
$alpha as xs:string,
$sequences as xs:integer*){
let $i := $sequences[1]
let $rom-a := $romanAlpha[fn:index-of($romanNums,$i)]
return
if(fn:not($sequences) and $num eq 0) then
$alpha
else
if($num gt $i) then
local:recursive-roman($num $i, fn:concat($alpha,$rom-a),$sequences)
else if($num lt $i) then
local:recursive-roman($num, $alpha,fn:remove($sequences,1))
else if($num eq $i) then
fn:concat($alpha,$rom-a)
else
$alpha
};


XQuery Reflection

September 17, 2008

I have been thinking about this issue for a while in regards to working on a Marklogic as an Xml Platform.  My wish is for an XQuery Reflection functionality that would allow me to inspect module metadata for various programming tasks such as dynamic programming, documentation stubs and plugin modules. So given a module at a specific uri, you could ask for an xml representation of the module in a serialized xml version.

[module]
module “urn:my-module”
declare namespace ns1 = http://www.myns.com
declare namespace ns2 = http://www.ns2.com
import module namespace util = “urn:my-utilities” at “../utilities.xqy”

define function map($node as element(ns2:object)) as element(ns1:object)*
{…}

xdmp:reflect(“/modules/my-lib.xqy”)

Would return:

<module>
<namespace-declaration prefix=”ns1″ uri=”http://www.myns.com”/&gt;
<namespace-declaration prefix=”ns2″ uri=”http://www.ns2.com”/&gt;
<module-declaration prefix=”util” uri=”urn:my-utilities” location=”../utilities.xqy”/>
<function name=”map”>
   <return type=”element” prefix=”ns1″ localname=”object” cardinality=”*”/>
   <parameter name=”node” type=”element” prefix=”ns2″ localname=”object” cardinality=””/> 
</module>

 Question:  How would anybody else see this being useful?