Print

Print


Hi Gerrit,

If you specify 3 xml-model PIs at the start, first the one that combines 
the two schemas

<?xml-model href="test.rng" type="application/xml" 
schematypens="http://relaxng.org/ns/structure/1.0"?>
<?xml-model 
href="http://www.tei-c.org/Vault/P5/1.7.0/xml/tei/custom/schema/relaxng/tei_all.rng" 
type="application/xml" schematypens="http://relaxng.org/ns/structure/1.0"?>
<?xml-model 
href="https://subversion.le-tex.de/common/schema/tei-cssa/docbook-like-divs.rng" 
type="application/xml" schematypens="http://relaxng.org/ns/structure/1.0"?>

then you will get

- oXygen content completion using the first schema, which is the reunion 
of the two initial schemas, thus you will get the as proposlas values 
for the type attribute and the TEI structural elements
- validation with both both schemas (from the last 2 xml-model PIs)

So, the content completion will be a little bit more relaxed but 
anything invalid will be notified by the additional validation from the 
last 2 xml-model PIs.

Using an XML catalog and local copies of the schemas is strongly 
recommended :).

Maybe we can take advantage of parentRef and redefining patterns to be 
able to achieve what you want... For example imagine that the TEI schema 
will be built using two files:

main schema that defines a pattern div.type.TYPE as text and brings in 
the TEI schema using externalRef

TEI schema that for the div type attribute says parentRef to div.type.TYPE

Then, if you want a constrained TEI schema, you defined your TEI schema 
that includes the TEI schema and inside the include element redefines 
the div.type.TYPE pattern to be a choice between the values you want.

Best Regards,
George
--
George Cristian Bina
<oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
http://www.oxygenxml.com

On 24/06/16 19:31, Imsieke, Gerrit, le-tex wrote:
> Hi George,
>
> This is not equivalent. The combined schema that you suggested allows
> you to construct documents that are not valid TEI.
>
> For example, it allows this as body content:
>
>      <body>
>        <when></when>
>        <div absolute="s" type="chapter"></div>
>      </body>
>
> which is invalid wrt the TEI schema. The combined schema seems to allow
> the union of what any of the two schemas would allow at a given point.
>
> However, the purpose of the extra schema is to further constrain what
> the basis schema allows, not to extend it.
>
> I’d like to know whether there is another way to specify these extra
> constraints in an adornment schema that may be combined with the
> original schema.
>
> Gerrit
>
> On 24.06.2016 11:21, George Bina wrote:
>> What about using a schema that combines the two schemas, like
>>
>> <grammar
>>     xmlns="http://relaxng.org/ns/structure/1.0"
>>     xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
>>     datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
>>     <start>
>>         <choice>
>>          <externalRef
>> href="http://www.tei-c.org/Vault/P5/1.7.0/xml/tei/custom/schema/relaxng/tei_all.rng"/>
>>
>>
>>          <externalRef
>> href="https://subversion.le-tex.de/common/schema/tei-cssa/docbook-like-divs.rng"/>
>>
>>
>>         </choice>
>>     </start>
>> </grammar>
>>
>> Note that you need to disable the ID/IDREF checking from
>> Options->Preferences -- XML / XML Parser / RELAX NG because there are
>> conflicting IDs defined.
>>
>> Best Regards,
>> George
>> --
>> George Cristian Bina
>> <oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
>> http://www.oxygenxml.com
>>
>> On 24/06/16 02:30, Imsieke, Gerrit, le-tex wrote:
>>> Hi Gioele,
>>>
>>> Neither an ODD nor a Schematron approach: You can use a second RNG
>>> schema. Here is a sample schema (that also serves as a blog post about
>>> this approach):
>>> https://subversion.le-tex.de/common/schema/tei-cssa/docbook-like-divs.rng
>>>
>>>
>>> I tried to prescribe div/@type attributes in such a way that the types
>>> correspond to DocBook element names, and the grammar is (roughly) the
>>> same as in DocBook. So you have parts or chapters in the body, prefaces
>>> and dedications in the frontmatter, etc.
>>>
>>> The nice thing is that you superimpose a bespoke grammar on an
>>> off-the-shelf TEI schema. An actual grammar refining an unaltered base
>>> schema, if that doesn’t sound compelling. You can’t do this with
>>> Schematron so handily.
>>>
>>> A sample document is here:
>>> https://gist.github.com/gimsieke/44748c504783590ef906c7dc0c2e268b
>>> If you open it in oXygen and add a type attribute to body/div, you will
>>> be presented with a choice of part and chapter.
>>> This is the good news.
>>> The bad news is that there will be no other completion hints than those
>>> from the epischema – unless you swap the xml-model PIs at the top, but
>>> then you’ll only have the default TEI vocabulary as suggestions.
>>> Maybe we can convince the oXygen people to restrict the autocomplete
>>> options to the intersection of the choices that all referenced schemas
>>> offer at a given location.
>>>
>>> Gerrit
>>>
>>> On 22.06.2016 18:14, Gioele Barabucci wrote:
>>>> Hello,
>>>>
>>>> in ODD, how can I change the constraints of the <div> elements that
>>>> appear in a certain position (e.g., /TEI/text/body) while using the
>>>> default definition for all the other elements?
>>>>
>>>> I could specify those constraints as a set of Schematron assertions,
>>>> but
>>>> those would not be picked up by, for example, oXygen for the automatic
>>>> completion of element names and attribute values.
>>>>
>>>> In RelaxNG one can give two different definitions of <div>: one for
>>>> those elements appearing in a certain production, and another for all
>>>> the others contexts. Can the same thing be done in ODD?
>>>>
>>>> The use case for this request is that I would like <div>s in
>>>> /TEI/text/body to contain only few whitelisted elements, while allowing
>>>> <div> in other places (mainly the header) to be unconstrained.
>>>>
>>>> Note: Element names and element definitions are separate entities in
>>>> RelaxNG; in ODD it looks like element names and their definitions
>>>> cannot
>>>> be separated (I suppose this has to do with DTD support). Probably this
>>>> means that what I am looking for cannot be done, but I think it is
>>>> worth
>>>> asking anyway.
>>>>
>>>> Regards,
>>>>
>>>
>