I'm trying to create a collection, and so far I've only been able to make Individuals. Through the telnet API, I've been trying things such as:
These all appear to do the same thing: create an individual called NCSU-Student (NCSU stands for North Carolina State University, in case you didn't know). However, I need NCSU-Student to be a collection, not an individual. A collection is necessary because I'd like to have sub-collections of NCSU-Student such as NCSU-Physics-Student, NCSU-Computer-Science-Student, et cetera. Eventually I'd like to have something like:
Where you and I are stored as individuals and everything else is a collection. I can't find a way to do this, because as I've said everything I create is automatically an individual. I've tried forcing an individual into being a collection with a statement such as:
(fi-assert '(#$genls #$NCSU-Student #$Student) #$BaseKB)
However I always get : Received response:%"500 \"Formula ".
The only leads I have left are: am I creating it incorrectly, or am I possibly specifying the wrong knowledge base when I do the fi-assert. That is, I wonder should I be using something other than #$BaseKB.
What do you think? Any experience in this area?
I suggest that it would be wise to forget about coding until you are more familiar with OpenCyc and have worked out a good model of what you want to do.
Familiarize yourself with the OpenCyc Knowledge Browser by going through the documentation of the Welcome Screen and the QuickStart Walkthrough, running the browser and logging in as an adminisrator and new Cyclist.
Step One: Find Relevant Constants - Do this for the 2 kittens in the example in the Quickstart Walkthrough and then for your own project. Don't stop your search with one constant but search broadly for anything that might have some relevance and note the organization of the knowledge base and follow interesting links. You can also search the Vocabulary for ideas (See link in lower left Window).
E.g. #$University, #$Department, #$FieldOfStudy, #$Student, #$StudentOf, #$Set, #$Group, #$MemberOf, #$EnrolledIn, etc.
Note that some constants appear in black type rather than purple because they were not released publicly. You could also search the Cyc Foundation Browser for ideas but must understand that some of the constants that appear may not be available in OpenCyc and you might have to create them yourself.
Step Two: Create Constants for NCSU if it doesn't exist in the knowledge base and then for the students.
Step Three: Create a single Practice Microtheory as done for the Kittens and make Assertions for the students and University.
Step Four: Test your microtheory as per the kitten example. E.g. Ask if North Carolina State University is a University. Ask if student X is a student of North Carolina State University. Ask if student X is a student of the Physics department etc.
I went through the OpenCyc knowledge base and did a topic model kind of search of words related to Universities and University students and found lots of relevant constants, predicates and functions but no StudentFn or any example similar to "Bob is a chemistry student" or "RogerSchank was once a Yale Professor" or "John is a graduate of NCSU ". StudentOf looked promising but can it be used for an Organization as the teacher? One definition says the arguments have to be persons.
So now I'm just as curious as Chris to know the best way for a Cyclist to create a collection of University students studying within specific fields of study at a specific University.
I'm going through the tutorials on Collections, Functions and Predicates again but there seem to be lots of ways to do it. Could I create a new faceted collection of UniversityStudentType by AcademicDepartmentType, create a StudentStatusbyFieldofStudy function or create a collectionunion that intersects the sets of students and specific fields of study?
If I create a StudentbyFieldofStudyFn, Will something like
(StudentbyFieldofStudyFn Physics) Student)
* Make a new facet with selected spec(s) as instances
New facet name: UniversityStudentTypeBy
New facet type: generic strict covering partition
* Make selected spec(s) direct specs of specified collection or new spec
Collection or new spec name:
* Add selected instance(s) to selected spec(s)
Collection : EducationalOrganization
Collection : University
Collection : UniversityStudent
Collection : Student
Collection : PersonByStudentStatus
Collection : StudentByEducationalOrganizationLevel
Collection : FieldOfStudy
Collection : PersonTypeByActivity
Collection : CollectionType
Collection : FacetingCollectionType
Function : PersonEnrolledInFn
Function : AttendingSchoolFn
Function : GraduateFn
Function : ProfessorFn
Function : TeacherFn
Function : FocalFieldOfStudyFn
Function : SubcollectionOfWithRelationFromTypeFn
Function : CollectionIntersection2Fn
Function : GroupFn
Predicate : schooling
Individual : JamesBaker-NWUStudent
FinnishPerson vs. ((CitizenFn Finland)
(CitizenFn Finland) FinnishPerson)
UnitedStatesPerson VS. (CitizenFn UnitedStatesOfAmerica)
(ProfessorFn Physics) Professor)
(CollectionUnionFn (TheSet ...
TeacherFn FieldOfStudy -->??? (StudentFn FieldOfStudy) ???
(arg1Isa ProfessorFn FieldOfStudy)
(arg2Isa fieldsOfFormalEducation FieldOfStudy)
(arg1Isa PracticeFn FieldOfStudy)
(isa ComputerScience FieldOfStudy)
(FieldAppliedToFn History-FieldOfStudy Physics) FieldOfStudy)
(FieldAppliedToFn History-FieldOfStudy Physics)
prettyString Graduate "alumnus")
Mt : UniversalVocabularyMt
Mt : UniversityDataMt
Mt : AcademicOrganizationMt
Mt : PeopleMt
Mt : PeopleDataMt
Mt : TheSimpsonsMt