XML.orgXML.org
FOCUS AREAS |XML-DEV |XML.org DAILY NEWSLINK |REGISTRY |RESOURCES |ABOUT
OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index]
Re: [xml-dev] Which is more declarative? More XMLish?

Both rules would also allow:

<numbers>
    <number>0</number>
    <number>2</number>
    <number>2</number>
    <number>4</number>
    <number>4</number>
    <number>4</number>
    <number>6</number>
    <number>6</number>
    <number>6</number>
    <number>6</number>
    <number>6</number>
…
</numbers>

Is this what you really want?

Cheers,
Dimitre

On Sat, Dec 2, 2017 at 9:04 AM, Dimitre Novatchev <dnovatchev@gmail.com> wrote:
> Hi Roger,
>
>> Example: Here is an XML document containing a set (of positive even
>> numbers):
>>
>> <numbers>
>>     <number>0</number>
>>     <number>2</number>
>>     <number>4</number>
>>     <number>6</number>
>>
>>     …
>> </numbers>
>
> This is not a set -- this is, strictly speaking, a sequence.
>
> More precisely, this is just one of the n! possible representations of
> the set {0, 2, ..., 2*(n-1)} as a specific sequence. I believe in XML
> Schema there is a way to express that the order of elements doesn't
> matter -- this must be specified when defining a set.
>
>> <sch:rule context="number">
>>
>>     <sch:assert test="xs:integer(.) ge 0">
>>         Property: to be a member of the set, the number must be positive.
>>     </sch:assert>
>>
>>     <sch:assert test="xs:integer(.) mod 2 eq 0">
>>         Property: to be a member of the set, the number must be even.
>>     </sch:assert>
>>
>>
>> </sch:rule>
>
> The above rule describes all possible sets of even, non-negative
> numbers. In particular, it also describes the infinite set of all such
> numbers. But an XML document cannot contain infinite number of
> elements (unless W3C makes a new XML Spec allowing this -- and this
> would be conveniently hand-in-hand with XSLT streaming). But again, a
> rule for infinite number of elements cannot be validated in finite
> time... Therefore, new schema language constructs are needed when
> streaming a document. And the validation of documents while streaming
> could be something like "Dynamic" or "Sample-based" validation.
>
> Note: even XML well-formedness cannot be validated when streaming a
> document. This means that any serious XML streaming must be performed
> in transactional manner.
>
> Cheers,
> Dimitre
>
>
> On Sat, Dec 2, 2017 at 6:26 AM, Costello, Roger L. <costello@mitre.org> wrote:
>> Hi Folks,
>>
>> XML documents oftentimes contain a set of things – a set of books, a set of
>> people, a set of transactions, etc.
>>
>> Typically, a set isn’t allowed to contain just anything, the set must
>> satisfy some constraints.
>>
>> Constraints can be expressed in different ways. Perhaps one way is better
>> than another? Perhaps one is more declarative, the other more imperative?
>> Perhaps one is XMLish, the other not?
>>
>> Example: Here is an XML document containing a set (of positive even
>> numbers):
>>
>> <numbers>
>>     <number>0</number>
>>     <number>2</number>
>>     <number>4</number>
>>     <number>6</number>
>>
>>     …
>> </numbers>
>>
>>
>>
>> Here are two ways to specify the set:
>>
>>
>>
>> 1. Defining properties: identify the properties that each member of the set
>> must have. In this example, each number must have these 2 properties:
>>
>>
>>
>> Positivity
>> Evenness
>>
>>
>>
>> The two properties can be expressed in Schematron:
>>
>>
>>
>> <sch:rule context="number">
>>
>>     <sch:assert test="xs:integer(.) ge 0">
>>         Property: to be a member of the set, the number must be positive.
>>     </sch:assert>
>>
>>     <sch:assert test="xs:integer(.) mod 2 eq 0">
>>         Property: to be a member of the set, the number must be even.
>>     </sch:assert>
>>
>>
>> </sch:rule>
>>
>>
>>
>> 2. Generate set members: specify how to generate the members of the set. The
>> set of positive even numbers can be generated this way:
>>
>>
>>
>> 0 is an element of the set.
>> If x is an element of the set, then x+2 is an element of the set.
>> (Alternatively: if x is an element of the set, then x-2 is an element of the
>> set)
>> Nothing else belongs to the set.
>>
>>
>>
>> Generating the set’s members can be expressed in Schematron:
>>
>>
>>
>> <sch:rule context="numbers">
>>
>>     <sch:assert test="number[xs:integer(.) eq 0]">
>>         0 is in the set.
>>     </sch:assert>
>>
>>     <sch:assert test="every $i in number[xs:integer(.) ne 0] satisfies
>>                                     number[xs:integer(.) eq ($i - 2)]">
>>         If i is in the set, then i-2 is in the set
>>     </sch:assert>
>>
>> </sch:rule>
>>
>>
>>
>> Recap: We’ve seen two ways to specify (constrain) a set:
>>
>> (a) State a property (or properties) that an object must have to qualify as
>> a member of the set.
>>
>> (b) Define a set of rules which generate its members.
>>
>>
>>
>> Which way is better? Which is preferred? Which is more declarative? Which is
>> more XMLish?
>>
>>
>>
>> /Roger
>
>
>
> --
> Cheers,
> Dimitre Novatchev
> ---------------------------------------
> Truly great madness cannot be achieved without significant intelligence.
> ---------------------------------------
> To invent, you need a good imagination and a pile of junk
> -------------------------------------
> Never fight an inanimate object
> -------------------------------------
> To avoid situations in which you might make mistakes may be the
> biggest mistake of all
> ------------------------------------
> Quality means doing it right when no one is looking.
> -------------------------------------
> You've achieved success in your field when you don't know whether what
> you're doing is work or play
> -------------------------------------
> To achieve the impossible dream, try going to sleep.
> -------------------------------------
> Facts do not cease to exist because they are ignored.
> -------------------------------------
> Typing monkeys will write all Shakespeare's works in 200yrs.Will they
> write all patents, too? :)
> -------------------------------------
> Sanity is madness put to good use.
> -------------------------------------
> I finally figured out the only reason to be alive is to enjoy it.



-- 
Cheers,
Dimitre Novatchev
---------------------------------------
Truly great madness cannot be achieved without significant intelligence.
---------------------------------------
To invent, you need a good imagination and a pile of junk
-------------------------------------
Never fight an inanimate object
-------------------------------------
To avoid situations in which you might make mistakes may be the
biggest mistake of all
------------------------------------
Quality means doing it right when no one is looking.
-------------------------------------
You've achieved success in your field when you don't know whether what
you're doing is work or play
-------------------------------------
To achieve the impossible dream, try going to sleep.
-------------------------------------
Facts do not cease to exist because they are ignored.
-------------------------------------
Typing monkeys will write all Shakespeare's works in 200yrs.Will they
write all patents, too? :)
-------------------------------------
Sanity is madness put to good use.
-------------------------------------
I finally figured out the only reason to be alive is to enjoy it.


[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index]


News | XML in Industry | Calendar | XML Registry
Marketplace | Resources | MyXML.org | Sponsors | Privacy Statement

Copyright 1993-2007 XML.org. This site is hosted by OASIS