Next in thread → Next in month →

Re: [xml-dev] RELAX question re: required value

From
George Cristian Bina <>
To
Michael Sokolov <>, John Cowan <>
Date
2014-01-23T16:10:51Z
ID
<>
Thread
Re: [xml-dev] RELAX question re: required value
Hi Mike,

Embedded Schematron works a lot easier if you use Relax NG with the XML 
syntax.

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

On 1/23/14, 5:27 PM, Michael Sokolov wrote:
> I found it a little tricky hunting down the proper syntax for this, so
> for posterity here is an example of a embedding a schematron assertion
> in Relax NG Compact:
>
>          [sch:pattern
>              [sch:rule [context="meta"
>                  sch:assert [ test="count(collection[.='all']) = 1"
>                      "all collection must be present"]]]]
>
>          element collection {
>              text
>          }+
>
> Thanks, John, for the pointer - this is exactly what I needed.
>
> -Mike
>
> OK so for posterity, in case any
> On 01/22/2014 02:14 PM, Michael Sokolov wrote:
>> I didn't know about the embedding of Schematron rules; sounds very
>> useful: thanks!
>>
>> -Mike
>>
>> On 01/22/2014 01:11 PM, John Cowan wrote:
>>>
>>>
>>> On Wed, Jan 22, 2014 at 11:30 AM, Michael Sokolov
>>> <
>>> <mailto:>> wrote:
>>>
>>>     I have a schema that allows a bunch of different elements to be
>>>     interleaved in any order; one of them is <collection>;  I want to
>>>     require that a collection with value "all" be present, as well as
>>>     allowing any number of other collections, in any order, using
>>>     RELAX -- is that possible?
>>>
>>> No, it isn't.  It would have to be element collection {"all"} &
>>> element collection {text}, and it is forbidden to have the same
>>> element name on both sides of &.  This is one of the few arbitrary
>>> restrictions in RNG.  Even that formulation, if it were legal, would
>>> allow more than one "all" collection, since there is no way to say
>>> "everything but 'all'" in RNG.
>>>
>>> However, this is a perfect application for an embedded Schematron
>>> rule asserting that count(collection[text() = "all"] = 1.  Jing
>>> supports embedded Schematron 1.5 rules quite nicely.
>>>
>>> --
>>> GMail doesn't have rotating .sigs, but you can see mine at
>>> http://www.ccil.org/~cowan/signatures
>>> <http://www.ccil.org/%7Ecowan/signatures>
>>
>
Next in thread → Next in month →