これは私の最初の投稿であり、運がなくてもできる限りのことを試したので、助けを求めています.
そのため、単純な XQuery を使用して XML ファイル (以下を参照) からデータを取得しようとしていますが、結果が期待どおりに表示されないため、結果を並べ替えるのに問題があります。
私の入力ファイル:
<?xml version="1.0" encoding="UTF-8"?>
<database name="MyDB">
<constraints>
<constraint name="ASIGNATURAS_MATRICULADAS_CHK1">
<type>C</type>
<table-name>ASIGNATURAS_MATRICULADAS</table-name>
<condition>CONVOCATORIAS_AGOTADAS >= 0 AND CONVOCATORIAS_AGOTADAS < 6</condition>
</constraint>
<constraint name="SYS_C0029035">
<type>C</type>
<table-name>ASIGNATURAS_MATRICULADAS</table-name>
<condition>"CONVOCATORIAS_AGOTADAS" IS NOT NULL</condition>
</constraint>
<constraint name="SYS_C0029034">
<type>C</type>
<table-name>ASIGNATURAS_MATRICULADAS</table-name>
<condition>"COD_ASIGNATURA" IS NOT NULL</condition>
</constraint>
<constraint name="SYS_C0029033">
<type>C</type>
<table-name>ASIGNATURAS_MATRICULADAS</table-name>
<condition>"NIF_ALUMNO" IS NOT NULL</condition>
</constraint>
<constraint name="SYS_C0029031">
<type>C</type>
<table-name>ASIGNATURAS</table-name>
<condition>"CODIGO" IS NOT NULL</condition>
</constraint>
<constraint name="SYS_C0029027">
<type>C</type>
<table-name>ALUMNOS</table-name>
<condition>"NIF" IS NOT NULL</condition>
</constraint>
<constraint name="SYS_C0029029">
<type>C</type>
<table-name>ALUMNOS</table-name>
<condition>"PRIMER_APELLIDO" IS NOT NULL</condition>
</constraint>
<constraint name="SYS_C0029028">
<type>C</type>
<table-name>ALUMNOS</table-name>
<condition>"NOMBRE" IS NOT NULL</condition>
</constraint>
<constraint name="ASIGNATURAS_MATRICULADAS_FK1">
<type>R</type>
<table-name>ASIGNATURAS_MATRICULADAS</table-name>
<referenced-constraint-name>ALUMNOS_PK</referenced-constraint-name>
</constraint>
<constraint name="ASIGNATURAS_MATRICULADAS_FK2">
<type>R</type>
<table-name>ASIGNATURAS_MATRICULADAS</table-name>
<referenced-constraint-name>ASIGNATURAS_PK</referenced-constraint-name>
</constraint>
<constraint name="ALUMNOS_PK">
<type>P</type>
<table-name>ALUMNOS</table-name>
<column-name>NIF</column-name>
</constraint>
<constraint name="ASIGNATURAS_PK">
<type>P</type>
<table-name>ASIGNATURAS</table-name>
<column-name>CODIGO</column-name>
</constraint>
</constraints>
</database>
私がやろうとしているのは、非常に単純なことです。タイプ「C」のすべての制約を取得し、それらの名前をアルファベット順に並べて表示します。
これは XQuery です。
<check-constraints>
{
for $r in doc("DB.xml")//constraint[type = 'C']/@name
order by $r
return <constraint>{data($r)}</constraint>
}
</check-constraints>
私が期待している結果は次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<check-constraints>
<constraint>ASIGNATURAS_MATRICULADAS_CHK1</constraint>
<constraint>SYS_C0029027</constraint>
<constraint>SYS_C0029028</constraint>
<constraint>SYS_C0029029</constraint>
<constraint>SYS_C0029031</constraint>
<constraint>SYS_C0029033</constraint>
<constraint>SYS_C0029034</constraint>
<constraint>SYS_C0029035</constraint>
</check-constraints>
しかし、代わりに、次の結果が得られます。
<?xml version="1.0" encoding="UTF-8"?>
<check-constraints>
<constraint>SYS_C0029031</constraint>
<constraint>ASIGNATURAS_MATRICULADAS_CHK1</constraint>
<constraint>SYS_C0029027</constraint>
<constraint>SYS_C0029028</constraint>
<constraint>SYS_C0029029</constraint>
<constraint>SYS_C0029035</constraint>
<constraint>SYS_C0029034</constraint>
<constraint>SYS_C0029033</constraint>
</check-constraints>
私は何を間違っていますか?「並べ替え」が正しくソートされないのはなぜですか? 「順序」を付けないと、ファイルにリストされているのと同じ順序で結果が得られます。これは、ノードが見つかったときに入力されるため、意味があります。
編集: 示唆されているように、明らかに XQuery プロセッサが原因である可能性があります。この場合、Saxon プロセッサをデフォルトとして使用する Oxygen に取り組んでいます。Zorba を試してみたところ、そこで動作します。だから今、私はもっと混乱しています。正しい出力はどれですか?
解決済み: 入力ファイルの一部の値に (エラーにより) ランダムな長さの BOM 文字が含まれており、それらが非表示になっているため、順序付けが正しく行われませんでした。それらを取り除くと、期待どおりに機能します。