지원되는 버전:현재 (18) / 17 / 16 / 15 / 14 / 13
개발 버전:개발
지원되지 않는 버전:12 / 11 / 10
이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
다음에 대한 동일한 페이지를 보고 싶을 수도 있습니다.현재버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

D.3. 롤 토토 제한 및 SQL/롤 토토 준수

ISO/IEC 9075-14(SQL/롤 토토)의 롤 토토 관련 사양에 대한 중요한 개정이 SQL:2006에 도입되었습니다.포스트그레SQL의 XML 데이터 유형 및 관련 기능 구현은 대부분 2003년 이전 버전을 따르며 일부는 이후 버전에서 차용했습니다. 특히:

  • 현재 표준이 보유할 XML 데이터 유형 계열을 제공하는 경우문서또는내용형이 지정되지 않은 또는 XML 스키마 유형 변형 및 유형롤 토토(순서)롤 토토 콘텐츠의 임의의 부분을 담기 위해,포스트그레SQL싱글 제공롤 토토보유할 수 있는 유형문서또는내용. 표준과 동등한 것은 없습니다.시퀀스유형.

  • PostgreSQLSQL:2006에 도입된 두 가지 함수를 제공하지만 표준에 지정된 롤 토토 쿼리 대신 XPath 1.0 언어를 사용하는 변형입니다.

이 섹션에서는 발생할 수 있는 몇 가지 차이점을 제시합니다.

D.3.1. 쿼리는 XPath 1.0으로 제한됩니다.

PostgreSQL특정 함수xpath()그리고xpath_exists()XPath 언어를 사용하여 XML 문서를 쿼리합니다.포스트그레SQL또한 표준 함수의 XPath 전용 변형을 제공합니다롤 토토EXISTS그리고롤 토토TABLE, 공식적으로 XQuery 언어를 사용합니다. 이 모든 기능에 대해,PostgreSQL다음에 의존함lib롤 토토2XPath 1.0만 제공하는 라이브러리.

XQuery 언어와 XPath 버전 2.0 이상 사이에는 강한 연관성이 있습니다. 구문적으로 유효하고 두 언어 모두에서 성공적으로 실행되는 모든 표현식은 동일한 결과를 생성합니다(숫자 문자 참조 또는 미리 정의된 엔터티 참조가 포함된 표현식의 경우 사소한 예외는 있지만 XPath는 이를 그대로 유지하는 동안 XQuery가 해당 문자로 대체함). 그러나 이들 언어와 ​​XPath 1.0 사이에는 그러한 연관성이 없습니다. 이는 이전 언어였으며 여러 측면에서 다릅니다.

유념해야 할 두 가지 제한 범주가 있습니다. 즉, SQL 표준에 지정된 함수에 대해 XQuery에서 XPath로의 제한과 표준 및 SQL 모두에 대해 XPath를 버전 1.0으로 제한하는 것입니다.PostgreSQL특정 함수.

D.3.1.1. XQuery를 XPath로 제한

XPath의 기능을 넘어서는 XQuery의 기능은 다음과 같습니다:

  • XQuery 표현식은 가능한 모든 XPath 값 외에도 새로운 XML 노드를 구성하고 반환할 수 있습니다. XPath는 원자 유형(숫자, 문자열 등)의 값을 생성하고 반환할 수 있지만 표현식에 대한 입력으로 제공된 문서에 이미 존재하는 XML 노드만 반환할 수 있습니다.

  • XQuery에는 반복, 정렬 및 그룹화를 위한 제어 구성이 있습니다.

  • XQuery는 로컬 함수의 선언 및 사용을 허용합니다.

최신 XPath 버전은 이와 중복되는 기능을 제공하기 시작합니다(예: 기능적 스타일각각그리고정렬, 익명 함수 및parse-롤 토토문자열에서 노드 생성), XPath 3.0 이전에는 이러한 기능을 사용할 수 없었습니다.

D.3.1.2. XPath를 1.0으로 제한

XQuery 및 XPath 2.0 이상에 익숙한 개발자의 경우 XPath 1.0은 해결해야 할 여러 가지 차이점을 제시합니다.

  • XQuery/XPath 표현식의 기본 유형,시퀀스14064_14257

  • 원하는 순서로 원하는 항목을 포함할 수 있는 XQuery/XPath 시퀀스와 달리 XPath 1.0 노드 집합에는 순서가 보장되지 않으며 다른 집합과 마찬가지로 동일한 항목이 여러 번 나타나는 것을 허용하지 않습니다.

    참고

    lib롤 토토2라이브러리는 항상 노드 집합을 반환하는 것 같습니다.PostgreSQL구성원을 입력 문서와 동일한 상대 순서로 정렬합니다. 문서에서는 이 동작을 커밋하지 않으며 XPath 1.0 표현식은 이를 제어할 수 없습니다.

  • XQuery/XPath는 롤 토토 스키마에 정의된 모든 유형과 해당 유형에 대한 많은 연산자 및 함수를 제공하는 반면, XPath 1.0에는 노드 집합과 세 가지 원자 유형만 있습니다.부울, 더블문자열.

  • XPath 1.0에는 조건 연산자가 없습니다. 다음과 같은 XQuery/XPath 표현식if ( 모자 ) then hat/@size else "모자 없음"XPath 1.0에 해당하는 항목이 없습니다.

  • XPath 1.0에는 문자열에 대한 순서 비교 연산자가 없습니다. 둘 다"고양이" < "개"그리고"고양이" "개"각각은 둘의 숫자 비교이기 때문에 거짓입니다.NaNs. 대조적으로,=그리고!=문자열을 문자열로 비교하세요.

  • XPath 1.0은 다음과 같은 차이점을 모호하게 만듭니다.값 비교그리고일반 비교XQuery/XPath가 정의한 대로입니다. 둘 다sale/@hatsize = 7그리고판매/@customer = "앨리스"실존적으로 정량화된 비교이며, 있으면 참판매속성에 대해 주어진 값을 사용하지만sale/@taxable = false()은와의 값 비교입니다.유효 부울 값16594_16640판매과세 대상속성 전혀.

  • XQuery/XPath 데이터 모델에서 a문서 노드문서 형식(즉, 외부에 주석과 처리 지침만 있는 정확히 하나의 최상위 요소) 또는 콘텐츠 형식(해당 제약 조건이 완화됨)을 가질 수 있습니다. XPath 1.0의 해당 기능인루트 노드, 문서 형식으로만 가능합니다. 이것이 이유의 일부입니다.롤 토토모든 컨텍스트 항목으로 전달된 값PostgreSQLXPath 기반 함수는 문서 형식이어야 합니다.

여기에 강조된 차이점이 전부는 아닙니다. XQuery와 XPath 2.0 이상 버전에는 XPath 1.0 호환 모드와 W3C 목록이 있습니다.함수 라이브러리 변경그리고언어 변경해당 모드에 적용하면 차이점에 대한 보다 완전한(그러나 여전히 완전하지는 않은) 설명을 제공합니다. 호환성 모드로 인해 이후 언어가 XPath 1.0과 정확히 동일하게 될 수는 없습니다.

D.3.1.3. SQL과 롤 토토 데이터 유형 및 값 간의 매핑

SQL:2006 이상에서는 표준 SQL 데이터 유형과 롤 토토 스키마 유형 간의 변환 방향이 모두 정확하게 지정됩니다. 그러나 규칙은 XQuery/XPath의 유형과 의미를 사용하여 표현되며 XPath 1.0의 다른 데이터 모델에 직접 적용되지 않습니다.

언제포스트그레SQLSQL 데이터 값을 롤 토토에 매핑합니다(예:롤 토토요소) 또는 XML에서 SQL로(의 출력 열에서와 같이)롤 토토테이블), 특별히 취급되는 몇몇 경우를 제외하고포스트그레SQL단순히 XML 데이터 유형의 XPath 1.0 문자열 형식이 SQL 데이터 유형의 텍스트 입력 형식으로 유효하다고 가정하며 그 반대도 마찬가지입니다. 이 규칙은 많은 데이터 유형에 대해 표준에 지정된 매핑과 유사한 결과를 생성하는 동시에 단순하다는 장점이 있습니다.

다른 시스템과의 상호 운용성이 문제가 되는 경우 일부 데이터 유형의 경우 데이터 유형 형식 지정 기능을 사용해야 할 수도 있습니다(예:PostgreSQL : 문서 : 12 : 9.8. 데이터 유형 스포츠 토토 스포츠 토토 기능) 명시적으로 표준 매핑을 생성합니다.

D.3.2.  구현의 부수적 한계

이 섹션은 고유하지 않은 제한에 관한 것입니다.lib롤 토토2라이브러리이지만 현재 구현에 적용PostgreSQL.

D.3.2.1. 만값별전달 메커니즘이 지원됨

SQL 표준은 두 가지를 정의합니다.전달 메커니즘SQL에서 롤 토토 인수를 롤 토토 함수로 전달하거나 결과를 수신할 때 적용됩니다.참조 기준, 여기서 특정 롤 토토 값은 노드 ID를 유지합니다.값별, 롤 토토 콘텐츠가 전달되지만 노드 ID는 유지되지 않습니다. 매개변수 목록 앞에 메커니즘을 지정하여 모든 매개변수에 대한 기본 메커니즘으로 지정하거나 매개변수 뒤에 메커니즘을 지정하여 기본값을 재정의할 수 있습니다.

차이점을 설명하기 위해, 만약x은 XML 값입니다. SQL:2006 환경에서 이 두 쿼리는 각각 true와 false를 생성합니다.

SELECT 롤 토토QUERY('$a는 $b입니다' PASSING BY REFxAS A,xAS b 비어 있으면 NULL);
SELECT 롤 토토QUERY('$a는 $b입니다' 값 전달xAS A,xAS b 비어 있으면 NULL);

포스트그레SQL수락하겠습니다값별또는참조 기준안에롤 토토EXISTS또는롤 토토TABLE구성하지만 무시합니다.롤 토토데이터 유형은 문자열 직렬 표현을 보유하므로 보존할 노드 ID가 없으며 전달은 항상 효과적입니다.값별.

D.3.2.2. 명명된 매개변수를 쿼리에 전달할 수 없습니다.

XPath 기반 함수는 XPath 표현식의 컨텍스트 항목 역할을 하기 위해 하나의 매개변수 전달을 지원하지만 명명된 매개변수로 표현식에 사용할 수 있는 추가 값 전달을 지원하지 않습니다.

D.3.2.3. 아니요롤 토토(순서)유형

PostgreSQL 롤 토토데이터 유형은 값만 보유할 수 있습니다.문서또는콘텐츠양식. XQuery/XPath 표현식 컨텍스트 항목은 단일 XML 노드 또는 원자 값이어야 하지만 XPath 1.0에서는 이를 XML 노드로만 제한하고 허용하는 노드 유형이 없습니다.콘텐츠. 결과는 잘 구성된 것입니다.문서다음과 같은 유일한 XML 값 형식입니다.포스트그레SQLXPath 컨텍스트 항목으로 제공할 수 있습니다.