[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [Elist Home]
Subject: OASIS Regrep TC - Proposal #4 MetadataFilter query
Regreps, Proposal #1 from yesterday assumes the existence of a "RegistryEntryQuery" that is a "MetadataFilter" on registry metadata. Such a MetadataFilter would be a very simple XML-defined filter on the attributes of the RegistryEntry class and all of its dependent subclasses. The result of execution of a MetadataFilter query would be a set of registry entry references. That set of references could then be supplied as the input to a GetRegisteredObject() or GetRegistryEntry() registry service. Consider the following XML syntax: <!ELEMENT MetadataFilter ( RegistryEntryFilter?, (AssociationGivenFilter | AssociationAssocFilter )?, ClassificationFilter?, ExternalDataFilter?, AlternateNameFilter?, DescriptionFilter?, ContributionFilter?, SubmittingOrgFilter?, RequestFilter?, ContactFilter? ImpactFilter? )> Each "filter" subelement of a MetadataFilter would be a simple predicate on one of the attributes of the identified class. For example, one of the AssociationFilters would be a predicate to determine if the associationRole attribute of the Association class is equal to "val", the code for "Validates To". The algorithm to determine the result of a MetadataFilter query would be an expansion of the following steps: 1) Begin with the set RE of all persistent RegistryEntry instances. 2) Filter out all registry entries in RE that do not satisfy a conjunction of the identified RegistryEntryFilter predicates. If there are none, then the set RE is left unchanged. 3) If AssociationGivenFilter predicates are present, then connect each remaining element x in RE to its dependent Association instances with x as the givenItem. If x has no dependent asssociation instances that satisfy the conjunction of AssociationFilter predicates, then remove x from RE. NOTE: If x has no dependent associations, then it is removed because it does not satisfy the condition. 4) If ClassificationFilter predicates are present, then connect each remaining element x in RE to its dependent Classification instances. And connect each Classification instance to its dependent LevelValuePair instances. If x has no dependent classification or levelvaluepair instances that satisfy the conjunction of ClassificationFilter predicates, then remove x from RE. 5) Continue as in steps 3 and 4, for all of the other filters identified in the MetadataFilter query. 6) The result of the query is the remaining elements of RE. The predicates themselves can be of four different types. Let attName be the name of an attribute in some class of the InformationModel. Then: -- AttNameEqual is an equals predicate to test if the attName attribute of a class instance is equal to a specific value. -- AttNameContains is a case-insensitive contains predicate to test if the attName attribute of a class instance contains a specific string value. -- AttNameBetween is a between predicate to test if the attName attribute of a class instance is between two specific values. -- AttNameIn is an IN predicate to test if the attName attribute of a class instance is equal to one of a list of specific values. The AttNameIn predicate will always be defined in terms of the AttNameEqual predicate as follows: <!ELEMENT AttNameIn ( AttNameEqual+ )> Note that the AttNameIn predicate is a simple way to specifiy logical OR predicates. All of the other predicates are interpreted as AND predicates, i.e. terms in a conjunction. The complete XML syntax for MetadataFilter is attached as a text file. EXAMPLE Consider a user who wants to identify all registry entries that represent stable "Business Process" objects that are claimed to validate to a specific business process DTD defined by "ebXML" and won't expire in the next six months. The following MetadataFilter query should retrieve the desired registry entries: <MetadataFilter> <RegistryEntryFilter> <DefnSourceEqual source="EBXML" /> <ObjectTypeEqual type="busProc" /> <RegistrationStatusIn> <RegistrationStatusEqual status="reg" /> <RegistrationStatusEqual status="sup" /> <RegistrationStatusEqual status="rep" /> </RegistrationStatusIn> <StabilityEqual stability="comp" /> <FeeStatusEqual status="free" /> <ExpirationDateBetween begin="2000-12-15" end="2001-6-15" /> </RegistryEntryFilter> <AssociationGivenFilter> <AssociationRole role="val" /> <AssocItem itemURN="us:com:ebxml:BusProcessDTDv1.2" /> </AssociationGivenFilter> </MetadataFilter> Talk to you at the teleconference -- details just below! -- Len At 01:36 PM 12/8/00 , Lisa Carnahan wrote: >Hello All, > >The OASIS Reg/rep TC will be having a conference call on Friday, December >15 at 1:00 Eastern time. You'll get the agenda early next week. > >Details: >USA Toll Free Number: 888-566-5784 >USA Toll Number: +1-212-547-0361 >PASSCODE: 45764 >LEADER: Ms Lisa Carnahan > >--lisa
<!ELEMENT MetadataFilter ( RegistryEntryFilter?, (AssociationGivenFilter | AssociationAssocFilter )?, ClassificationFilter?, ExternalDataFilter?, AlternateNameFilter?, DescriptionFilter?, ContributionFilter?, SubmittingOrgFilter?, RequestFilter?, ContactFilter? ImpactFilter? )> <!ELEMENT RegistryEntryFilter ( ( CommonNameContains | ObjectURLEqual | ObjectURLIn | ObjectURLContains | DefnSourceEqual | DefnSourceIn | ObjectTypeEqual | ObjectTypeIn | FileTypeEqual | FileTypeIn | RegistrationStatusEqual | RegistrationStatusIn | StatusChangeDateBetween | StabilityEqual | StabilityIn | FeeStatusEqual | FeeStatusIn | PropertyRightsEqual | PropertyRightsIn | ShortDescriptionContains | ExpirationDateBetween | SubmittingOrgEqual | SubmittingOrgIn | ResponsibleOrgEqual | ResponsibleOrgIn | CommentContains )* )> <!ELEMENT CommonNameContains EMPTY > <!ATTLIST CommonNameContains str CDATA #REQUIRED > <!ELEMENT ObjectURLEqual EMPTY > <!ATTLIST ObjectURLEqual objectURL CDATA #REQUIRED > <!ELEMENT ObjectURLIn ( ObjectURLEqual+ )> <!ELEMENT ObjectURLContains EMPTY > <!ATTLIST CommonNameContains str CDATA #REQUIRED > <!ELEMENT DefnSourceEqual EMPTY > <!ATTLIST DefnSourceEqual source CDATA #REQUIRED > <!ELEMENT DefnSourceIn ( DefnSourceEqual+ )> <!ELEMENT ObjectTypeEqual EMPTY > <!ATTLIST ObjectTypeEqual type CDATA #REQUIRED > <!ELEMENT ObjectTypeIn ( ObjectTypeEqual+ )> <!ELEMENT FileTypeEqual EMPTY > <!ATTLIST FileTypeEqual type CDATA #REQUIRED > <!ELEMENT FileTypeIn ( FileTypeEqual+ )> <!ELEMENT RegistrationStatusEqual EMPTY > <!ATTLIST RegistrationStatusEqual status CDATA #REQUIRED > <!ELEMENT RegistrationStatusIn ( RegistrationStatusEqual+ )> <!ELEMENT StatusChangeDateBetween EMPTY > <!ATTLIST StatusChangeDateBetween begin CDATA #REQUIRED end CDATA #REQUIRED > <!ELEMENT StabilityEqual EMPTY > <!ATTLIST StabilityEqual stability CDATA #REQUIRED > <!ELEMENT StabilityIn ( StabilityEqual+ )> <!ELEMENT FeeStatusEqual EMPTY > <!ATTLIST FeeStatusEqual status CDATA #REQUIRED > <!ELEMENT FeeStatusIn ( FeeStatusEqual+ )> <!ELEMENT PropertyRightsEqual EMPTY > <!ATTLIST PropertyRightsEqual rights CDATA #REQUIRED > <!ELEMENT PropertyRightsIn ( PropertyRightsEqual+ )> <!ELEMENT ShortDescriptionContains EMPTY > <!ATTLIST ShortDescriptionContains str CDATA #REQUIRED > <!ELEMENT ExpirationDateBetween EMPTY > <!ATTLIST ExpirationDateBetween begin CDATA #REQUIRED end CDATA #REQUIRED > <!ELEMENT SubmittingOrgEqual EMPTY > <!ATTLIST SubmittingOrgEqual orgURN CDATA #REQUIRED > <!ELEMENT SubmittingOrgIn ( SubmittingOrgEqual+ )> <!ELEMENT ResponsibleOrgEqual EMPTY > <!ATTLIST ResponsibleOrgEqual orgURN CDATA #REQUIRED > <!ELEMENT ResponsibleOrgIn ( ResponsibleOrgEqual+ )> <!ELEMENT CommentContains EMPTY > <!ATTLIST CommentContains str CDATA #REQUIRED > <!ELEMENT AssociationGivenFilter ( ( AssociationRoleEqual | AssociationRoleIn | AssocItemEqual | AssocItemIn | CommentContains )* )> <!ELEMENT AssociationAssocFilter ( ( AssociationRoleEqual | AssociationRoleIn | GivenItemEqual | GivenItemIn | CommentContains )* )> <!ELEMENT AssociationRoleEqual EMPTY > <!ATTLIST AssociationRoleEqual role CDATA #REQUIRED > <!ELEMENT AssociationRoleIn ( AssociationRoleEqual+ )> <!ELEMENT AssocItemEqual EMPTY > <!ATTLIST AssocItemEqual assocURN CDATA #REQUIRED > <!ELEMENT AssocItemIn ( AssocItemEqual+ )> <!ELEMENT GivenItemEqual EMPTY > <!ATTLIST GivenItemEqual givenURN CDATA #REQUIRED > <!ELEMENT GivenItemIn ( GivenItemEqual+ )> <!ELEMENT ClassificationFilter ( ( SchemeEqual | SchemeIn | SubmittingOrgEqual | SubmittingOrgIn | ClassifCommentContains | LevelcodeEqual | LevelCodeIn | ItemValueEqual | ItemValueIn | LevValPairCommentContains )* )> <!ELEMENT SchemeEqual <!ATTLIST SchemeEqual scheme CDATA #REQUIRED > <!ELEMENT SchemeIn ( SchemeEqual+ )> <!ELEMENT ClassifCommentContains EMPTY > <!ATTLIST ClassifCommentContains str CDATA #REQUIRED > <!ELEMENT LevelCodeEqual <!ATTLIST LevelCodeEqual level CDATA #REQUIRED > <!ELEMENT LevelCodeIn ( LevelCodeEqual+ )> <!ELEMENT ItemValueEqual <!ATTLIST ItemValueEqual item CDATA #REQUIRED > <!ELEMENT ItemValueIn ( ItemValueEqual+ )> <!ELEMENT LevValPairCommentContains EMPTY > <!ATTLIST LevValPairCommentContains str CDATA #REQUIRED > <!ELEMENT ExternalDataFilter ( (DataNameContains | DataLocationContains | RelatedRoleEqual | RelatedRoleIn | MimeTypeEqual | MimeTypeIn | SizeBytesBetween | CommentContains )* )> <!ELEMENT DataNameContains EMPTY > <!ATTLIST DataNameContains str CDATA #REQUIRED > <!ELEMENT DataLocationContains EMPTY > <!ATTLIST DataLocationContains str CDATA #REQUIRED > <!ELEMENT RelatedRoleEqual EMPTY > <!ATTLIST RelatedRoleEqual role CDATA #REQUIRED > <!ELEMENT RelatedRoleIn ( RelatedRoleEqual+ )> <!ELEMENT MimeTypeEqual EMPTY > <!ATTLIST MimeTypeEqual mime CDATA #REQUIRED > <!ELEMENT MimeTypeIn ( MimeTypeEqual+ )> <!ELEMENT SizeBytesBetween EMPTY > <!ATTLIST SizeBytesBetween begin CDATA #REQUIRED end CDATA #REQUIRED > <!ELEMENT AlternateNameFilter ( ( AltNameContains | NameContextEqual | NameContextIn | SubmittingOrgEqual | SubmittingOrgIn | LanguageEqual | LanguageIn | EncodingContains | CommentContains )* )> <!ELEMENT AltNameContains EMPTY > <!ATTLIST AltNameContains str CDATA #REQUIRED > <!ELEMENT NameContextEqual EMPTY > <!ATTLIST NameContextEqual context CDATA #REQUIRED > <!ELEMENT NameContextIn ( NameContextEqual+ )> <!ELEMENT LanguageEqual EMPTY > <!ATTLIST LanguageEqual lang CDATA #REQUIRED > <!ELEMENT LanguageIn ( LanguageEqual+ )> <!ELEMENT EncodingContains EMPTY > <!ATTLIST EncodingContains str CDATA #REQUIRED > <!ELEMENT DescriptionFilter ( ( LanguageEqual | LanguageIn | EncodingContains | SubmittingOrgEqual | SubmittingOrgIn | AbstractContains | KeywordListContains | FullDescriptionContains )* )> <!ELEMENT AbstractContains EMPTY > <!ATTLIST AbstractContains str CDATA #REQUIRED > <!ELEMENT KeywordListContains EMPTY > <!ATTLIST KeywordListContains str CDATA #REQUIRED > <!ELEMENT FullDescriptionContains EMPTY > <!ATTLIST FullDescriptionContains str CDATA #REQUIRED > <!ELEMENT ContributionFilter ( ( ContributorNameEqual | ContributorNameIn | ContributorNameContains | ContributorRoleContains | RoleCategoryEqual | RoleCategoryIn | ContributorURLContains | CommentContains )* )> <!ELEMENT ContributorNameEqual EMPTY > <!ATTLIST ContributorNameEqual name CDATA #REQUIRED > <!ELEMENT ContributorNameIn ( ContributorNameEqual+ )> <!ELEMENT ContributorNameContains EMPTY > <!ATTLIST ContributorNameContains str CDATA #REQUIRED > <!ELEMENT ContributorRoleContains EMPTY > <!ATTLIST ContributorRoleContains str CDATA #REQUIRED > <!ELEMENT RoleCategoryEqual EMPTY > <!ATTLIST RoleCategoryEqual category CDATA #REQUIRED > <!ELEMENT RoleCategoryIn ( RoleCategoryEqual+ )> <!ELEMENT ContributorURLContains EMPTY > <!ATTLIST ContributorURLContains str CDATA #REQUIRED > <!ELEMENT SubmittinOrgFilter ( ( OrgFullNameContains | OrgCommonNameContains | ParentOrgEqual | ParentOrgIn | CityContains | StateProvContains | PostalCodeContains | EmailContains | TelephoneContains | CommentContains )* )> <!ELEMENT OrgFullNameContains EMPTY > <!ATTLIST OrgFullNameContains str CDATA #REQUIRED > <!ELEMENT OrgCommonNameContains EMPTY > <!ATTLIST OrgCommonNameContains str CDATA #REQUIRED > <!ELEMENT ParentOrgEqual EMPTY > <!ATTLIST ParentOrgEqual orgURN CDATA #REQUIRED > <!ELEMENT ParentOrgIn ( ParentOrgEqual+ )> <!ELEMENT CityContains EMPTY > <!ATTLIST CityContains str CDATA #REQUIRED > <!ELEMENT StateProvContains EMPTY > <!ATTLIST StateProvContains str CDATA #REQUIRED > <!ELEMENT PostalCodeContains EMPTY > <!ATTLIST PostalCodeContains str CDATA #REQUIRED > <!ELEMENT EmailContains EMPTY > <!ATTLIST EmailContains str CDATA #REQUIRED > <!ELEMENT TelephoneContains EMPTY > <!ATTLIST TelephoneContains str CDATA #REQUIRED > <!ELEMENT RequestFilter ( (SubmitTimestampBetween | SubmittingOrgEqual | SubmittingOrgIn | SubmissionCommentContains | RequestCodeEqual | RequestCodeIn | ContentXMLContains | CommentContains )* )> <!ELEMENT SubmitTimestampBetween EMPTY > <!ATTLIST SubmitTimestampBetween begin CDATA #REQUIRED end CDATA #REQUIRED > <!ELEMENT SubmissionCommentContains EMPTY > <!ATTLIST SubmissionCommentContains str CDATA #REQUIRED > <!ELEMENT RequestCodeEqual EMPTY > <!ATTLIST RequestCodeEqual code CDATA #REQUIRED > <!ELEMENT RequestCodeIn ( RequestCodeEqual+ )> <!ELEMENT ContentXMLContains EMPTY > <!ATTLIST ContentXMLContains str CDATA #REQUIRED > <!ELEMENT ContactFilter ( ( ContactNameContains | ContactOrgEqual | ContactOrgIn | InternalAddressContains | OrgRoleEqual | OrgRoleIn | AvailabilityEqual | AvailabilityIn | ContactRoleEqual | ContactRoleIn | Emailcontains | TelephoneContains | CommentContains )* )> <!ELEMENT ContactNameContains EMPTY > <!ATTLIST ContactNameContains str CDATA #REQUIRED > <!ELEMENT ContactOrgEqual EMPTY > <!ATTLIST ContactOrgEqual orgURN CDATA #REQUIRED > <!ELEMENT ContactOrgIn ( ContactOrgEqual+ )> <!ELEMENT InternalAddressContains EMPTY > <!ATTLIST InternalAddressContains str CDATA #REQUIRED > <!ELEMENT OrgRoleEqual EMPTY > <!ATTLIST OrgRoleEqual role CDATA #REQUIRED > <!ELEMENT OrgRoleIn ( OrgRoleEqual+ )> <!ELEMENT AvailabilityEqual EMPTY > <!ATTLIST AvailabilityEqual avail CDATA #REQUIRED > <!ELEMENT AvailabilityIn ( AvailabilityEqual+ )> <!ELEMENT ContactRoleEqual EMPTY > <!ATTLIST ContactRoleEqual role CDATA #REQUIRED > <!ELEMENT ContactRoleIn ( ContactRoleEqual+ )> <!ELEMENT ImpactFilter ( ( SubmitTimestampBetween | ImpactCodeEqual | ImpactCodeIn | CommentContains )* )> <!ELEMENT ImpactCodeEqual EMPTY > <!ATTLIST ImpactCodeEqual code CDATA #REQUIRED > <!ELEMENT ImpactCodeIn ( ImpactCodeEqual+ )>
************************************************************** Len Gallagher LGallagher@nist.gov NIST Work: 301-975-3251 Bldg 820 Room 562 Home: 301-424-1928 Gaithersburg, MD 20899-8970 USA Fax: 301-948-6213 **************************************************************
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [Elist Home]
Powered by eList eXpress LLC