簡體   English   中英

XML模式創建需要很長時間

[英]XML schema creation takes long time

我有以下代碼:

public XsdValidator(Resource... xsds) {
    Preconditions.checkArgument(xsds != null);
    try {
      this.xsds = ImmutableList.copyOf(xsds);
      SchemaFactory schemaFactory = SchemaFactory.newInstance(W3C_XML_SCHEMA_NS_URI);
      LOGGER.debug("Schema factory created: {}",schemaFactory);
      StreamSource[] streamSources = streamSourcesOf(xsds);
      LOGGER.debug("StreamSource[] created: {}",streamSources);
      Schema schema = schemaFactory.newSchema(streamSources);
      LOGGER.debug("Schema created: {}",schema);
      validator = schema.newValidator();
      LOGGER.debug("Validator created: {}",validator);
    } catch ( Exception e ) {
      throw new IllegalArgumentException("Can't build XsdValidator",e);
    }
  }

看來行schemaFactory.newSchema(streamSources); 需要很長時間(30秒)才能對我的XSD文件執行。

經過對此XSD的多次測試后,似乎是因為我有:

  <xs:complexType name="entriesType">
    <xs:sequence>
      <xs:element type="prov:entryType" name="entry" minOccurs="0" maxOccurs="10000" />
    </xs:sequence>
  </xs:complexType>

問題是maxOccurs="10000"

使用maxOccurs="1"maxOccurs="unbounded" ,速度非常快。

有人能告訴我使用maxOccurs="10000"的問題是什么?

根據我的個人經驗,讓某些人認為“不合理”高價值的粒子受到影響會導致性能問題( 這個鏈接來自我瀏覽器的最愛)。

根本原因似乎是內存分配(由maxOccurs值指示的效果)。

此外,我還記得一個文檔項,它說明了一個閾值,超出該閾值,無論出於什么意圖和目的,解析器實際上都會將maxOccurs視為無限制,無論XSD說什么(如果我找到它,我將重新訪問此帖子) 。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM