[xquery-talk] contains function problem

Priscilla Walmsley pwalmsley-lists at datypic.com
Sat Jan 7 10:48:31 PST 2006


Hi Manolis,

You've got a few problems:

1. In your call to the contains function, the quotes around the path
expression should not be there

2. In your call to the contains function, the path expression has no context
- you need to start it with $x

3. Email needs to be prefixed

4. Leave text() off - it will not work because it will be looking for
textual content right in the Name element, not in any of its children
(FamilyName or GivenName).

5. You've got multiple Name elements within a Semantics element, and the
contains function will only take a single string as its first argument. I
assume you want to test for the Agent's name (and each Agent only has one
Name). So, you could rewrite the query as:

---------------------
xquery version "1.0";
declare namespace Mpeg7="urn:mpeg:mpeg7:schema:2001";

for $x in doc("myPersons.xml")//Mpeg7:Agent
where contains($x/Mpeg7:Name,"Moras")
return $x//Mpeg7:Email
---------------------


Hope that helps,
Priscilla

 ----------------------------------------------------------------- 
Priscilla Walmsley                 http://www.datypic.com 
Author, Definitive XML Schema     (Prentice Hall PTR) 
        Definitive XQuery (coming soon) 
----------------------------------------------------------------- 


________________________________

	From: talk-bounces at xquery.com [mailto:talk-bounces at xquery.com] On
Behalf Of Manolis Mylonakis
	Sent: Saturday, January 07, 2006 9:18 AM
	To: talk at xquery.com
	Subject: [xquery-talk] contains function problem
	
	
	hello,
	 
	i have a problem with 'contains' function of xquery.
	 
	I have the following xml file named myPersons.xml
	 
	 
	 
	 
	 
	<Mpeg7 xmlns="urn:mpeg:mpeg7:schema:2001"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

	<Description xsi:type="SemanticDescriptionType">

	<Semantics>

	<AbstractionLevel dimension="0"/>

	<Label>

	<Name>Soccer Agent Example</Name>

	</Label>

	<Property>

	<Name>Something</Name>

	<Definition>socceragents</Definition>

	</Property>

	<SemanticBase xsi:type="AgentObjectType" id="Moras">

	<AbstractionLevel dimension="0"/>

	<Label>

	<Name>Moras</Name>

	</Label>

	<Definition>

	<FreeTextAnnotation>Vaggelis Moras</FreeTextAnnotation>

	</Definition>

	<Agent xsi:type="PersonType">

	<Name>

	<FamilyName initial="M">Moras</FamilyName>

	<GivenName>Vaggelis</GivenName>

	</Name>

	<ElectronicAddress>

	<Email>players at aekfc.gr</Email>

	</ElectronicAddress>

	</Agent>

	</SemanticBase>

	</Semantics>

			<Semantics>

	<AbstractionLevel dimension="0"/>

	<Label>

	<Name>Soccer Agent Example</Name>

	</Label>

	<Property>

	<Name>teacher </Name>

	<Definition>university teacher</Definition>

	</Property>

	<SemanticBase xsi:type="AgentObjectType" id="Moras">

	<AbstractionLevel dimension="0"/>

	<Label>

	<Name>Dolas</Name>

	</Label>

	<Definition>

	<FreeTextAnnotation>Apostolos Dolas</FreeTextAnnotation>

	</Definition>

	<Agent xsi:type="PersonType">

	<Name>

	<FamilyName initial="M">Dolas</FamilyName>

	<GivenName>Apostolos</GivenName>

	</Name>

	<ElectronicAddress>

	<Email>dol at mymail.gr</Email>

	</ElectronicAddress>

	</Agent>

	</SemanticBase>

	</Semantics>

		</Description>

	</Mpeg7>

	 

	 

	 

	 

	 

	I ask for the email address for a person who has a <Name> as Moras
for example...

	my xquery is the following:

	 

	xquery version "1.0";

	declare namespace Mpeg7="urn:mpeg:mpeg7:schema:2001";

	for $x in doc("myPersons.xml")//Mpeg7:Semantics

	where contains("//Mpeg7:Name/text()","Moras")

	return $x//Email

	 

	 

	none results returned

	 

	what is my fault?

	 

	Thanks 

	Manolis

	 

	 

	 




More information about the talk mailing list