OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

regrep message

[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