XQuery-퀵 가이드

XQuery 란?

XQuery는 XML 형식으로 저장된 정보를 검색하는 데 사용되는 기능 언어입니다. XQuery는 XML 문서, XML 형식의 데이터를 포함하는 관계형 데이터베이스 또는 XML 데이터베이스에서 사용할 수 있습니다. XQuery 3.0은 2014 년 4 월 8 일부터 W3C 권장 사항입니다.

공식 문서에서 제공하는 XQuery의 정의는 다음과 같습니다.

XQuery는 문서, 데이터베이스, 웹 페이지 및 거의 모든 것을 결합하기위한 표준화 된 언어입니다. 매우 광범위하게 구현됩니다. 강력하고 배우기 쉽습니다. XQuery는 독점 미들웨어 언어와 웹 애플리케이션 개발 언어를 대체하고 있습니다. XQuery는 복잡한 Java 또는 C ++ 프로그램을 몇 줄의 코드로 대체합니다. XQuery는 다른 많은 대안보다 작업하기 쉽고 유지 관리하기 쉽습니다.

형질

  • Functional Language − XQuery는 XML 기반 데이터를 검색 / 쿼리하는 언어입니다.

  • Analogous to SQL − XQuery는 데이터베이스에 SQL이 무엇인지 XML입니다.

  • XPath based − XQuery는 XPath 표현식을 사용하여 XML 문서를 탐색합니다.

  • Universally accepted − XQuery는 모든 주요 데이터베이스에서 지원됩니다.

  • W3C Standard − XQuery는 W3C 표준입니다.

XQuery의 이점

  • XQuery를 사용하여 계층 및 표 형식 데이터를 모두 검색 할 수 있습니다.

  • XQuery는 트리 및 그래픽 구조를 쿼리하는 데 사용할 수 있습니다.

  • XQuery는 웹 페이지를 쿼리하는 데 직접 사용할 수 있습니다.

  • XQuery는 웹 페이지를 구축하는 데 직접 사용할 수 있습니다.

  • XQuery를 사용하여 xml 문서를 변환 할 수 있습니다.

  • XQuery는 XML 기반 데이터베이스 및 개체 기반 데이터베이스에 이상적입니다. 개체 데이터베이스는 순수한 표 형식 데이터베이스보다 훨씬 유연하고 강력합니다.

이 장에서는 로컬 개발 환경에서 XQuery 라이브러리를 설정하는 방법에 대해 설명합니다.

우리는 널리 사용되는 오픈 소스 독립형 XQuery 프로세서 Saxon Home Edition (Saxon-HE)을 사용하고 있습니다. 이 프로세서는 XSLT 2.0, XQuery 3.0 및 XPath 3.0을 지원하며 성능에 최적화되어 있습니다. Saxon XQuery 프로세서는 XML 데이터베이스없이 사용할 수 있습니다. 예제에서는 간단한 XML 문서를 데이터베이스로 사용합니다.

Saxon XQuery 프로세서를 사용하려면 애플리케이션의 클래스 경로에 saxon9he.jar, saxon9-test.jar, saxon9-unpack, saxon9-xqj.jar이 있어야합니다. 이 jar 파일은 다운로드 파일에서 사용할 수 있습니다.SaxonHE9-6-0-1J.zipSaxonHE9-6-0-1J.zip을 다운로드 하십시오 .

Java 기반 Saxon XQuery 프로세서를 사용하여 샘플 XML 문서 인 books.xml에 대한 XQuery 표현식이 포함 된 파일 인 books.xqy를 테스트합니다.

이 예에서는 가격이 30보다 큰 책의 제목 요소를 가져 오는 쿼리를 작성하고 처리하는 방법을 알아 봅니다.

books.xml

<?xml version="1.0" encoding="UTF-8"?>
<books>
   
   <book category="JAVA">
      <title lang="en">Learn Java in 24 Hours</title>
      <author>Robert</author>
      <year>2005</year>
      <price>30.00</price>
   </book>
   
   <book category="DOTNET">
      <title lang="en">Learn .Net in 24 hours</title>
      <author>Peter</author>
      <year>2011</year>
      <price>40.50</price>
   </book>
   
   <book category="XML">
      <title lang="en">Learn XQuery in 24 hours</title>
      <author>Robert</author>
      <author>Peter</author> 
      <year>2013</year>
      <price>50.00</price>
   </book>
   
   <book category="XML">
      <title lang="en">Learn XPath in 24 hours</title>
      <author>Jay Ban</author>
      <year>2010</year>
      <price>16.50</price>
   </book>
   
</books>

books.xqy

for $x in doc("books.xml")/books/book where $x/price>30
return $x/title

XQueryTester.java

package com.tutorialspoint.xquery;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;

import javax.xml.xquery.XQConnection;
import javax.xml.xquery.XQDataSource;
import javax.xml.xquery.XQException;
import javax.xml.xquery.XQPreparedExpression;
import javax.xml.xquery.XQResultSequence;

import com.saxonica.xqj.SaxonXQDataSource;

public class XQueryTester {
   public static void main(String[] args){
      try {
         execute();
      }
      
      catch (FileNotFoundException e) {
         e.printStackTrace();
      }
      
      catch (XQException e) {
         e.printStackTrace();
      }
   }

   private static void execute() throws FileNotFoundException, XQException{
      InputStream inputStream = new FileInputStream(new File("books.xqy"));
      XQDataSource ds = new SaxonXQDataSource();
      XQConnection conn = ds.getConnection();
      XQPreparedExpression exp = conn.prepareExpression(inputStream);
      XQResultSequence result = exp.executeQuery();
      
      while (result.next()) {
         System.out.println(result.getItemAsString(null));
      }
   }	
}

XML에 대해 XQuery를 실행하는 단계

  • Step 1 − XQueryTester.java를 임의의 위치에 복사합니다. E: > java

  • Step 2 − books.xml을 동일한 위치에 복사합니다. E: > java

  • Step 3 − books.xqy를 동일한 위치에 복사합니다. E: > java

  • Step 4− 콘솔을 사용하여 XQueryTester.java를 컴파일합니다. 시스템에 JDK 1.5 이상이 설치되어 있고 클래스 경로가 구성되어 있는지 확인하십시오. JAVA 사용 방법에 대한 자세한 내용은 JAVA Tutorial을 참조하십시오.

E:\java\javac XQueryTester.java
  • Step 5 − XQueryTester 실행

E:\java\java XQueryTester

산출

다음과 같은 결과를 얻을 수 있습니다.

<title lang="en">Learn .Net in 24 hours</title>
<title lang="en">Learn XQuery in 24 hours</title>

이해 예

  • books.xml은 샘플 데이터를 나타냅니다.

  • books.xqy는 books.xml에서 실행될 XQuery 표현식을 나타냅니다. 다음 장에서 그 표현을 자세히 이해할 것입니다.

  • Java 기반 XQuery 실행 프로그램 인 XQueryTester는 books.xqy를 읽고이를 XQuery 표현식 프로세서에 전달하고 표현식을 실행합니다. 그런 다음 결과가 인쇄됩니다.

다음은 다양한 서적의 서점 레코드를 포함하는 샘플 XML 문서입니다.

books.xml

<?xml version="1.0" encoding="UTF-8"?>
<books>
   
   <book category="JAVA">
      <title lang="en">Learn Java in 24 Hours</title>
      <author>Robert</author>
      <year>2005</year>
      <price>30.00</price>
   </book>
   
   <book category="DOTNET">
      <title lang="en">Learn .Net in 24 hours</title>
      <author>Peter</author>
      <year>2011</year>
      <price>70.50</price>
   </book>
   
   <book category="XML">
      <title lang="en">Learn XQuery in 24 hours</title>
      <author>Robert</author>
      <author>Peter</author> 
      <year>2013</year>
      <price>50.00</price>
   </book>
   
   <book category="XML">
      <title lang="en">Learn XPath in 24 hours</title>
      <author>Jay Ban</author>
      <year>2010</year>
      <price>16.50</price>
   </book>
   
</books>

다음은 위의 XML 문서에서 실행할 쿼리 표현식이 포함 된 샘플 Xquery 문서입니다. 목적은 가격이 30보다 큰 XML 노드의 제목 요소를 가져 오는 것입니다.

books.xqy

for $x in doc("books.xml")/books/book
where $x/price>30 return $x/title

결과

<title lang="en">Learn .Net in 24 hours</title>
<title lang="en">Learn XQuery in 24 hours</title>

결과 확인

결과를 확인하려면 books.xqy ( 환경 설정 장에서 제공) 의 내용을 위의 XQuery 표현식 으로 바꾸고 XQueryTester Java 프로그램을 실행하십시오.

XQuery 표현식

위의 XQuery 표현식의 각 부분을 이해합시다.

기능 사용

doc("books.xml")

doc ()는 XML 소스를 찾는 데 사용되는 XQuery 함수 중 하나입니다. 여기에서 "books.xml"을 전달했습니다. 상대 경로를 고려할 때 books.xml은 books.xqy가있는 동일한 경로에 있어야합니다.

XPath 표현식 사용

doc("books.xml")/books/book

XQuery는 XPath 표현식을 많이 사용하여 검색 할 XML의 필수 부분을 찾습니다. 여기에서는 books 노드에서 사용할 수있는 모든 book 노드를 선택했습니다.

개체 반복

for $x in doc("books.xml")/books/book

XQuery는 xml 데이터를 개체로 취급합니다. 위의 예에서 $ x는 선택한 노드를 나타내고 for 루프는 노드 모음을 반복합니다.

조건 적용

where $x/price>30

$ x는 선택된 노드를 나타내므로 "/"는 필수 요소의 값을 가져 오는 데 사용됩니다. "where"절은 검색 결과에 조건을 지정하는 데 사용됩니다.

결과 반환

return $x/title

$ x는 선택된 노드를 나타내므로 "/"는 필요한 요소, 가격, 제목의 값을 가져 오는 데 사용됩니다. "return"절은 검색 결과에서 요소를 반환하는 데 사용됩니다.

FLWOR는 "For, Let, Where, Order by, Return"의 약어입니다. 다음 목록은 FLWOR 표현식에서 설명하는 내용을 보여줍니다.

  • F -For-모든 노드의 모음을 선택합니다.

  • L -Let-결과를 XQuery 변수에 넣습니다.

  • W -Where-조건에 지정된 노드를 선택합니다.

  • O -정렬 기준-기준에 따라 지정된 노드를 정렬합니다.

  • R -반환-최종 결과를 반환합니다.

다음은 책 모음에 대한 정보가 포함 된 샘플 XML 문서입니다. FLWOR 표현식을 사용하여 가격이 30보다 큰 책의 제목을 검색합니다.

books.xml

<?xml version="1.0" encoding="UTF-8"?>
<books>
   
   <book category="JAVA">
      <title lang="en">Learn Java in 24 Hours</title>
      <author>Robert</author>
      <year>2005</year>
      <price>30.00</price>
   </book>
   
   <book category="DOTNET">
      <title lang="en">Learn .Net in 24 hours</title>
      <author>Peter</author>
      <year>2011</year>
      <price>70.50</price>
   </book>
   
   <book category="XML">
      <title lang="en">Learn XQuery in 24 hours</title>
      <author>Robert</author>
      <author>Peter</author> 
      <year>2013</year>
      <price>50.00</price>
   </book>
   
   <book category="XML">
      <title lang="en">Learn XPath in 24 hours</title>
      <author>Jay Ban</author>
      <year>2010</year>
      <price>16.50</price>
   </book>
   
</books>

다음 Xquery 문서에는 위의 XML 문서에서 실행할 쿼리 표현식이 포함되어 있습니다.

books.xqy

let $books := (doc("books.xml")/books/book) return <results> { for $x in $books where $x/price>30
   order by $x/price return $x/title
}
</results>

결과

<title lang="en">Learn XQuery in 24 hours</title>
<title lang="en">Learn .Net in 24 hours</title>

결과 확인

결과를 확인하려면 books.xqy ( 환경 설정 장에서 제공) 의 내용을 위의 XQuery 표현식 으로 바꾸고 XQueryTester Java 프로그램을 실행하십시오.

XQuery는 또한 XML 문서를 HTML 페이지로 변환하는 데 쉽게 사용할 수 있습니다. XQuery가 수행하는 방법을 이해하려면 다음 예제를 살펴보십시오.

동일한 books.xml 파일을 사용합니다. 다음 예제에서는 books.xml에서 XQuery 추출 데이터를 사용하고 모든 책의 제목과 해당 가격을 포함하는 HTML 테이블을 만듭니다.

books.xml

<?xml version="1.0" encoding="UTF-8"?>
<books>
   
   <book category="JAVA">
      <title lang="en">Learn Java in 24 Hours</title>
      <author>Robert</author>
      <year>2005</year>
      <price>30.00</price>
   </book>
   
   <book category="DOTNET">
      <title lang="en">Learn .Net in 24 hours</title>
      <author>Peter</author>
      <year>2011</year>
      <price>70.50</price>
   </book>
   
   <book category="XML">
      <title lang="en">Learn XQuery in 24 hours</title>
      <author>Robert</author>
      <author>Peter</author> 
      <year>2013</year>
      <price>50.00</price>
   </book>
   
   <book category="XML">
      <title lang="en">Learn XPath in 24 hours</title>
      <author>Jay Ban</author>
      <year>2010</year>
      <price>16.50</price>
   </book>
   
</books>

아래는 위의 XML 문서에서 실행될 Xquery 표현식입니다.

books.xqy

let $books := (doc("books.xml")/books/book) return <table><tr><th>Title</th><th>Price</th></tr> { for $x in $books order by $x/price
   return <tr><td>{data($x/title)}</td><td>{data($x/price)}</td></tr>
}
</table>
</results>

결과

<table>
   <tr>
      <th>Title</th>
      <th>Price</th>
   </tr>
   <tr>
      <td>Learn XPath in 24 hours</td>
      <td>16.50</td>
   </tr>   
   <tr>
      <td>Learn Java in 24 Hours</td>
      <td>30.00</td>
   </tr>
   <tr>
      <td>Learn XQuery in 24 hours</td>
      <td>50.00</td>
   </tr>   
   <tr>
      <td>Learn .Net in 24 hours</td>
      <td>70.50</td>
   </tr>
</table>

결과 확인

결과를 확인하려면 books.xqy ( 환경 설정 장에서 제공) 의 내용을 위의 XQuery 표현식 으로 바꾸고 XQueryTester Java 프로그램을 실행하십시오.

XQuery 표현식

여기서 우리는 다음 XQuery 표현식을 사용했습니다.

  • data () 함수를 사용하여 제목 요소의 값을 평가하고

  • {} 연산자는 XQuery 프로세서에 data ()를 함수로 간주하도록 지시합니다. {} 연산자를 사용하지 않으면 data ()는 일반 텍스트로 처리됩니다.

XQuery는 XPath와 호환됩니다. XPath 표현식을 사용하여 XML 콜렉션에 대한 검색 결과를 제한합니다. XPath 사용 방법에 대한 자세한 내용은 XPath 튜토리얼을 참조하십시오 .

이전에 책 목록을 가져 오기 위해 사용한 다음 XPath 표현식을 상기하십시오.

doc("books.xml")/books/book

XPath 예

books.xml 파일을 사용하고 여기에 XQuery를 적용합니다.

books.xml

<?xml version="1.0" encoding="UTF-8"?>
<books>
   
   <book category="JAVA">
      <title lang="en">Learn Java in 24 Hours</title>
      <author>Robert</author>
      <year>2005</year>
      <price>30.00</price>
   </book>
   
   <book category="DOTNET">
      <title lang="en">Learn .Net in 24 hours</title>
      <author>Peter</author>
      <year>2011</year>
      <price>40.50</price>
   </book>
   
   <book category="XML">
      <title lang="en">Learn XQuery in 24 hours</title>
      <author>Robert</author>
      <author>Peter</author> 
      <year>2013</year>
      <price>50.00</price>
   </book>
   
   <book category="XML">
      <title lang="en">Learn XPath in 24 hours</title>
      <author>Jay Ban</author>
      <year>2010</year>
      <price>16.50</price>
   </book>
   
</books>

여기에서는 가격 값이 30보다 큰 책 제목을 표시하는 동일한 목표를 충족하는 XQuery 문의 세 가지 버전을 제공했습니다.

XQuery – 버전 1

(: read the entire xml document :)
let $books := doc("books.xml") for $x in $books/books/book where $x/price > 30
return $x/title

산출

<title lang="en">Learn .Net in 24 hours</title>
<title lang="en">Learn XQuery in 24 hours</title>

XQuery – 버전 2

(: read all books :)
let $books := doc("books.xml")/books/book

for $x in $books
where $x/price > 30 return $x/title

산출

<title lang="en">Learn .Net in 24 hours</title>
<title lang="en">Learn XQuery in 24 hours</title>

XQuery – 버전 3

(: read books with price > 30 :)
let $books := doc("books.xml")/books/book[price > 30] for $x in $books return $x/title

산출

<title lang="en">Learn .Net in 24 hours</title>
<title lang="en">Learn XQuery in 24 hours</title>

결과 확인

결과를 확인하려면 books.xqy ( 환경 설정 장에서 제공) 의 내용을 위의 XQuery 표현식 으로 바꾸고 XQueryTester Java 프로그램을 실행하십시오.

시퀀스는 항목이 유사하거나 다른 유형일 수있는 정렬 된 항목 모음을 나타냅니다.

시퀀스 생성

시퀀스는 따옴표 안에 문자열이있는 괄호 나 큰 따옴표 및 숫자를 사용하여 생성됩니다. XML 요소는 시퀀스의 항목으로도 사용할 수 있습니다.

XQuery 표현식

let $items := ('orange', <apple/>, <fruit type="juicy"/>, <vehicle type="car">sentro</vehicle>, 1,2,3,'a','b',"abc") let $count := count($items) return <result> <count>{$count}</count>
   
   <items>
      {
	     for $item in $items
         return <item>{$item}</item>
      }
   </items>
   
</result>

산출

<result>
   <count>10</count>
   <items>
      <item>orange</item>
      <item>
         <apple/>
      </item>
      <item>
         <fruit type="juicy"/>
      </item>
      <item>
         <vehicle type="car">Sentro</vehicle>
      </item>
      <item>1</item>
      <item>2</item>
      <item>3</item>
      <item>a</item>
      <item>b</item>
      <item>abc</item>
   </items>
</result>

시퀀스 항목보기

시퀀스의 항목은 인덱스 또는 값을 사용하여 하나씩 반복 할 수 있습니다. 위의 예는 시퀀스의 항목을 하나씩 반복했습니다. 다른 두 가지 방법을 살펴 보겠습니다.

XQuery 표현식 (인덱스)

let $items := (1,2,3,4,5,6)
let $count := count($items)
return
   <result>
      <count>{$count}</count> <items> { for $item in $items[2] return <item>{$item}</item>
      }
      </items>
      
   </result>

산출

<result>
   <count>6</count>
   <items>
      <item>2</item>
   </items>
</result>

XQuery 표현식 (값)

let $items := (1,2,3,4,5,6) let $count := count($items) return <result> <count>{$count}</count>
      
      <items>
      {
         for $item in $items[. = (1,2,3)]
         return <item>{$item}</item>
      }
      </items>
      
   </result>

산출

<result>
   <count>6</count>
   <items>
      <item>1</item>
      <item>2</item>
      <item>3</item>
   </items>
</result>

다음 표는 XQuery에서 제공하는 일반적으로 사용되는 시퀀스 함수를 나열합니다.

Sr. 아니요 이름 및 설명
1

count ($ seq as item () *)

시퀀스의 항목을 계산합니다.

2

sum ($ seq as item () *)

시퀀스의 항목 합계를 반환합니다.

avg ($ seq as item () *)

시퀀스에있는 항목의 평균을 반환합니다.

4

min ($ seq as item () *)

시퀀스에서 최소값 항목을 반환합니다.

5

max ($ seq as item () *)

시퀀스에서 최대 값 항목을 반환합니다.

6

고유 값 ($ seq as item () *)

시퀀스에서 선택한 고유 항목을 반환합니다.

7

subsequence ($ seq as item () *, $startingLoc as xs:double, $길이 (xs : double)

제공된 시퀀스의 하위 집합을 반환합니다.

8

삽입 전 ($seq as item()*, $xs : integer로 위치, $ inserts as item () *)

시퀀스에 항목을 삽입합니다.

9

remove ($ seq as item () *, $ position as xs : integer)

시퀀스에서 항목을 제거합니다.

10

reverse ($ seq as item () *)

역순을 반환합니다.

11

index-of ($seq as anyAtomicType()*, $anyAtomicType ())으로 대상

인덱스를 정수로 반환하여 시퀀스 내 항목의 가용성을 나타냅니다.

12

마지막()

술어 표현식에서 사용될 때 시퀀스의 마지막 요소를 리턴합니다.

13

위치()

시퀀스에서 항목의 위치를 ​​가져 오기 위해 FLOWR 표현식에서 사용됩니다.

다음 표는 XQuery에서 제공하는 일반적으로 사용되는 문자열 조작 함수를 나열합니다.

Sr. 아니요 이름 및 설명
1

string-length ($ string as xs : string) as xs : integer

문자열의 길이를 반환합니다.

2

concat ($ input as xs : anyAtomicType?) as xs : string

연결된 문자열을 출력으로 반환합니다.

string-join ($sequence as xs:string*, $구분자 (xs : string)) as xs : string

구분 기호로 구분 된 시퀀스의 항목 조합을 반환합니다.

다음 표는 XQuery에서 제공하는 일반적으로 사용되는 날짜 함수를 나열합니다.

Sr. 아니요 이름 및 설명
1

현재 날짜 ()

현재 날짜를 반환합니다.

2

현재 시간()

현재 시간을 반환합니다.

현재 날짜 시간 ()

현재 날짜와 현재 시간을 모두 반환합니다.

다음은 XQuery에서 제공하는 일반적으로 사용되는 정규식 함수 목록입니다.

Sr. 아니요 이름 및 설명
1

성냥($input, $정규식)

입력이 제공된 정규식과 일치하면 true를 반환합니다.

2

바꾸다($input, $정규식, $ string)

일치하는 입력 문자열을 주어진 문자열로 바꿉니다.

tokenize ($ input, $ regex)

정규식과 일치하는 항목 시퀀스를 반환합니다.

XQuery는 전달 된 입력 값의 유효성을 확인하는 데 매우 유용한 if-then-else 구문을 제공합니다. 다음은 if-then-else 구문의 구문입니다.

통사론

if (condition) then
 ... 
else
 ...

다음 books.xml 파일을 사용하고 if-then-else 구문을 포함하는 XQuery 표현식을 적용하여 가격 값이 30보다 큰 책의 제목을 검색합니다.

books.xml

<?xml version="1.0" encoding="UTF-8"?>
<books>
   <book category="JAVA">
      <title lang="en">Learn Java in 24 Hours</title>
      <author>Robert</author>
      <year>2005</year>
      <price>30.00</price>
   </book>
   
   <book category="DOTNET">
      <title lang="en">Learn .Net in 24 hours</title>
      <author>Peter</author>
      <year>2011</year>
      <price>40.50</price>
   </book>
   
   <book category="XML">
      <title lang="en">Learn XQuery in 24 hours</title>
      <author>Robert</author>
      <author>Peter</author>
      <year>2013</year>
      <price>50.00</price>
   </book>
   
   <book category="XML">
      <title lang="en">Learn XPath in 24 hours</title>
      <author>Jay Ban</author>
      <year>2010</year>
      <price>16.50</price>
   </book>
</books>

위의 XML 문서에 적용되는 XQuery 표현식은 다음과 같다.

books.xqy

<result>
{
   if(not(doc("books.xml"))) then (
      <error>
         <message>books.xml does not exist</message>
      </error>
   )
   else ( 
      for $x in doc("books.xml")/books/book	
      where $x/price>30 return $x/title
   )
}
</result>

산출

<result>
   <title lang="en">Learn .Net in 24 hours</title>
   <title lang="en">Learn XQuery in 24 hours</title>
</result>

결과 확인

결과를 확인하려면 books.xqy ( 환경 설정 장에서 제공) 의 내용을 위의 XQuery 표현식 으로 바꾸고 XQueryTester Java 프로그램을 실행하십시오.

XQuery는 사용자 정의 함수를 작성하는 기능을 제공합니다. 다음은 사용자 지정 함수를 만들기위한 지침입니다.

  • 키워드 사용 declare function 함수를 정의합니다.

  • 현재 XML 스키마에 정의 된 데이터 유형 사용

  • 함수 본문을 중괄호로 묶습니다.

  • 함수 이름 앞에 XML 네임 스페이스를 붙입니다.

사용자 지정 함수를 만드는 동안 다음 구문이 사용됩니다.

통사론

declare function prefix:function_name($parameter as datatype?...)
as returnDatatype?
{
   function body...
};

다음 예제는 XQuery에서 사용자 정의 함수를 만드는 방법을 보여줍니다.

XQuery 표현식

declare function local:discount($price as xs:decimal?,$percentDiscount as xs:decimal?) as xs:decimal? { let $discount := $price - ($price * $percentDiscount div 100) return $discount
};

let $originalPrice := 100 let $discountAvailed := 10

return ( local:discount($originalPrice, $discountAvailed))

산출

90

결과 확인

결과를 확인하려면 books.xqy ( 환경 설정 장에서 제공) 의 내용을 위의 XQuery 표현식 으로 바꾸고 XQueryTester Java 프로그램을 실행하십시오.