我是從如下一marklogic教程,Xquery從XSD模式獲取屬性名稱和類型?
https://developer.marklogic.com/learn/2007-04-schema
在一個場景中,在那裏我有XSD文件
<!-- tutorial.xsd -->
<xs:schema targetNamespace="http://marklogic.com/tutorial"
attributeFormDefault="unqualified"
elementFormDefault="unqualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="name" type="xs:token"
abstract="false" nillable="false"/>
<xs:element name="qualification" type="xs:token"
abstract="false" nillable="false"/>
<xs:element name="born" type="xs:date"
abstract="false" nillable="false"/>
<xs:element name="dead" type="xs:date"
abstract="false" nillable="false"/>
<xs:element name="isbn" type="xs:unsignedLong"
abstract="false" nillable="false"/>
<xs:attribute name="id" type="xs:ID"/>
<xs:attribute name="available" type="xs:boolean"/>
<xs:attribute name="lang" type="xs:language"/>
<xs:element name="title" abstract="false" nillable="false">
<xs:complexType mixed="false">
<xs:simpleContent>
<xs:extension base="xs:token">
<xs:attribute ref="lang" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="library" abstract="false" nillable="false">
<xs:complexType mixed="false">
<xs:sequence minOccurs="1" maxOccurs="1">
<xs:element ref="book" maxOccurs="unbounded" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="author" abstract="false" nillable="false">
<xs:complexType mixed="false">
<xs:sequence minOccurs="1" maxOccurs="1">
<xs:element ref="name" minOccurs="1" maxOccurs="1"/>
<xs:element ref="born" minOccurs="1" maxOccurs="1"/>
<xs:element ref="dead" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:attribute ref="id" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="book" abstract="false" nillable="false">
<xs:complexType mixed="false">
<xs:sequence minOccurs="1" maxOccurs="1">
<xs:element ref="isbn" minOccurs="1" maxOccurs="1"/>
<xs:element ref="title" minOccurs="1" maxOccurs="1"/>
<xs:element ref="author" minOccurs="0"
maxOccurs="unbounded"/>
<xs:element ref="character" minOccurs="0"
maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute ref="id" use="optional"/>
<xs:attribute ref="available" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="character" abstract="false" nillable="false">
<xs:complexType mixed="false">
<xs:sequence minOccurs="1" maxOccurs="1">
<xs:element ref="name" minOccurs="1" maxOccurs="1"/>
<xs:element ref="born" minOccurs="1" maxOccurs="1"/>
<xs:element ref="qualification" minOccurs="1"
maxOccurs="1"/>
</xs:sequence>
<xs:attribute ref="id" use="optional"/>
</xs:complexType>
</xs:element>
</xs:schema>
我想提取此XSD屬性名稱和類型。 以下是我的XQuery:
if (xdmp:database-name(xdmp:database()) ne 'Schemas')
then error(
QName('', 'NOT-SCHEMAS'), 'make sure the content-source is Schemas')
else
doc('tutorial.xsd')
/descendant::xs:element/@name
(: results :)
我得到以下幾點:
name
qualification
born
dead
isbn
title
library
author
book
character
,但我需要的屬性和值一起
name xs:token
qualification xs:token
born xs:token
有人可以幫我改寫的XQuery完成以上輸出?
非常感謝。你讓我今天一整天都感覺很好。我是Xquery的新手。謝謝你幫我解決這個問題。 – happybayes
經過仔細審查的結果..我看到有一些重複。就像我得到的空名稱和類型一樣,只是「是一個」被打印出來。我想知道如何刪除這些重複項?是否有可以使用或寫入條件來刪除空名稱和屬性的distict函數?感謝您的幫助@Dave Cassel – happybayes
@mani我添加了where子句。您可以在XQuery和XSLT參考指南的[FLWOR表達式](http://docs.marklogic.com/guide/xquery/langoverview#id_11626)部分中查看有關FLWOR語句的更多信息。 –