私はXMLスキーマがないXMLデータセットの構造を発見したいと思います。この発見の一環として、データセットの要素の最小および最大カーディナリティ(minOccurs
およびmaxOccurs
)を計算したいと思います。 XML文書からXMLスキーマを生成するためのさまざまなツールを試しましたが、minOccurs
とmaxOccurs
は生成されません。しかし、私はXSLT(2.0+)でそうすることが可能であると思われます。要素カーディナリティを生成するXSLT
より具体的には、のは、私は次のXML文書を持っているとしましょう:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<a/>
<b>
<c/>
</b>
<b/>
</root>
私はこのような形でカーディナリティを計算できるようにしたいと思います。root意志の
<?xml version="1.0" encoding="UTF-8"?>
<root>
<a minOccurs="1" maxOccurs="1"/>
<b minOccurs="2" maxOccurs="2">
<c minOccurs="0" maxOccurs="1"/>
</b>
</root>
子供常に同じ最大値と最小値を持つため、この部分は次のように計算できます。
<xsl:template match="/*">
<xsl:element name="{name()}">
<xsl:for-each-group select="*" group-by="name()">
<xsl:sort select="current-grouping-key()"/>
<xsl:element name="{current-grouping-key()}">
<xsl:variable name="cardinality" select="count(current-group())"/>
<xsl:attribute name="minOccurs" select="$cardinality"/>
<xsl:attribute name="maxOccurs" select="$cardinality"/>
</xsl:element>
</xsl:for-each-group>
</xsl:element>
</xsl:template>
しかし、私は孫のカーディナリティをどのように続けるかについて頭を悩ますことはできません。私はこれが再帰的に抽象化されると思われるxsl:function
。
進め方についてのご意見は歓迎します!
"*ルートの子は常に同じ最大値と最小値を持ちます*"なぜですか? –
ルート要素が1つしかないので、その子要素は単一のXML文書内にカーディナリティを1つだけ持ちます。 –
> XML文書からXMLスキーマを生成するためのさまざまなツールを試しました XMLを生成しようとしましたか?[Docu Oxygen](https://www.oxygenxml.com/doc/versions/18.0/ug-editor /topics/converting-between-schema-languages.html) –
uL1