Ruminations on NoSQL, XRX, XQuery, Semantics, STEM, Arduino, Internet-of-Things (IoT) and empowering the non-programmer.
Thursday, March 23, 2006
A Little Bit of Semantics Goes a Long Way
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
Leaning Objects for Economics: Dynamic Graphs in SVG
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:
- No procedural code in Java, C#, C++ or Visual Basic for programmers to maintain
- Built entirely with declarative languages (XSLT, Ant, BPML etc)
- Fewer concerns about state management and side effects
- Higher use of transformed metadata
- Works on concert with Model-Driven-Architectures
- 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
Wednesday, February 01, 2006
Mike Doconta Leaves DHS
Tuesday, January 03, 2006
Towards a semantic wiki
Monday, January 02, 2006
Podcast on the Savvy Technologist
Tuesday, December 27, 2005
Wikipedia pages on metadata
Tuesday, June 21, 2005
Metadata for No Child Left Behind (NCLB)
Sample CWM Code for Data Warehoues of Student Testing
<?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>