Many thanks for your time!  Yes, it does make sense.

I'll give your recommendation a shot tomorrow and update the thread.

On Aug 4, 2016 6:22 PM, "Chris Hostetter" <hossman_luc...@fucit.org> wrote:


TL;DR: use entity includes *WITH OUT TOP LEVEL WRAPPER ELEMENTS* like in
this example...

https://github.com/apache/lucene-solr/blob/master/solr/
core/src/test-files/solr/collection1/conf/schema-snippet-types.incl
https://github.com/apache/lucene-solr/blob/master/solr/
core/src/test-files/solr/collection1/conf/schema-xinclude.xml


: The file I pasted last time is the file I was trying to include into the
: main schema.xml.  It was when that file was getting processed that I got
: the error  ['content' is not a glob and doesn't match any explicit field
or
: dynamicField. ]

Ok -- so just to be crystal clear, you have two files, that look roughly
like this...

--- BEGIN schema.xml ---
<?xml version="1.0" encoding="UTF-8" ?>
<schema name="statdx" version="1.5">
  <!-- a whole lot of <field>, <fieldType>, and <copyField> declarations
    -->
  <xi:include href="statdx_custom_schema.xml" xmlns:xi="http://www.w3.org/
2001/XInclude"/>
</schema>
--- END schema.xml ---

-- BEGIN statdx_custom_schema.xml ---
<?xml version="1.0" encoding="UTF-8" ?>
<schema name="example" version="1.6">
  <!-- a whole lot of ADDITIONAL <field>, <fieldType>, and <copyField>
       declarations
    -->
</schema>
--- END statdx_custom_schema.xml ---

...am I correct?


I'm going to skip a lot of the nitty gritty and just summarize by saying
that ultimately there are 2 problems here that combine to lead to the
error you are getting:

1) what you are trying to do as far as the xinclude is not really what
xinclude is designed for and doesn't work the way you (or any other sane
person) would think it does.

2) for historical reasons, Solr is being sloppy in what <copyField>
entries it recognizes.  If anything the "bug" is that Solr is
willing to try to load any parts of your include file at all -- it it were
behaving consistently it should be ignoring all of it.


Ok ... that seems terse, i'll clarify with a little of the nitty gritty...


The root of the issue is really something you alluded to earlier that
dind't make sense to me at the time because I didn't realize you were
showing us the *includED* file when you said it...

>>> I assumed (perhaps wrongly) that I could duplicate the <schema ...>
>>>  </schema> arrangement from the schema.xml file.

...that assumption is the crux of the problem, because when the XML parser
evaluates your xinclude, what it produces is functionally equivilent to if
you had a schema.xml file that looked like this....

--- BEGIN EFFECTIVE schema.xml ---
<?xml version="1.0" encoding="UTF-8" ?>
<schema name="statdx" version="1.5">
  <!-- a whole lot of <field>, <fieldType>, and <copyField> declarations
    -->
  <schema name="example" version="1.6">
    <!-- a whole lot of ADDITIONAL <field>, <fieldType>, and <copyField>
         declarations
      -->
  </schema>
</schema>
--- END EFFECTIVE schema.xml ---

...that extra <schema> element nested inside of the original <schema>
element is what's confusing the hell out of solr.  The <field> and
<fieldType> parsing is fairly strict, and only expects to find them as top
level elements (or, for historical purposes, as children of <fields> and
<types> -- note the plurals) while the <copyField> parsing is sloppy and
finds the one that gives you an error.

(Even if the <field> and <fieldType> parsing was equally sloppy, only the
outermost <schema> tag would be recognized, so your default field props
would be based on the version="1.5" declaration, not the version="1.6"
declaration of the included file they'd be in ... which would be confusing
as hell, so it's a good thing Solr isn't sloppy about that parsing too)


In contrast to xincludes, XML Entity includes are (almost as a side effect
of the triviality of their design) vastly supperiour 90% of the time, and
capable of doing what you want.  The key diff being that Entity includes
do not require that the file being included is valid XML -- it can be an
arbitrary snippet of xml content (w/o a top level element) that will be
inlined verbatim.  so you can/should do soemthing like this...

--- BEGIN schema.xml ---
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE schema [
    <!ENTITY statdx_custom_include SYSTEM "statdx_custom_schema.incl">
    ]>
<schema name="statdx" version="1.5">
  <!-- a whole lot of <field>, <fieldType>, and <copyField> declarations
    -->
  &statdx_custom_include;
</schema>
--- END schema.xml ---

-- BEGIN statdx_custom_schema.incl ---
<!-- a whole lot of ADDITIONAL <field>, <fieldType>, and <copyField>
     declarations
  -->
--- END statdx_custom_schema.incl ---


...make sense?


-Hoss
http://www.lucidworks.com/

Reply via email to