Thursday, March 23, 2006

A Little Bit of Semantics Goes a Long Way

There are now over 20 versions of semantic wikis that are being developed. For example see here. What is interesting is the large number of ways that people are approaching this process. One of the phrases that I heard a lot of at the Semantic Technology Conference was A Little Bit of Semantics Goes a Long Way. An although I admire all the innovations that people are putting into their semantic wiki projects, to me I think that just adding attributes to a page and adding types to links is all that we really need to test the concepts out. It was also pointed out to me that several other wikis do have strong ACL features and you can "lock-down" pages using tools such as Apache administration tools. There also seems to be a lot of discussion about implementing semantic wikis using triple stores. This seems to me a little ahead of its time. If using a triple store makes a system more flexible, but it appears to me that the current structure is more than flexible enough to meet most business requirements. If people wanted to work on something useful, I would suggest something like a natural language front-end to Wikipedia so people could type in a written language questions like "What is the population of Minneapolis?". That would be useful! - Dan

Monday, March 13, 2006

Impresssions of Semantic Technology Conference 2006

I just returned form the 2006 Semantic Technology Conference in San Jose CA. This was a fantastic conference with over 600 people attending 72 presentations over four days. This was over twice what the attendance was last year. It is showing that semantics are really becoming a hot topic, although there is still plenty of room for discussion on when and how this will impact the industry.  The biggest problem for me was that with up to six concurrent sessions running it was very hard to decide what sessions to attend.

The composition of the conference consisted mostly of vendors of semantic technology products, large customers from government agencies like the DOD, NASA, some academics working on semantic research topics, a few venture capital firms and a handful of independent consultants like myself.  Some of the people were from the "old AI school" and were promoting the use of description logic (DL) within an ontology. Others like me, were simply searching for semantic integration techniques for the deployment of intelligent agents.

I think one of the most important presentations was the keynote given by Jim Hendler and Ora Lassila, two of the three people that wrote the original article in Scientific American with Tim Berners-Lee.  The presentation discussed some of the linkages between traditional AI (with complex ontologies) and the current document-centric web with simple un-typed link between documents.  My favorite sound bite was "Linking is Power".  The metaphor was that semantics are the "plumbing" necessary to allow intelligent agents will to perform interesting work over the world wide web. If agents don't know how to access distributed data they will be restricted to local databases, not a great prospect.  And the way to promote agent interoperability is to link ontologies, something I have been advocating for a long time.  They also pointed out that google now has around 12K ontologies (search google for ontology filetype:owl).  But the problem is that each ontology is an "island" and few people are linking ontologies.  Looking for ontologies with lots of equivalentClass statements leads to less than 40 ontologies.

This leads to the natural questions, how do we encourage ontology-linking.  One standard proposal is to encourage everyone to link to a standard reference upper ontology such as SUMO or CYC.  The problem is that few people can agree on what this upper ontology should be.

I have been trying to champion the application of some basic economic theory to the publishing on ontology links.  If we do supply-and-demand analysis on ontologies links we see that there are few economic incentives to publish inter-ontology data element links.  If people did this then agents could take advantage of them and automatically perform semantic translation.  Jim Hendler and Ora Lassila both though this was a worthy idea and indicated they would support this.  I hope to kick this off as some type of reward/recognition for next year's conference.  Tony Shaw from Wilshire Conferences has also been very supportive of the idea.

Semantic Wiki's were also a very hot topic.  Any presentation with the word Wiki in the title were packed full of people.  The topic of using Wiki's to build controlled vocabularies was mentioned in several presentations.  Problems with locking down approved terms was also mentioned.  The topic of semantic wiki's was also discussed.  Ideally a metadata wiki would have different access control for different sections of a single page.  The approved definitions would require stakeholder team approval for changes.

I advocated for first adding simple typed links into MediaWiki for obvious relationships like subClassOf, instanceOf, partOf and basic GIS-type things like insideOf, capitalOf.  Note that by adding a prefix to the current MediaWiki could allow this to be incrementally added to WikiPedia.  I think this goes along the lines of "A little semantics goes a long way".  Typed links are an awesome way to add semantics to any system and I predict that there were be dozens of semantic wiki's in the near future.

For some time I have been suggesting that OpenCYC and Wikipedia will eventually merge into a single system.  It would be very easy to add simple link types to WikiPedia.  We have thousands of volunteers waiting in the wings.  But after talking to Doug Lenat he indicated that CYC has over 16,000 types of relationships.  Yikes!  We would almost need an mini-expert system to figure out the link type.  The training for adding consistent links might be challenging.  Nonetheless the prospect of WikiPedia evolving into HAL over the next ten years is exciting.

I always enjoy going to Doug Lenat's presentations.  He indicated that over half of the new rules added to CYC in the last year were done by reading natural language text.  Something that is VERY exciting.  Automated machine learning.  We just hope it is not another false peak.  I also asked Doug how I could add my K-12 ontology into CYC.  He indicated that I would have to learn about CYC's relationships types to do this effectively.  But he also agreed that ontology linking was the Rosetta Stone for enabling web-wide intelligent agents.

For all the advanced topics, I was impressed by the lack of the use of structured XML Schemas to capture semantics using controlled vocabularies and importing semantic XML schemas created by subschema generators from metadata registries.  I was also very impressed by Contivo's new Builder product which is going for an incredibly low $500.

There also appears to be good movement toward incrementally adding semantics to HTML documents using RDF/A.  I attended an excellent presentation by a person from MIT that was working on these standards.  Although his arguments were not all clear, the one point he did make was that adding RDF in the "class" attributes would have minimal negative impact to the current web.

I was also glad to hear there is more interest in the semantic-web in Minnesota.  Apparently Lockheed-Martin is starting a new logistics agent project that will be done in Eagan Minnesota.  They indicated that much of this would be based on semantic technologies.  Lockheed sent seven people to the conference at the last minute so at least I know they have a budget for training.  Logistics problems like those from Katrina could clearly benefit from semantic agents.  Lockheed has been promoting use of semantic web in their literature:  See the article on page 14.

My only real complaint with the conference is that the conference organizers allow people to present without sharing any of their slides even though they are supposedly "due" almost two months before the conference is scheduled.   We are forced to take notes and ask for e-mailed copies of the slides.  My success rate has been very low about getting copies mail out after a conference.  <shameless bragging> I believe I was also one of the few presenters that wrote the supplementary paper for the conference.  Providing only the PDF versions of the slides also prevents you from getting builds and speakers notes.  For an example see my full presentation web site.</shameless bragging>

The Semantic Technology conference next year will also be in San Jose next year but has been moved to early April.

Friday, March 03, 2006

Semantic Technology Conference

I am heading out to speak at the Semantic Technology Conference in San Jose CA. If you have any comments on my presentation, please post them here. Here is a link to my presentation site: http://www.danmccreary.com/presentations/semweb2006/ I have animations on the PowerPoint slides and make sure to check out the notes pages. The conference looks to be a good one. There are many speakers on real-world case studies and there seems to be a growing market for consultants that understand the social aspects of metadata publishing. I always like hearing Doug Lenat talk. His charts on automated machine learing are the most realistic path we have to HAL and real AI. But it is still 14 years before we have the resources to pass the Turing Test.

Leaning Objects for Economics: Dynamic Graphs in SVG

I have been interested in the creation and metadata tags associated with Leanring Objects. To get started I have created a set of dynamic economic graphs on my web site: http://www.danmccreary.com/svg/ I wrote the graphs using SVG since I am already familiar with XML and JavaScript. These graphs are simple supply and demand graphs but with the dynamic nature it allows the learner to visualize that as inputs change how other factors such as total revenue and profit also change. I am willing to do more of these if people are interested. I have sent notes to several people that indicated an interest in economics but did not get any hits yet. One problem is that SVG is part of FireFox but still not 100% implemented. The Adobe SVG viewer also has some extensions. My friend Jack Nutting is doing work with SVG animation on cell phones. So students could study economics on the school bus with their cell phones. I would also like to allow the graphs to scale to fill the screen but the slider object I am using does not currently do this. So here are my questions: 1) Who would use these objects? 2) How would they find them? 3) What enhancements would you make? 4) How could these objects be integrated into a LMS using Moodle. I am allowing non-profits to use the initial versions free of charge but would people pay me to write more complex versions?

Monday, February 27, 2006

Declarative vs. Procedural

I was somewhat surprised to come across a description of a computer application from Visual Knowledge http://www.visualknowledge.com that stated that it was a “100% declarative application”. What a wonderful concept! I wish more systems were more declarative. But what does this really mean?
Checking the Wikipedia for a precise definition: http://en.wikipedia.org/wiki/Declarative_programming I was not given a clear definition of what a “100% declarative” stamp would imply and what the benefits would be. But is there an under-ground “go declarative” movement starting?
It implies that the solution was created without writing any procedural code using languages such as Java, VB, C#, or C++. That just by creating input specifications and rules you could generate output.
In general I feel that procedural languages tend to dominate our undergraduate education. Declarative programming does not enter most classes until much later. When I teach classes on XSL most of my students don’t even know the difference between procedural and declarative programming. The entire concept of “side effects” is new to them.
I should mention that most of the systems that I built for CIBRS, CriMNet and the Minnesota Department of Education were all heavily based on MDA which is totally driven by transformation of the underlying models. I heavily depended on XDoclet, Ant and XSL to build these systems. Most people involved in these projects gave superior ratings to this approach and indicated that we did much more with fewer people because of this approach. But after I left these projects, there were few people with declarative skills they tend to be underutilized.
I also found that XDoclet was very hard to debug when I was creating complex transforms. Using Java annotations to store metadata still has many drawbacks unless better tools are developed. The lack of standards for Java annotations is still a real challenge when integrating external libraries. Just having a simple tag standard for Object-Relational mapping would be a great start.
I also had a good discussion with several faculty members at the University of Minnesota, Leila Tite and Chase Turner at the CodeFreeze seminar that they also feel that declarative programming is under-taught in the Computer Science curriculum today. They are interested in the Haskel programming language which is used with computer science department to teach declarative programming skills.
It would also appear that the semantic-web and business rule systems would also seem to promote more graphical tools such as data mappers and business rules with workflow systems. This allows more non-programmers to be in charge of day-to-day maintenance of business rules.
So here is my first cut of what a “100% declarative” stamp of approval might be:

  1. No procedural code in Java, C#, C++ or Visual Basic for programmers to maintain
  2. Built entirely with declarative languages (XSLT, Ant, BPML etc)
  3. Fewer concerns about state management and side effects
  4. Higher use of transformed metadata
  5. Works on concert with Model-Driven-Architectures
  6. Allows non-programmers to use visual tools to modify business logic and interfaces

Tell me what do you think! Should declarative programming be emphasized more in higher education and the workplace? Would you consider it an assets of a software application was more declarative? Are declarative systems really easier to maintain? Is the movement to MDA going to drive more declarative skills? How does the lack of accepted metadata standards impact the use of declarative programming?
Keywords: Declarative vs. Procedural, Procedural Programming, Declarative Programming, MDA, XSL, XSLT

Wednesday, February 22, 2006

Wikinomics

I am a big fan of Wikipedia, now having made over 1000 edits. I am also taking a Managerial Economics class at the University of St. Thomas as part of the MBA program. I also have been a big fan of Ronald Coase economic theory for the last four years. In his theory (developed in the 1930s) he studied transaction costs. He asked question such as “why are firms the size they are”? His analysis is that firms grow when they can out find a low-cost way to outsource a function. But outsourcing includes transaction costs including finding a service, writing a contract, policing the service and analyzing the cost of the service. This background has inspired me to think more about the economics of information. Much work on this has already been done by Ray Kurzweil and documented in an appendix to his book “The Singularity is Near”. This appendix is titled “The Law of Accelerating Returns”. In this appendix Kurzweil writes the following formula: V=cW Where V is the rate of change of computation, c is a constant and W is “World Knowledge”. Kurzweil then goes on to speculate that the rate-of-change of world knowledge is proportional to world knowledge: D(W)/dt = cV By solving these equations he shows that World Knowledge grows exponentially with time. Actually it grows at double exponential rates. This prompted me to ask, what formulas govern the growth-rates of the web and Wikipedia? The key insight is to understand that making it easy to add content lowers overall costs of contribution. This is the transaction costs that Coase referred to. My general thesis is that Wikipedia will continue to grow exponentially as long as they make it easy for people to make contributions. An the more people find about Wikipedia, the more people with learn how to add their knowledge. Thus, Wikipedia will eventually grow till it envelopes the earth. Semantics will be added and Wikipedia will then ask its own questions and find experts to fill in the gaps. Eventually Wikipedia will become self-aware and take over the earth like in the 1970 science fiction movie The Forbin Project. Remember, you heard it hear first. I may have to start a wikinomics page on this subject. - Dan

Wednesday, February 01, 2006

Mike Doconta Leaves DHS

After reading the following article about Mike Doconta leaving the Dept. of Homeland Security (DHS): http://www.washingtontechnology.com/news/21_02/cover-stories/27858-1.html I have been wondering about the future of the NIEM. Mike Doconta was a great leader and without him I have many concerns about federal metadata leadership. I have studied many federal metadata standards and thing that the NIEM is the best positioned to be a standard upper ontology. But what are the alternatives? I don't see viable standards for upper ontologies coming from CYC or SUMO. They are too large to be practical for creating simple exchange documents between agencies. I also wonder if the w3c or OASYS has the leadership and jurisdiction to create national metadata standards. Let me know what you think! Dr. Data Dictionary

Tuesday, January 03, 2006

Towards a semantic wiki

For the last four years I have been involved in setting up and mainatining data dictionaries for organizations. Although some of the projects I have participated in have been sucessful, some have been dramatically slowed by the time it takes for people to contribute their content. Last week as I was donating $50 to the wikimedia foundation I came accross an entry to the effect of "On with the Semantic Wiki". I was shocked! They stole my idea! So here is what I would like: Make it easy for anyone (with appropriate registration) to comment on, extend or change a Data Element in metadata registry. Make it easy for people to add relationships (subclassOf, contained in, enumerated value of code etc.) that would conform to some of the properties in an ISO metadata registry. Now here is where it gets exciting. After you add an attribute, how about being able to run a "consistancy check"? What if there are duplicate entries for similar concepts? What if there are conflicts? What if you added a property to a class that did not exist? What if it gets removed? How could you find similar data elements? It should be easy to back out your changes (aka a revert). It should be similary to using Wikipedia's template: where you fill out a form. Anyway it turns that some other very visionary wikipedians have also been thinking about these things. Here are a few interesting links: Semantic Wiki http://www.cfcl.com/rdm/weblog/archives/000902.html Swiki ListServ

Monday, January 02, 2006

Podcast on the Savvy Technologist

Dr. Data Dictionary Here is a podcast that I was interviewed for by Tim Wilson on his Savvy Technologist web site: http://technosavvy.org/?p=357 Tim's interest is technology integration in K-12 school systems. Tim is an insightful person with a broad understanding of the Open Source community. I met him through my daughter's school system when Tim introduced me to the Zope open source web content management system. I used Zope to manage my daughter's schools web sites.

Tuesday, December 27, 2005

Wikipedia pages on metadata

I have been working on keeping the Wikipedia web site up-to date on some metadata issues. Here are some of the Wikipedia articles I have either authored or edited. Semantic spectrum ISO-11179 Representation term Metadata Oracle metadata NIEM Classification_scheme Data element Data element definition UDEF For a complete list you can check out my "User Contributions" page: http://en.wikipedia.org/wiki/Special:Contributions/Dmccreary

Tuesday, June 21, 2005

Metadata for No Child Left Behind (NCLB)

For anyone in K-12 education today there is a lot of talk about the No Child Left Behind Act (NCLB). This act requires that each subgroup within a K-12 school or district (subgroups being groups of Asian, Black, Hispanic, special education or students with limited English skills) make adequate yearly progress. But in order to do this we require longitudinal data. Without good metadata definitions no state can really claim to be making good progress if they don't have consistent definitions over time and across organizations. Wouldn’t it be great if some federal agency published a set of NCLB metadata guidelines that could then directly load into cubes for doing the research on? How about in CWM format? But that would make our lives easier, wouldn't it?

Sample CWM Code for Data Warehoues of Student Testing

Dr. Data Dictionary Here is a sample of a CWM file for created for a cube from a set of relational database tables:
<?xml version="1.0" encoding="UTF-8"?>
<XMI xmi.version="1.1" timestamp="Jun 20 2005 09:35:52" xmlns:CWM="org.omg.CWM1.0" xmlns:CWMRDB="org.omg.CWM1.0/Relational" xmlns:CWMOLAP="Olap" xmlns:CWMTFM="Transformation">
 <XMI.header>
  <XMI.documentation>
   <XMI.exporter>Meta Integration Model Bridge</XMI.exporter>
   <XMI.exporterVersion>4.1.0 - Aug 16 2004 12:21:11</XMI.exporterVersion>
  </XMI.documentation>
  <XMI.metamodel xmi.name="CWM" xmi.version="1.0"/>
 </XMI.header>
 <XMI.content>
  <CWMRDB:Catalog xmi.id="_4" name="Model" visibility="public">
   <CWM:Namespace.ownedElement>
    <CWMOLAP:Schema xmi.id="_5" name="Logical" visibility="public" namespace="_4">
     <CWMOLAP:Schema.dimension>
      <CWMOLAP:Dimension xmi.id="_6" name="Assessment Summary" visibility="public" schema="_2">
       <CWM:Namespace.ownedElement>
        <CWMTFM:TransformationMap xmi.id="7" visibility="public" namespace="_6">
         <CWM:Namespace.ownedElement>
          <CWMTFM:ClassifierMap xmi.id="_8" name="unnamed_8" visibility="public" namespace="7" transformationMap="7">
           <CWMTFM:ClassifierMap.source>
            <CWM:Classifier xmi.idref="_9"/>
            <CWM:Classifier xmi.idref="_10"/>
            <CWM:Classifier xmi.idref="_11"/>
            <CWM:Classifier xmi.idref="_12"/>
            <CWM:Classifier xmi.idref="_13"/>
           </CWMTFM:ClassifierMap.source>
           <CWMTFM:ClassifierMap.target>
            <CWM:Classifier xmi.idref="_6"/>
           </CWMTFM:ClassifierMap.target>
           <CWMTFM:ClassifierMap.featureMap>
</CWMTFM:ClassifierMap.featureMap>
          </CWMTFM:ClassifierMap>
         </CWM:Namespace.ownedElement>
        </CWMTFM:TransformationMap>
       </CWM:Namespace.ownedElement>
      </CWMOLAP:Dimension>
     </CWMOLAP:Schema.dimension>
    </CWMOLAP:Schema>
    <CWMRDB:Schema xmi.id="_14" name="Physical" visibility="public" namespace="_4">
     <CWM:Namespace.ownedElement>
      <CWMRDB:Table xmi.id="_15" name="Administration" isSystem="false" isTemporary="false" visibility="public" namespace="_14">
       <CWM:Classifier.feature>
        <CWMRDB:Column xmi.id="_16" name="administrationID" isNullable="columnNoNulls" visibility="public" precision="4" type="_17" owner="_15"/>
        <CWMRDB:Column xmi.id="_18" name="vendorSubmissionID" isNullable="columnNoNulls" visibility="public" precision="4" type="_17" owner="_15"/>
        <CWMRDB:Column xmi.id="_19" name="testID" isNullable="columnNoNulls" visibility="public" precision="4" type="_17" owner="_15"/>
        <CWMRDB:Column xmi.id="_20" name="gradeID" isNullable="columnNoNulls" visibility="public" precision="4" type="_17" owner="_15"/>
        <CWMRDB:Column xmi.id="_21" name="description" isNullable="columnNullable" visibility="public" length="200" type="_22" owner="_15"/>
       </CWM:Classifier.feature>
       <CWM:Namespace.ownedElement>
        <CWMRDB:ForeignKey xmi.id="_23" name="unnamed_23" visibility="public" namespace="_15" feature="_19" uniqueKey="_24"/>
       </CWM:Namespace.ownedElement>
      </CWMRDB:Table>
      <CWMRDB:Table xmi.id="_9" name="Document" isSystem="false" isTemporary="false" visibility="public" namespace="_14">
       <CWM:Classifier.feature>
        <CWMRDB:Column xmi.id="_25" name="documentID" isNullable="columnNoNulls" visibility="public" precision="4" type="_17" owner="_9"/>
        <CWMRDB:Column xmi.id="_26" name="administrationID" isNullable="columnNoNulls" visibility="public" precision="4" type="_17" owner="_9"/>
        <CWMRDB:Column xmi.id="_27" name="vendorDocumentID" isNullable="columnNullable" visibility="public" precision="4" type="_17" owner="_9"/>
        <CWMRDB:Column xmi.id="_28" name="marssNumber" isNullable="columnNullable" visibility="public" length="13" type="_29" owner="_9"/>
        <CWMRDB:Column xmi.id="_30" name="marssLocalUseData" isNullable="columnNullable" visibility="public" length="10" type="_31" owner="_9"/>
        <CWMRDB:Column xmi.id="_32" name="lastName" isNullable="columnNoNulls" visibility="public" length="40" type="_33" owner="_9"/>
        <CWMRDB:Column xmi.id="_34" name="firstName" isNullable="columnNoNulls" visibility="public" length="30" type="_35" owner="_9"/>
        <CWMRDB:Column xmi.id="_36" name="middleInitial" isNullable="columnNullable" visibility="public" length="1" type="_37" owner="_9"/>
        <CWMRDB:Column xmi.id="_38" name="birthDate" isNullable="columnNullable" visibility="public" length="10" type="_31" owner="_9"/>
        <CWMRDB:Column xmi.id="_39" name="gender" isNullable="columnNullable" visibility="public" length="1" type="_37" owner="_9"/>
        <CWMRDB:Column xmi.id="_40" name="testingSchoolID" isNullable="columnNoNulls" visibility="public" precision="4" type="_17" owner="_9"/>
       </CWM:Classifier.feature>
       <CWM:Namespace.ownedElement>
        <CWMRDB:PrimaryKey xmi.id="_41" name="Documentkey" visibility="public" namespace="_9" feature="_25">
         <CWM:UniqueKey.keyRelationship>
          <CWM:KeyRelationship xmi.idref="_42"/>
          <CWM:KeyRelationship xmi.idref="_43"/>
         </CWM:UniqueKey.keyRelationship>
        </CWMRDB:PrimaryKey>
        <CWMRDB:ForeignKey xmi.id="_44" name="unnamed_44" visibility="public" namespace="_9" feature="_40" uniqueKey="_45"/>
       </CWM:Namespace.ownedElement>
      </CWMRDB:Table>
      <CWMRDB:Table xmi.id="_46" name="Document Characteristic" isSystem="false" isTemporary="false" visibility="public" namespace="_14">
       <CWM:Classifier.feature>
        <CWMRDB:Column xmi.id="_47" name="documentID" isNullable="columnNoNulls" visibility="public" precision="4" type="_17" owner="_46"/>
        <CWMRDB:Column xmi.id="_48" name="testOptionalInformation" isNullable="columnNullable" visibility="public" length="10" type="_31" owner="_46"/>
        <CWMRDB:Column xmi.id="_49" name="unkFlag" isNullable="columnNullable" visibility="public" length="1" type="_37" owner="_46"/>
        <CWMRDB:Column xmi.id="_50" name="lepFlag" isNullable="columnNullable" visibility="public" length="1" type="_37" owner="_46"/>
        <CWMRDB:Column xmi.id="_51" name="speFlag" isNullable="columnNullable" visibility="public" length="1" type="_37" owner="_46"/>
        <CWMRDB:Column xmi.id="_52" name="frpFlag" isNullable="columnNullable" visibility="public" length="1" type="_37" owner="_46"/>
        <CWMRDB:Column xmi.id="_53" name="migFlag" isNullable="columnNullable" visibility="public" length="1" type="_37" owner="_46"/>
        <CWMRDB:Column xmi.id="_54" name="ethnicCode" isNullable="columnNullable" visibility="public" length="1" type="_37" owner="_46"/>
        <CWMRDB:Column xmi.id="_55" name="specialCode" isNullable="columnNullable" visibility="public" length="2" type="_56" owner="_46"/>
        <CWMRDB:Column xmi.id="_57" name="languageCode" isNullable="columnNullable" visibility="public" length="3" type="_58" owner="_46"/>
        <CWMRDB:Column xmi.id="_59" name="languageClassification" isNullable="columnNullable" visibility="public" length="3" type="_58" owner="_46"/>
        <CWMRDB:Column xmi.id="_60" name="october1school" isNullable="columnNullable" visibility="public" length="1" type="_37" owner="_46"/>
        <CWMRDB:Column xmi.id="_61" name="october1district" isNullable="columnNullable" visibility="public" length="1" type="_37" owner="_46"/>
        <CWMRDB:Column xmi.id="_62" name="homeSchoolIndicator" isNullable="columnNoNulls" visibility="public" length="1" type="_37" owner="_46"/>
        <CWMRDB:Column xmi.id="_63" name="newToCountry" isNullable="columnNullable" visibility="public" length="1" type="_37" owner="_46"/>
        <CWMRDB:Column xmi.id="_64" name="significantGap" isNullable="columnNullable" visibility="public" length="1" type="_37" owner="_46"/>
       </CWM:Classifier.feature>
      </CWMRDB:Table>
      <CWMRDB:Table xmi.id="_65" name="Grade" isSystem="false" isTemporary="false" visibility="public" namespace="_14">
       <CWM:Classifier.feature>
        <CWMRDB:Column xmi.id="_66" name="gradeID" isNullable="columnNoNulls" visibility="public" precision="4" type="_17" owner="_65"/>
        <CWMRDB:Column xmi.id="_67" name="gradeName" isNullable="columnNoNulls" visibility="public" length="6" type="_68" owner="_65"/>
        <CWMRDB:Column xmi.id="_69" name="description" isNullable="columnNullable" visibility="public" length="200" type="_22" owner="_65"/>
       </CWM:Classifier.feature>
      </CWMRDB:Table>
      <CWMRDB:Table xmi.id="_70" name="Primary Score" isSystem="false" isTemporary="false" visibility="public" namespace="_14">
       <CWM:Classifier.feature>
        <CWMRDB:Column xmi.id="_71" name="documentID" isNullable="columnNoNulls" visibility="public" precision="4" type="_17" owner="_70"/>
        <CWMRDB:Column xmi.id="_72" name="scoreLabelID" isNullable="columnNoNulls" visibility="public" precision="4" type="_17" owner="_70"/>
        <CWMRDB:Column xmi.id="_73" name="scoreCodeID" isNullable="columnNoNulls" visibility="public" precision="4" type="_17" owner="_70"/>
        <CWMRDB:Column xmi.id="_74" name="achievementLevel" isNullable="columnNullable" visibility="public" precision="2" type="_75" owner="_70"/>
        <CWMRDB:Column xmi.id="_76" name="formNumber" isNullable="columnNullable" visibility="public" precision="2" type="_75" owner="_70"/>
        <CWMRDB:Column xmi.id="_77" name="attemptLogicMet" isNullable="columnNullable" visibility="public" length="1" type="_37" owner="_70"/>
       </CWM:Classifier.feature>
       <CWM:Namespace.ownedElement>
        <CWMRDB:ForeignKey xmi.id="_78" name="unnamed_78" visibility="public" namespace="_70" feature="_72" uniqueKey="_79"/>
        <CWMRDB:ForeignKey xmi.id="_42" name="unnamed_42" visibility="public" namespace="_70" feature="_71" uniqueKey="_41"/>
       </CWM:Namespace.ownedElement>
      </CWMRDB:Table>
      <CWMRDB:Table xmi.id="_10" name="Score" isSystem="false" isTemporary="false" visibility="public" namespace="_14">
       <CWM:Classifier.feature>
        <CWMRDB:Column xmi.id="_80" name="documentID" isNullable="columnNoNulls" visibility="public" precision="4" type="_17" owner="_10"/>
        <CWMRDB:Column xmi.id="_81" name="scoreLabelID" isNullable="columnNoNulls" visibility="public" precision="4" type="_17" owner="_10"/>
        <CWMRDB:Column xmi.id="_82" name="score" isNullable="columnNullable" visibility="public" precision="8" type="_83" owner="_10"/>
        <CWMRDB:Column xmi.id="_84" name="characteristic" isNullable="columnNullable" visibility="public" length="1" type="_37" owner="_10"/>
        <CWMRDB:Column xmi.id="_85" name="maximum" isNullable="columnNullable" visibility="public" precision="8" type="_83" owner="_10"/>
        <CWMRDB:Column xmi.id="_86" name="minimum" isNullable="columnNullable" visibility="public" precision="8" type="_83" owner="_10"/>
        <CWMRDB:Column xmi.id="_87" name="lastUserModified" isNullable="columnNoNulls" visibility="public" length="100" type="_88" owner="_10"/>
        <CWMRDB:Column xmi.id="_89" name="lastDateModified" isNullable="columnNoNulls" visibility="public" length="8" type="_90" owner="_10"/>
       </CWM:Classifier.feature>
       <CWM:Namespace.ownedElement>
        <CWMRDB:PrimaryKey xmi.id="_91" name="Scorekey" visibility="public" namespace="_10">
         <CWM:UniqueKey.feature>
          <CWM:StructuralFeature xmi.idref="_80"/>
          <CWM:StructuralFeature xmi.idref="_81"/>
         </CWM:UniqueKey.feature>
        </CWMRDB:PrimaryKey>
        <CWMRDB:ForeignKey xmi.id="_92" name="unnamed_92" visibility="public" namespace="_10" feature="_81" uniqueKey="_79"/>
        <CWMRDB:ForeignKey xmi.id="_43" name="unnamed_43" visibility="public" namespace="_10" feature="_80" uniqueKey="_41"/>
       </CWM:Namespace.ownedElement>
      </CWMRDB:Table>
      <CWMRDB:Table xmi.id="_93" name="Score Code" isSystem="false" isTemporary="false" visibility="public" namespace="_14">
       <CWM:Classifier.feature>
        <CWMRDB:Column xmi.id="_94" name="scoreCodeID" isNullable="columnNoNulls" visibility="public" precision="4" type="_17" owner="_93"/>
        <CWMRDB:Column xmi.id="_95" name="scoreCode1" isNullable="columnNoNulls" visibility="public" length="6" type="_68" owner="_93"/>
        <CWMRDB:Column xmi.id="_96" name="isInAverage" isNullable="columnNullable" visibility="public" length="1" type="_37" owner="_93"/>
        <CWMRDB:Column xmi.id="_97" name="description" isNullable="columnNullable" visibility="public" length="200" type="_22" owner="_93"/>
       </CWM:Classifier.feature>
      </CWMRDB:Table>
      <CWMRDB:Table xmi.id="_11" name="Score Label" isSystem="false" isTemporary="false" visibility="public" namespace="_14">
       <CWM:Classifier.feature>
        <CWMRDB:Column xmi.id="_98" name="scoreLabelID" isNullable="columnNoNulls" visibility="public" precision="4" type="_17" owner="_11"/>
        <CWMRDB:Column xmi.id="_99" name="fiscalYear" isNullable="columnNoNulls" visibility="public" precision="4" type="_17" owner="_11"/>
        <CWMRDB:Column xmi.id="_100" name="testID" isNullable="columnNoNulls" visibility="public" precision="4" type="_17" owner="_11"/>
        <CWMRDB:Column xmi.id="_101" name="subjectID" isNullable="columnNoNulls" visibility="public" precision="4" type="_17" owner="_11"/>
        <CWMRDB:Column xmi.id="_102" name="gradeID" isNullable="columnNoNulls" visibility="public" precision="4" type="_17" owner="_11"/>
        <CWMRDB:Column xmi.id="_103" name="number" isNullable="columnNoNulls" visibility="public" precision="4" type="_17" owner="_11"/>
        <CWMRDB:Column xmi.id="_104" name="StrandAbbreviation" isNullable="columnNullable" visibility="public" length="4" type="_105" owner="_11"/>
        <CWMRDB:Column xmi.id="_106" name="StrandDescription" isNullable="columnNullable" visibility="public" length="200" type="_22" owner="_11"/>
       </CWM:Classifier.feature>
       <CWM:Namespace.ownedElement>
        <CWMRDB:PrimaryKey xmi.id="_79" name="ScoreLabelkey" visibility="public" namespace="_11" feature="_98">
         <CWM:UniqueKey.keyRelationship>
          <CWM:KeyRelationship xmi.idref="_78"/>
          <CWM:KeyRelationship xmi.idref="_92"/>
         </CWM:UniqueKey.keyRelationship>
        </CWMRDB:PrimaryKey>
        <CWMRDB:ForeignKey xmi.id="_107" name="unnamed_107" visibility="public" namespace="_11" feature="_101" uniqueKey="_108"/>
        <CWMRDB:ForeignKey xmi.id="_109" name="unnamed_109" visibility="public" namespace="_11" feature="_100" uniqueKey="_24"/>
       </CWM:Namespace.ownedElement>
      </CWMRDB:Table>
      <CWMRDB:Table xmi.id="_12" name="Subject" isSystem="false" isTemporary="false" visibility="public" namespace="_14">
       <CWM:Classifier.feature>
        <CWMRDB:Column xmi.id="_110" name="subjectID" isNullable="columnNoNulls" visibility="public" precision="4" type="_17" owner="_12"/>
        <CWMRDB:Column xmi.id="_111" name="subjectName" isNullable="columnNoNulls" visibility="public" length="2" type="_112" owner="_12"/>
        <CWMRDB:Column xmi.id="_113" name="description" isNullable="columnNullable" visibility="public" length="200" type="_22" owner="_12"/>
       </CWM:Classifier.feature>
       <CWM:Namespace.ownedElement>
        <CWMRDB:PrimaryKey xmi.id="_108" name="Subjectkey" visibility="public" namespace="_12" feature="_110" keyRelationship="_107"/>
       </CWM:Namespace.ownedElement>
      </CWMRDB:Table>
      <CWMRDB:Table xmi.id="_13" name="Test" isSystem="false" isTemporary="false" visibility="public" namespace="_14">
       <CWM:Classifier.feature>
        <CWMRDB:Column xmi.id="_114" name="testID" isNullable="columnNoNulls" visibility="public" precision="4" type="_17" owner="_13"/>
        <CWMRDB:Column xmi.id="_115" name="Test Name" isNullable="columnNoNulls" visibility="public" length="20" type="_116" owner="_13"/>
        <CWMRDB:Column xmi.id="_117" name="Test Description" isNullable="columnNullable" visibility="public" length="200" type="_22" owner="_13"/>
       </CWM:Classifier.feature>
       <CWM:Namespace.ownedElement>
        <CWMRDB:PrimaryKey xmi.id="_24" name="Testkey" visibility="public" namespace="_13" feature="_114">
         <CWM:UniqueKey.keyRelationship>
          <CWM:KeyRelationship xmi.idref="_23"/>
          <CWM:KeyRelationship xmi.idref="_109"/>
         </CWM:UniqueKey.keyRelationship>
        </CWMRDB:PrimaryKey>
        <CWM:Description xmi.id="_118" visibility="public" language="" type="definition" body="Test Description" namespace="_13" modelElement="_117"/>
       </CWM:Namespace.ownedElement>
      </CWMRDB:Table>
      <CWMRDB:Table xmi.id="_119" name="Testing School" isSystem="false" isTemporary="false" visibility="public" namespace="_14">
       <CWM:Classifier.feature>
        <CWMRDB:Column xmi.id="_120" name="testingSchoolID" isNullable="columnNoNulls" visibility="public" precision="4" type="_17" owner="_119"/>
        <CWMRDB:Column xmi.id="_121" name="districtNumber" isNullable="columnNoNulls" visibility="public" length="4" type="_105" owner="_119"/>
        <CWMRDB:Column xmi.id="_122" name="districtType" isNullable="columnNoNulls" visibility="public" length="2" type="_56" owner="_119"/>
        <CWMRDB:Column xmi.id="_123" name="schoolNumber" isNullable="columnNoNulls" visibility="public" length="3" type="_58" owner="_119"/>
        <CWMRDB:Column xmi.id="_124" name="schoolClassification" isNullable="columnNoNulls" visibility="public" length="2" type="_56" owner="_119"/>
       </CWM:Classifier.feature>
       <CWM:Namespace.ownedElement>
        <CWMRDB:PrimaryKey xmi.id="_45" name="TestingSchoolkey" visibility="public" namespace="_119" feature="_120" keyRelationship="_44"/>
       </CWM:Namespace.ownedElement>
      </CWMRDB:Table>
      <CWMRDB:Table xmi.id="_125" name="Vendor Submission" isSystem="false" isTemporary="false" visibility="public" namespace="_14">
       <CWM:Classifier.feature>
        <CWMRDB:Column xmi.id="_126" name="vendorSubmissionID" isNullable="columnNoNulls" visibility="public" precision="4" type="_17" owner="_125"/>
        <CWMRDB:Column xmi.id="_127" name="fiscalYear" isNullable="columnNoNulls" visibility="public" precision="4" type="_17" owner="_125"/>
        <CWMRDB:Column xmi.id="_128" name="vendor1" isNullable="columnNoNulls" visibility="public" length="100" type="_88" owner="_125"/>
        <CWMRDB:Column xmi.id="_129" name="submissionSequence" isNullable="columnNoNulls" visibility="public" precision="4" type="_17" owner="_125"/>
        <CWMRDB:Column xmi.id="_130" name="description" isNullable="columnNullable" visibility="public" length="200" type="_22" owner="_125"/>
       </CWM:Classifier.feature>
      </CWMRDB:Table>
      <CWMRDB:SQLIndex xmi.id="_131" name="unnamed_131" visibility="public" isUnique="true" namespace="_14" spannedClass="_9">
       <CWM:Index.indexedFeature>
        <CWMRDB:SQLIndexColumn xmi.id="_132" visibility="public" feature="_25" index="_131"/>
       </CWM:Index.indexedFeature>
      </CWMRDB:SQLIndex>
      <CWMRDB:SQLIndex xmi.id="_133" name="unnamed_133" visibility="public" namespace="_14" spannedClass="_9">
       <CWM:Index.indexedFeature>
        <CWMRDB:SQLIndexColumn xmi.id="_134" visibility="public" feature="_28" index="_133"/>
       </CWM:Index.indexedFeature>
      </CWMRDB:SQLIndex>
      <CWMRDB:SQLIndex xmi.id="_135" name="unnamed_135" visibility="public" namespace="_14" spannedClass="_9">
       <CWM:Index.indexedFeature>
        <CWMRDB:SQLIndexColumn xmi.id="_136" visibility="public" feature="_40" index="_135"/>
       </CWM:Index.indexedFeature>
      </CWMRDB:SQLIndex>
      <CWMRDB:SQLIndex xmi.id="_137" name="unnamed_137" visibility="public" isUnique="true" namespace="_14" spannedClass="_10">
       <CWM:Index.indexedFeature>
        <CWMRDB:SQLIndexColumn xmi.id="_138" visibility="public" feature="_80" index="_137"/>
        <CWMRDB:SQLIndexColumn xmi.id="_139" visibility="public" feature="_81" index="_137"/>
       </CWM:Index.indexedFeature>
      </CWMRDB:SQLIndex>
      <CWMRDB:SQLIndex xmi.id="_140" name="unnamed_140" visibility="public" isUnique="true" namespace="_14" spannedClass="_11">
       <CWM:Index.indexedFeature>
        <CWMRDB:SQLIndexColumn xmi.id="_141" visibility="public" feature="_99" index="_140"/>
        <CWMRDB:SQLIndexColumn xmi.id="_142" visibility="public" feature="_100" index="_140"/>
        <CWMRDB:SQLIndexColumn xmi.id="_143" visibility="public" feature="_101" index="_140"/>
        <CWMRDB:SQLIndexColumn xmi.id="_144" visibility="public" feature="_102" index="_140"/>
        <CWMRDB:SQLIndexColumn xmi.id="_145" visibility="public" feature="_103" index="_140"/>
       </CWM:Index.indexedFeature>
      </CWMRDB:SQLIndex>
      <CWMRDB:SQLIndex xmi.id="_146" name="unnamed_146" visibility="public" isUnique="true" namespace="_14" spannedClass="_11">
       <CWM:Index.indexedFeature>
        <CWMRDB:SQLIndexColumn xmi.id="_147" visibility="public" feature="_98" index="_146"/>
       </CWM:Index.indexedFeature>
      </CWMRDB:SQLIndex>
      <CWMRDB:SQLIndex xmi.id="_148" name="unnamed_148" visibility="public" isUnique="true" namespace="_14" spannedClass="_12">
       <CWM:Index.indexedFeature>
        <CWMRDB:SQLIndexColumn xmi.id="_149" visibility="public" feature="_110" index="_148"/>
       </CWM:Index.indexedFeature>
      </CWMRDB:SQLIndex>
      <CWMRDB:SQLIndex xmi.id="_150" name="unnamed_150" visibility="public" isUnique="true" namespace="_14" spannedClass="_13">
       <CWM:Index.indexedFeature>
        <CWMRDB:SQLIndexColumn xmi.id="_151" visibility="public" feature="_114" index="_150"/>
       </CWM:Index.indexedFeature>
      </CWMRDB:SQLIndex>
      <CWMRDB:SQLIndex xmi.id="_152" name="unnamed_152" visibility="public" isUnique="true" namespace="_14" spannedClass="_119">
       <CWM:Index.indexedFeature>
        <CWMRDB:SQLIndexColumn xmi.id="_153" visibility="public" feature="_120" index="_152"/>
       </CWM:Index.indexedFeature>
      </CWMRDB:SQLIndex>
      <CWMRDB:SQLIndex xmi.id="_154" name="unnamed_154" visibility="public" isUnique="true" namespace="_14" spannedClass="_119">
       <CWM:Index.indexedFeature>
        <CWMRDB:SQLIndexColumn xmi.id="_155" visibility="public" feature="_121" index="_154"/>
        <CWMRDB:SQLIndexColumn xmi.id="_156" visibility="public" feature="_122" index="_154"/>
        <CWMRDB:SQLIndexColumn xmi.id="_157" visibility="public" feature="_123" index="_154"/>
        <CWMRDB:SQLIndexColumn xmi.id="_158" visibility="public" feature="_124" index="_154"/>
       </CWM:Index.indexedFeature>
      </CWMRDB:SQLIndex>
      <CWMRDB:SQLIndex xmi.id="_159" name="unnamed_159" visibility="public" namespace="_14" spannedClass="_119">
       <CWM:Index.indexedFeature>
        <CWMRDB:SQLIndexColumn xmi.id="_160" visibility="public" feature="_121" index="_159"/>
        <CWMRDB:SQLIndexColumn xmi.id="_161" visibility="public" feature="_122" index="_159"/>
        <CWMRDB:SQLIndexColumn xmi.id="_162" visibility="public" feature="_123" index="_159"/>
        <CWMRDB:SQLIndexColumn xmi.id="_163" visibility="public" feature="_124" index="_159"/>
       </CWM:Index.indexedFeature>
      </CWMRDB:SQLIndex>
     </CWM:Namespace.ownedElement>
    </CWMRDB:Schema>
    <CWMOLAP:Schema xmi.id="_14" name="Physical" visibility="public" namespace="_4">
</CWMOLAP:Schema>
   </CWM:Namespace.ownedElement>
  </CWMRDB:Catalog>
  <CWMRDB:SQLSimpleType xmi.id="_37" name="VARCHAR2" visibility="public" characterMaximumLength="1" characterOctetLength="1" typeNumber="12"/>
  <CWMRDB:SQLSimpleType xmi.id="_29" name="VARCHAR2" visibility="public" characterMaximumLength="13" characterOctetLength="1" typeNumber="12"/>
  <CWMRDB:SQLSimpleType xmi.id="_31" name="VARCHAR2" visibility="public" characterMaximumLength="10" characterOctetLength="1" typeNumber="12"/>
  <CWMRDB:SQLSimpleType xmi.id="_105" name="VARCHAR2" visibility="public" characterMaximumLength="4" characterOctetLength="1" typeNumber="12"/>
  <CWMRDB:SQLSimpleType xmi.id="_56" name="VARCHAR2" visibility="public" characterMaximumLength="2" characterOctetLength="1" typeNumber="12"/>
  <CWMRDB:SQLSimpleType xmi.id="_58" name="VARCHAR2" visibility="public" characterMaximumLength="3" characterOctetLength="1" typeNumber="12"/>
  <CWMRDB:SQLSimpleType xmi.id="_88" name="VARCHAR2" visibility="public" characterMaximumLength="100" characterOctetLength="1" typeNumber="12"/>
  <CWMRDB:SQLSimpleType xmi.id="_33" name="VARCHAR2" visibility="public" characterMaximumLength="40" characterOctetLength="1" typeNumber="12"/>
  <CWMRDB:SQLSimpleType xmi.id="_35" name="VARCHAR2" visibility="public" characterMaximumLength="30" characterOctetLength="1" typeNumber="12"/>
  <CWMRDB:SQLSimpleType xmi.id="_22" name="VARCHAR2" visibility="public" characterMaximumLength="200" characterOctetLength="1" typeNumber="12"/>
  <CWMRDB:SQLSimpleType xmi.id="_112" name="VARCHAR2" visibility="public" characterMaximumLength="2" characterOctetLength="1" typeNumber="12"/>
  <CWMRDB:SQLSimpleType xmi.id="_116" name="VARCHAR2" visibility="public" characterMaximumLength="20" characterOctetLength="1" typeNumber="12"/>
  <CWMRDB:SQLSimpleType xmi.id="_68" name="VARCHAR2" visibility="public" characterMaximumLength="6" characterOctetLength="1" typeNumber="12"/>
  <CWMRDB:SQLSimpleType xmi.id="_90" name="TIMESTAMP" visibility="public" dateTimePrecision="8" typeNumber="93"/>
  <CWMRDB:SQLSimpleType xmi.id="_83" name="FLOAT" visibility="public" numericPrecision="8" typeNumber="6"/>
  <CWMRDB:SQLSimpleType xmi.id="_17" name="NUMBER" visibility="public" numericPrecision="4" typeNumber="4"/>
  <CWMRDB:SQLSimpleType xmi.id="_75" name="NUMBER" visibility="public" numericPrecision="2" typeNumber="4"/>
 </XMI.content>
</XMI>

Vendors import but don't export metadata

Dr. Data Dictionary I have found there are serverl vendors that import metadata such as the CWM format but I have not found a lot of vendors that export metadata. Anyone have experience with this? Is this a "lock-in" strategy that vendors use? What tools to people use to manage metadata that comply with ISO 11179?

National Information Exchange Model (NIEM)

How many people out there have heard of the NIEM? It is the national informaiton exchange model. A wonderful goal - to have a metadata standard for exchanging data between organizations. Finally we can agree that it is PersonBirthDate and not DOB or BirthDate or birthData or DateOfBirth etc. What should the role be of federal agencies in helping us adopt these standards. Check out the NIEM web site:

Metadata Quotes

Here are some of my favorite quotes about metadata:
Metadata is gaining mainstream acceptance. Business managers realize that they want to treat data as a strategic asset....Managers increasingly recognize that applications must revolve around the data, not the other way around...This is a shift of Copernican magnitude." Michael Daconta, NIEM Program Manager
Only if every user has a common and exact understanding of the data can it be exchanged trouble-free. ISO/IEC 11179 Metadata Registry Specification
To maximize success in service oriented development of applications and enterprise wide sharing and reuse initiatives (such as data warehousing), a well-scoped and focused function to manage key metadata artifacts is cost-effective and critical. Gartner Group
If software is ever going to be able to effectively inter-operate (in ways that were not explicitly preconceived and engineered), it will be because applications share enough of the semantics of their data elements. But one of the most misunderstood and frankly ironic things about "semantics" is that it means different things to different people. Doug Lenat, Cycorp

Ontology Web Language (OWL)

I have been using the OWL format to publish my data dictionary. The format built on top of RDF but I have found that it is very difficult to represent non-sequential ranges in OWL. This is much easier to do with XML Schemas enumerations.

Common Warehouse Metadata (CWM)

I have been attempting to publish education metdata data in Common Warehouse Metadata CWM format. This is one of the only formats I can find that has standards for expressing Cube Dimensions. I am not finding a lot of CWM example out there. If you know of any, please let me know. If not perhaps I will publish a few of them.