Variant management component enables users to load, save, change, and maintain variants.
Variant management component can be integrated with the components that inherit PresetManagedComponent interface.
PresetManagedComponent


Gateway
BOT
07-Aug-19 08:29 AM
[dscrd-hush] <gigamesh> @Privatoshi fair enough. but the Mac/Linux/Win binaries @dukeleto mentioned as part of the new release will go along way to spread adoption
[dscrd-hush] <gigamesh> compiling code is all very well for the l33t's but us mortals need binaries
[dscrd-hush] <gigamesh> then running competitions and pushing adoption in priv circles should be substantially easier
[dscrd-hush] <gigamesh> disputes with other coins (Komodo family members) is at this point a distraction
[dscrd-hush] <gigamesh> We focus on HUSH, as a community. WE support the leadership even in difficult times. We grow stronger TOGETHER
[dscrd-hush] <Privatoshi> @gigamesh Releases are geared more towards HUSH users.. or releases in general
[dscrd-hush] <Privatoshi> I said to do those things so we can move away from any distractions
[dscrd-hush] <Privatoshi> What's done is done.
[dscrd-hush] <gigamesh> you wanna run a competition with 100's or 1000's of people on twitter? i argue we need binaries
[dscrd-hush] <gigamesh> compiling your own wallet to collect 50 HUSH?
[dscrd-hush] <gigamesh> dunno man
[dscrd-hush] <Privatoshi> Huh?
[dscrd-hush] <Privatoshi> Compile your own wallet for 50 Hush
[dscrd-hush] <Privatoshi> I argue we need both
[dscrd-hush] <gigamesh> thats not the prize...
[dscrd-hush] <Privatoshi> And most projects do do both
[dscrd-hush] <gigamesh> > The first set of users will be somewhat interested, but slightly more interested in prizes, in the beginning. And I think that includes more frequent lottery, infographic contest I saw in marketing & a Hush Puzzle...
[dscrd-hush] <gigamesh> ^ these guys need binaries
[dscrd-hush] <Privatoshi> ok
[dscrd-hush] <denio> I like your discussion!
[dscrd-hush] <Privatoshi> Some people are creative
[dscrd-hush] <Privatoshi> Some people aren't
[dscrd-hush] <denio> I agree with @gigamesh „these guys need binaries“
[dscrd-hush] <Privatoshi> Some don't care to be creative
[dscrd-hush] <denio> That’s in every community the same @Privatoshi
[dscrd-hush] <Privatoshi> So you think telling people what they need, works?
[dscrd-hush] <Privatoshi> Do you think it'll draw in a lot of people?
[dscrd-hush] <denio> Sorry can’t follow you...maybe my English skills are not enough, but with binaries we „telling ppl what they need?“
[dscrd-hush] <Privatoshi> You think releases will bring more users?
[dscrd-hush] <denio> Ofc not
[dscrd-hush] <denio> But how many users use SD?
[dscrd-hush] <gigamesh> A new wallet release combined with a huge promotion and Marketing push (assisted by me on Daily Chain and Human Action) and we will SMASH it. The Duke is the most fiery dev out there today. The Dragon will breathe FIRE Are you in?
[dscrd-hush] <Privatoshi> What day did you write your article?
[dscrd-hush] <Privatoshi> That's not discussion
[dscrd-hush] <Privatoshi> That's you telling me, let's do this this way, thanks for your input
[dscrd-hush] <Privatoshi> I don't appreciate that
[dscrd-hush] <Privatoshi> I took time to think about those things
[dscrd-hush] <gigamesh> dude the competition was your idea and a good one
[dscrd-hush] <gigamesh> hitting up priv communities equally good
[dscrd-hush] <gigamesh> I want to help build this reality... all im saying is we (prob) need binaries
[dscrd-hush] <Privatoshi> We gained 50-54 users since your article
[dscrd-hush] <gigamesh> discord users?
[dscrd-hush] <Privatoshi> Which is a very sizeable addition
[dscrd-hush] <Privatoshi> it's 17% of discord
[dscrd-hush] <Privatoshi> Yes
[dscrd-hush] <Privatoshi> I didn't say binaries don't do that
[dscrd-hush] <Privatoshi> I said incentivized activities that require people to come here and interact, might have a good effect too
[dscrd-hush] <Privatoshi> Both =
[dscrd-hush] <Privatoshi> @gigamesh Look at Verus
[dscrd-hush] <denio> so what should we do @Privatoshi?
[dscrd-hush] <Privatoshi> They do one
[dscrd-hush] <Privatoshi> I'm saying look at Verus
[dscrd-hush] <Privatoshi> They focus on one side of things
[dscrd-hush] <denio> tbh i dont know much about them....can you explain?
[dscrd-hush] <Privatoshi> They focus entirely on the tech....
[dscrd-hush] <Privatoshi> This article, from @gigamesh , is the first marketing done there in..... ages
[dscrd-hush] <Privatoshi> I dunno. I think it's good to focus on what is more important
[dscrd-hush] <Privatoshi> But you can also be doing other things to supplement it & keep people on board
[dscrd-hush] <Privatoshi> I am all about the tech.
Duke & I were discussing Tails & Tor the other day
[dscrd-hush] <Privatoshi> But adoption requires users.
[dscrd-hush] <denio> Tails would be nice! But what would you say is the focus of Hush atm?
[dscrd-hush] <denio> in my opinion its the tech
[dscrd-hush] <Privatoshi> Hush is a project, like any other project, right?
[dscrd-hush] <denio> @gigamesh has wrote the first Articel since a year or so
[dscrd-hush] <Privatoshi> Okay. I bought Hush on cryptopia years ago
[dscrd-hush] <Privatoshi> Doesn't mean anything
[dscrd-hush] <Privatoshi> But I didn't know I needed to write an article to voice my opinion & have people listen to it.
[dscrd-hush] <gigamesh> what r u talking about? who isnt listening?
(edited)
[dscrd-hush] <denio> who said that you need to wrote an articel to voice your opinion....cant understand this part
(edited)


Balthisar Tidy’s support for AppleScript empowers you to put the power of automation to work for you. Here are just a few ideas of the things you can do:
Use a batch script to Tidy in place dozens, hundreds, or even thousands of files.
Supercharge the batch script to Tidy your files and copy them to a server directory.
Use Mac OS X’ Folder Actions to Tidy a file every time you save or copy it into the folders of your choice.
To get started, simply look at Balthisar Tidy’s AppleScript dictionary in the AppleScript editor of your choice.
Balthisar Tidy supports the entire Standard Suite. Please consult Apples’s AppleScript documentation (see the sidebar for links) for a description of all of these features.
While the Standard Suite gives you a lot of power, the Document Suite provides two additional AppleScript properties that will be critical to your automation workflow.
sourceText
tidyText
The developer suite is primarily useful to the developers of Balthisar Tidy, but can offer some utility to you if also used with UI Scripting. In addition, because of application sandboxing, there is one critical property available in the developer suite that will be useful if you want to perform the equivalent of Save As… using AppleScript.
countOfPrefsWindowPanels
indexOfVisiblePrefsWindowPanel
preferencesWindowIsVisible
saveAsDestination
In addition to its built-in AppleScript support, Balthisar Tidy also plays nicely with UI Scripting. See the link in the sidebar for more information about using UI Scripting.


Texte alternatif
01. India Meets Gypsies
02. Connecting
03. Gypsy Caravan
04. Letting Loose
05. Desire
06. Long Dusty Road To Agra
07. Floating On The Clouds
08. Song To The Wind
09. Emotionally From Africa
10. Through A Rain-Forest
02. Jor
Mail


obesity BMI overweight children study prevalence school obese students {border-style px;} #ffffff;} elevated associated Indian Health India childhood factors schools Med Obesity Prevalence private status using dietary males occupation significant studies Overweight higher junk consumption gender level overweight/obese px; schools, significantly study, variables years {font-family .). analysis font-size food nutritional used Childhood However, age considered distribution double; education government greater logistic participants regression risk schools. secondary study. .%, .–., Asia Clin Int Kumar Organization Res World adolescents aged association border-color border-width categories compared countries cross-sectional determine did father females frequency height independent mother, occurrence physical primary relative selected solid; trends urban weight {font-style {font-weight (.%) ./-. AOR Available Community Data Hindu Kim Lifestyle Nutr Pediatr SD), Sharma Table Udupi [Internet] [cited activity aided assess based bold burden calculated characteristics children. collab: conducted courier; developing differences em; females, from: habits included increasing likely multivariate normal obtained problem pt;} respectively. results sample showed similar test vs.


| 18 Sep 1933 |
Mickey Gubitosi born, Nutley NJ. |
| 1939 |
Appears as little rascal in Our Gang as "Little Mickey." |
| 1940 |
Assumes the stage name Robert Blake. |
| 1950 |
Drafted or enlists in the U.S. Army. |
| c. 1951 |
Sleeps with a 16 year old girl, then decides to kill the girl's father when he wants Blake prosecuted for statutory rape. Blake: "The night I went to do it. I felt perfectly sane. I arrived at the trailer just before dark and sat inside, freezing to death, just waiting. I kept thinking, 'No one will know I did this.' Finally he came out, walked down the path and around the car. My heart raced with excitement. He put his keys in to open the door and had his back to me, no more than thirty feet away. I raised the gun and put my finger on the trigger. My hand was as steady as could be.  Blake pussied out, though, after the girl entered the room. |
| 7 Jun 1956 |
Bonny Lee Bakely born, Morristown NJ. |
| 25 Nov 1962 |
Marries actress Sondra Kerr (some sources claim 1961.) |
| Jan 1975 |
Hit TV show Baretta begins airing. |
| 1978 |
Baretta cancelled. |
| 1983 |
Divorces wife Sondra. |
| 2 Jun 2000 |
Daughter, Rose Lenore Sophia, born. DNA test proves descent. |
| 12 Nov 2000 |
Marries golddigger Bonny Lee Bakely. His second marriage, her ninth. |
| 4 May 2002 |
Evening at dinner at Vitello's ends badly with Bonny Lee Bakely receiving a gunshot to the head from a Walther PPK. Blake had gone back to the restaurant to retrieve his handgun. Upon returning to the car, he found Bakely dead. |
| 19 Apr 2002 |
Police arrest Blake for the murder of Bakely. |
| 14 Mar 2003 |
Released from jail on $1.5M bond. |


Play acoustic guitar using your keyboard. Use left hand to change chords and right hand to either strike the strings or pluck them one by one. Chords are constructed by selecting a base tone and modifiers.
The chord keyboard resembles piano's keyboard:
So for example all different C based chords:
To stroke, use up / down arrows. To pluck strings separately, use


val installs: Int
The number of installs that this pack has received
installs - The number of installs that this pack has received
installs


Labor Day Weekend: Shane got a swing last week -- now he has a place to sit at the kitchen table. Shane went with Mom and Dad to Panera for lunch and dad got an ice tea in this big cup. Shane was impressed that Dad could finish off three of these! Shane tried on the sweater Great Grandma Gertie knit for him, but it's still too hot for sweaters. On Monday Shane had lunch with Mira and her parents.
Shane went with Mom and Dad to Grandma Gertie and Grandpa Harry's house on Saturday. Grandma babysat while Mom and Dad went to a wedding. On Sunday Grandma Connie and Grandpa Morris and Great Grandma Ginnie came to visit. Shane has gotten very good at rolling over and he likes to spend time on his tummy looking around. He's also into blowing bubbles and saying "Bbbbbb."
On September 11 Mom flew to Washington, DC. After the terrorist attacks, she couldn't fly home or even take the train. So Grandma Judy and Grandpa Mike drove her to Deleware. Dad and Shane and Yvonned met Mom at Grandma Connie and Granpa Morris' house.
The weather is getting cooler, so Shane wears a hat when he goes for his evening walk. Mom got a new sling that's very colorful. Shane is learning how to sit, but he still needs some help to keep from toppeling over.
Privacy policy
This page maintained by Shane's Mom


Scrollbars appear at the right and bottom edges of the window if it won't fit within the window. If Autofit mode is on (see the Autofit command) then no horizontal scroll bar will be shown at the bottom of the window since the width of the file display is adjusted to fit the window.
The discussion below concentrates on the vertical scroll bar since it is more often utilised. Differences for the horizontal scroll bar are noted in brackets.
The arrows at either end of the scrollbars allow you to scroll a line (or column) at a time. Alternatively, you can use the Ctrl+U and Ctrl+D keyboard shortcuts to scroll up and down by a line. If you have an Intellimouse you can also quickly scroll several lines at a time using the wheel.
Clicking the scrollbar above (or to the left of) the scroll box will scroll up (or left) by just under a window full of information. Similarly clicking below (or to the right) scrolls down (or right) by the same amount.
The scroll box within the scroll bar indicates the current vertical (or horizontal) location in the file. The size of the scroll box indicates the proportion of the file that is visible within the window. You can drag the scroll box to quickly scroll to any part of the file.


@(playername : String)
Your crew count has dropped below five, which makes it impossible to reach China and the elusive fidget spinners.  The end for @playername.


--- layout: page category: spec title: "Payment Request API" ---
| Current Status: | Candidate Recommendation (CR) |
|---|---|
| Canonical URI: |
http://www.w3.org/TR/payment-request
|
| Abstract: | This specification describes a web API to allow merchants (i.e. web sites selling physical or digital goods) to easily accept payments from different payment methods with minimal integration. User agents (e.g. browsers) will facilitate the payment flow between merchant and user. |
Payment Request APIUpdates:


Podcasts
As part of my side projects Skynet Today and The Gradient, I am a host and producer for two podcasts. Take a listen!
Last Week in AI Podcast
A podcast with weekly coverage of AI news and interviews!
Subscribe: RSS |
iTunes |
Spotify |
Pocket Casts |
YouTube
The Gradient Podcast
Accessible and informed interviews with cool people in AI
A podcast with weekly coverage of AI news and interviews, as well as some articles from The Gradient
Subscribe Apple Podcasts | Spotify | Pocket Casts | RSS
powered by Surfing Waves


Changelog
All notable changes to this project will be documented in this file. See standard-version for commit guidelines.
1.1.0 (2019-10-14)
Features
- camera: add camera to patient ID and identification (ab37ae0)
- cev: create consumer environmental evaluation (41a1f34)
- add haitian creole (faec7f4)
- charts: add barchart sample component (d6845a6)
- add "fake" caching (db799bb)
- add admin controls (e993749)
- add buttons to latrine and environmental forms (91487df)
- add custom forms (5bf7ec6)
- add medical evaluation to find-records (1893892)
- add new environmental questions (47981b1)
- add photos to find-records page! (8160d6c)
- add update form for medical evaluations (5c8b440)
- edit new surgical form (1da64fb)
- karma testing! (1ea8e8f)
- new form (faea2f5)
- photo feature working! (6c5ed6f)
- photos working (a64ffdd)
- re add map! :yum: (cb69bee)
- submit parent id: add familiar relationships (7c1d43a)
- stovetop question (5e16a39)
- radarchart: add ability to go to consumer enviromental page from find records (261393f)
- update forms for env, patientid, and vitals (f775798)
- components: create chart components (40db3f4)
- edit forms: in find-records tab (ad6aee3)
- envhistory: see env history submissions (7394de0)
- find-records: destroyFunction on card (b77ac4e)
- find-records: searchbar (c6128fe)
- forgotpasswordpage: add ability to request for password reset (8ee8297)
- settingspage: add a settings page with translation (8938b72)
- storage: store orgs details upon entering the app (076adb9)
- translation: add translation to 75% of pages (0cc4efc)
- ui/ux: add toast and loading providers (1c7f847)
Bug Fixes
- backbutton: add backbutton to forms (a816c31)
- custom-loading: racing condition with creating and removing views (1788a53)
- find-records: updating objects! (7dee010)
- map crashing: present loading animation and close appropriately (a1decab)
- map records: limit number of records retrieved on page (6d607a8)
- patientID: user can't submit a billion surveys now (e761189)
- limit records for find-records (2f60380)
- patientID: button enabling (bbea0b6)
- photo: comment out photo identification (db3a0fa)
- record loading: only load last 100 records (6542ca5)
- resources and building: for android (e5d3958)
- search: allows to search by first name last name (0e890af)
- searchbar: retrieves all users, first names, last names if they exist (94358f3)
- selectObjectID: content drawer closes when user selects person (10c2446)
- splash: splashscreen appearing (f287652)
- theming: add ability to dismiss custom loading (6364870)
- translation: add translation to vitals form (78fc5fc)
- add translations (cac01ff)
- back button issue (837cea6)
- bad nav stacking and back button (0fb9611)
- concubine label (9d39f19)
- dashes messed up export (f1da853)
- e2e works! (189f858)
- figure out how to add constant to travis build (763e54e)
- figure out how to add constant to travis build take 2 (9b4a328)
- firstname and lastname weren't saving in backend (f26c124)
- for android build (8c25c2e)
- forcing numbers input (9c8d021)
- lists (01ab625)
- move surgical form to medical (154c8a4)
- patient form (e94d33a)
- persistence of guardian name and date (3ec7cac)
- remove geolocation that made no sense (0af1821)
- remove icons which were overloading the DOM (2f6e111)
- remove mapping feature :anguished: (9a9e011)
- virtual scroll: add virtual scroll to list elements (d65f6bc)
- retrieve most recent records (232a7ee)
- screen loading (febcce6)
- translation: mapping (1433345)
- vitals: systolic and diastolic not reading and (091cc58)
- styling (d0070e7)
- tests for travis (f8378d9)
- uploading too high of a quality image (53acf62)
- wasn't populating fields (a5fcfbf)


ParadoxBJJ.com
Home
Articles
YouTube Playlists
(current)
Contact
YouTube Playlists of BJJ Techniques
Submission Escapes
Leg Locks


All Inclusive Photography Workshop in Italy
Imagine one full week of fashion and beauty photography workshops. Imagine beautiful settings in Italy, in the Maremma region, close to Rome.
Imagine delicious Italian food served to you at the end of a productive workshop day.  Imagine you shooting with a professional team of model, hair and make-up and styling and coming home with a new portfolio full of great shots, coached by Andrea Belluso.
Imagine all this being included in one package price. The first event of the new week-long, all-inclusive workshop series is now here for you!


Analysis
GATHERING CONTENT
Data is only as good as what you can do with it. We can find and analyze data and join our findings with geography files to show the trends in map form.
GATHERING CONTENT
Data is only as good as what you can do with it. We can find and analyze data and join our findings with geography files to show the trends in map form.
RELEVANT DATASETS
Sometimes the best data to tell your story is hard to get or structured poorly. Our experts can convert, clean and customize datasets so they work seamlessly with your map.
OPTIONS IN MAPPING
Map styles vary widely depending on the data and the story you want to tell. We couple beautiful design with a range of technology to make customized, beautiful, data-rich maps.


And it's about to set sail!
I got me a car, it seats about 20
So come on, and bring your jukebox money!
A specific instance in a work where there is a large group of people inside a vehicle, especially a convertible. The people inside will sometimes stop to speak with or heckle another character.
This occurs frequently in shows or movies that take place in High School settings or Teen Dramas, but can occur in any work and to a character of any age.
The car in question is nearly always a convertible. It will be inexplicably filled far past capacity, with teens sitting up on the rear deck and drop top, too. The passengers are usually young, very attractive, and far more popular than the victim.
If a character is being heckled, the people in the car will typically consist of a mix of mean girls, and/or jerk jocks.
They'll come as messengers to either remind the protagonist of how much of a loser he is, or tell them they are going to a really cool party, which the protagonist was not invited to, and they'll will likely get soaked as the car drives off. Even more fun is if the people in the car moon others or throw things at them.
The main purpose for using this trope is to point out just how low the victimized character is on the social ladder. Either they are incredibly unpopular, or too poor to afford a car, let alone a swanky convertible. The character is left to contemplate his own loneliness as the car drives off. This is especially apparent if the passengers are friendly with the protagonist, and ask them to join them despite lack of room in the car. The victimized character is also often young and easily embarrassed.
Alternately, this trope can focus on the horrible behavior of the people in the car. If the movie is about the passengers and not the victim, it certainly exposes those characters' true natures.
Compare The Freelance Shame Squad and Roadside Wave.
Examples
- A commercial features a humorous group of young people in a car flirting with an offscreen character: "Hey good lookin', we'll be back to pick you up later!"
- An "Operation: Lifesaver" used this trope in one of their "These Are the Next 60 Seconds Of Your Life" campaign commercials — the driver of a convertible with a group of teens tries to race a train to the crossing. Despite the frantic pleas from his passengers to stop at the crossing and they can't possibly win, the driver insists that he can beat the tra ... it ends tragically.
- A variation in Azumanga Daioh, where Tomo (in Yukari's car) yells at the passengers in Nyamo's car because she doesn't Drive Like Crazy (at 2:10).
- In the first season of Pokémon, Gary and his cheerleaders occasionally greeted Ash in this manner.◊ Oddly, he was never seen with the car again after being knocked out of the Indigo League.
- On British TV and in their stand-up routines, comedians including Alan Davies have remarked on the rite of passage for teenage males from Essex, England, on getting access to their first car. It is practically mandatory to cruise around in the car in packs of four, leaning out of the window and shouting variations on a theme of "Wanker!", "Loser!", "Tosser!", etc., at mere pedestrians and those woeful sad cases who are clearly inferior because they are waiting for buses and who clearly are too sad or poor to be able to own cars.
- This cropped up in the early days of Spider-Man to emphasize how much of a loner Peter Parker was. In fact, the very first page of his very first appearance shows Flash Thompson and other kids giving him grief from a convertible.
- In Robin Carl Ranck had a convertible he and his girlfriend and fellow football players liked to drive around in. Carl was very proud of his car, so of course it got stolen by a bunch of car thieves during a school dance rather early on in the comic's run.
- In Kiki's Delivery Service, this happens twice:
- When Kiki first arrives in her new town, she encounter a rowdy group of kids filling a convertible. It is so full that there are kids on the rear deck, and hanging off the back. This is the first time she meets Tombo.
- Again, while Kiki and Tombo are together, Tombo is asked to come along with a smaller group of kids in what appears to be the same convertible. Much to Kiki's chagrin, there's a snobbish girl in the car she delivered to who badmouthed her grandmother's birthday gift, a pie she and Kiki worked hard on to make sure it was even made and delivered through a storm. The kids in the car are not particularly mean, and actually speak neutrally about Kiki. However, since she feels uncool and knows the ungrateful nature of the girl in the front seat, her self-consciousness makes her feel like she's a Third Wheel. She leaves to preserve her dignity.
- In Monsters University, as seen in the trope image above, all the members of Python Nu Kappa pull up to the Oozma Kappa frat house in a convertible to ask if they had heard about a party for the top fraternities.
- Incredibles 2: The first time Elastigirl takes the new Elasticycle out, a carload of cool kids drives up beside her to cheer her on and offer encouragement.
- Being in a car like this is how the protagonist of The Ghosts of Departure Point died (on the way to a Wild Teen Party) — her rowdiness is what got everyone in the car killed.
- Played straight next to a football field in the 1978 Superman: The Movie.  Leads to a slight Who's Laughing Now? moment when Clark Kent uses his super speed to beat them home.
- Le Gendarme de Saint-Tropez:
- Nicole is a policeman's daughter. When they move to Saint-Tropez from a mountain village, her strict father forbids her to wear revealing clothes.  Second time Nicole meets them, they drive in a convertible, slowly following her as she walks down a marina.
- The group, squeezed in their favourite vehicle, make fun of an older guy who drives a small car. They follow him and accidentally bump in his car. A policeman (Nicole's father's subordinate) stands close by, and Nicole, now part of the popular group, manages to make him believe that it was the older guy's fault.
- In Revenge of the Nerds the Alpha Beta fraternity let loose a bunch of pigs at the Lambda house.
- Once Michael Jordan regains his feet after a slobbery greeting by his bulldog Charles in Space Jam, some passing young people in a convertible hail him with "Michael!" and wave. Jordan turns to regard them, but gives no acknowledgement, perhaps still sore about his dismal performance as a baseball player.
- The Giant Claw features a group of these driving past the protagonists, flouting the warnings to stay off the road at night (since the whole world has become aware of the eponymous monster by this point). Predictably, they're attacked.
- In the film Forrest Gump a group of kids in a pick-up truck torment Forrest, which forces him to run.
- In the opening scene of Indiana Jones and the Kingdom of the Crystal Skull, a hot rod full of teenagers paces the convoy of army trucks. The lead vehicle even races the hot rod for a little while.
- In the 80's movie Zapped after Scott Baio's character hit a home run to win a baseball game, he gets this from a carload of teens from the rival school. He responds by unleashing his recently-acquired telekinetic powers on them.
- James Bond encounters some of these in Octopussy. They drive off when he needs a ride to the circus where an atomic bomb is about to be detonated. note
- Famously done in Mean Girls:
Regina: "Get in loser, we're going shopping!"
- Crime Doctor: When Morgan is tossed out of the car and Left for Dead, his life is saved by a stereotypical group of college kids in a convertible jalopy who spot him and take him to hospital.
- In Spider-Man, Peter Parker is fantasizing about talking to Mary Jane on the way to school when a giant group of her friends and boyfriend Flash pull up in what Peter even admits to himself is a cool car.
- In teen series Ready Or Not, best friends Amanda and Busy join a group of older teenagers. Busy is uncomfortable, but Amanda wanted to hang out with cool kids. They take a ride in a car that belongs to Amanda's mum's boyfriend (without his permission). As they drive in the city, they are noisy and make fun of several people.
- Not teens, but Benny Hill at least twice had this as part of a skit in The Benny Hill Show. And then the car would drive off, revealing Benny was not actually in it, and was the loser.
- The TV comedy The Inbetweeners made a classic sketch out of this phenomenon. The four teenage boys of the title, whilst driving down the street, come to grief after shouting "Bus Wankers!" at a waiting queue - then realize it's vitally important to have an escape route as they grind to a halt in a traffic jam. Thus enabling a very large and aggressive bus wanker to catch up with them and express his displeasure.
- Trying to invoke this trope backfired in The Facts of Life when the girls, out cruising in a newly acquired car, saw some rivals and wanted to rub it in. While stopped at a red light, they exited their car and smugly ran a lap around it—then realized too late they had locked themselves out of it.
- Ringo Starr had a TV special where he encounters his double, a nobody in Los Angeles, who we first see heckled by an interracial gang of blond surfer dudes in a van who call him 'nerd'.
- In Rebecca Black's music video "Friday", the kids are driving down the road in a convertible, complete with passengers sitting on the rear deck, going to a party.
- In Patrice Williams Production, Jenna Rose's song "My Jeans" features a car that is packed full of an inexplicably large number of wild twelve-year-olds driving to the mall. The driver is also a minor obviously below driving age.
- In Rush's video for "Subdivisions", one of these is driving around the streets of a suburban neighborhood tormenting the uncool kids.
- The opening lines of Spray's "I Always Wanted to Say 'I Always Wanted to Say That'":
Driving down the strip in a convertible,
It's a dream.
T-shirts with slogans and a gang who look suspiciously clean,
For the streets.
Coquettishly waving at the cars we pass,
Sharing our burgers and abusing staff,
All of my friends from Central Casting laugh, - "Seven Little Girls Sitting in the Back Seat" by Paul Evans. What makes this even worse than the usual examples is that the loser is the driver, so he has to endure the titular girls kissin' and a-huggin' with Fred for the whole ride. Also, whenever he says a word, they tell the poor guy to shut up and focus on his driving.
- In one issue of MAD Magazine, there is a Dave Berg piece from the 60s or early 70s with a car overloaded with teenage boys.
Father: Where are you going?
Boy: To the school dance, Dad. But first we gotta pick up our dates.
- South Park has an episode where people from the future repeatedly come to live in their own enclave, called Little Future. A bunch of futurists drive by in a hovercar and wordlessly start jumping the car up and down (as if it were a lowrider).
- The Simpsons:
- In "Viva Ned Flanders", Ned frets about being seen as old-fashioned and sees Grampa and Jasper in a car with young ladies. It turns out the young ladies hijacked their car and they're being held hostage.
- In "Bart vs. Lisa vs. the Third Grade", Bart and Lisa are forced to hold hands as field trip partners in Capital City. They are mocked by a random group of four young hipster-looking guys in a retro convertible.
Cool guy: Hey, dude, who's your girlfriend? [all cool kids laugh]Cool guy: Did you see his face? [they drive off, Bart and Lisa groan and let go of their hands; kids return]Cool guy: Well, what happened, dude? Did your girlfriend dump you? [cool kids laugh and drive off again]
- In the episode where Edna Krabappel gets replaced by a "cool" new teacher because of Bart spiking her drink with alcohol mid-class). First scene of the episode is a montage of Ms. Krabappel's morning rush to school. While she's in the car she sings along to a song playing on the radio; at that moment a carload of teens in a convertible pulls alongside her and heckle her for it.
Teen: Look at that! An old lady singing a million-year-old song!
- Played With on Steven Universe. Most episodes focusing on "the Cool Kids" (Sour Cream, Buck Dewey, and Jenny Pizza) have them ride around in a convertible, but since they're nice people, they don't do any of the griefing. Also, the car isn't a cool as usual: it's the Fish Stew Pizza delivery car, and thus it's covered in topping decorations and has a lingering smell of pepperoni.
- In the SpongeBob SquarePants episode "Mid-Life Crustacean", Mr. Krabs, who's in the throes of a mid-life crisis, convinces SpongeBob and Patrick to take him out for a rollicking night on the town.  A boat with two actual cool kids obligingly slows down to mock them for it, but only Mr. Krabs is insulted.
Cool fish: Hey, you guys must be lost! Doofus Drive is around the corner!SpongeBob: We're not lost! I have my compass!
- Gravity Falls: In Mabel's fantasy land in "Weirdmageddon 2: Escape from Reality", the seduction that draws Wendy away from the others is a (imaginary) car full of her friends.


My Training Log
Sessions
Log
Progression
Target
Notifications
Logout
Settings
Default View
Units
Week Structure
Welcome!
Training Log Sign in
Username
{{username}}
Password
Sign in
Register
Welcome!
Training Log Sign up
Name
Username
Password
Confirm Password


--- layout: page title: About header-img: "img/about-bg.png" ---
Technology is all around us. It something is prevalent and becoming, if not already, a fabric of our society. You have to be willing to keep up with the ever-changing environment. Are you one of those people? I AM!!


Your local wallet hasn't started yet. It can take up to 10 minutes to start up. This page will automatically reload when your wallet has started.
Please check that you have Java installed. Download Java here: https://www.java.com/download/


Manage
Masters
Add New Master
Delete
Id
Name
Description
Actions
1
Master SITN
miage
Showing
5
out of
25
entries
Previous
1
2
3
4
5
Next
Add Master
×
Name
Description
Edit Master
×
Name
Description
Delete Master
×
Are you sure you want to delete these Records?
This action cannot be undone.


Google identifies university students who are passionate about growing developer communities and supports them with starting students clubs on their campuses. These DSCs provide students with the opportunity to, Grow their knowledge on developer technologies and more through peer to peer workshops and events. Gain relevant industry experience by solving problems for local organizations with technology based solutions. Showcase their prototypes and solutions to their local community and industry leaders.
Flutter is Google’s portable UI toolkit for building beautiful, native applications for mobile, web, and desktop from a single codebase....Read More


Suez One is an original Hebrew and Latin display serif typeface with a single weight. The Hebrew design for a modern serif is inspired by Hebrew calligraphy. It is intended for use in headline and display typography that needs a strong contemporary style.
The Suez project is led by Michal Sahar, a type designer based in Tel Aviv, Israel. To contribute, see github.com/MichalSahar/Suez


Toggle navigation
AIP
Araport.org
Araport API Store
Agave Documentation
AIP Science Apps
Test Runner
include "/lib/api-client-auth.html"


Settings
Save
Meta Information
Enter hostname:
ⓘ
Enter alias:
ⓘ
Dead Links
Check page for dead links
[Optional] Check only specific area:
ⓘ
Performance Measurements
Score page performance
All options are enabled by default. You may disable any you do not require for your use case. Hover over each option to see a description.
Page Load Time
Speed Index
Time To First Byte
First Paint
First Contentful Paint
Time To Interactive
Interactive To Complete
Resources Requests
Resources' Size
Page Download Time
Page Render Time
Response Latency
Response Transfer
Page Sections
I want to break page down into section (if you leave this option unchecked, default behaviour will be to parse the whole page as a single entity).
Add new section
Enter unique section id:
ⓘ
[Optional] Enter modifier:
ⓘ
Enter section alias:
ⓘ
[Optional] Enter data attributes:
ⓘ
Do not process images contained in src attribute
Process images set as background-image using css
Cache images within image records (might be useful if using custom checks)
I want to set up error checking
Do width check
Set width:
ⓘ
Do height check
Set height:
ⓘ
Do spaces check
Do flesize check
Set max filesize:
ⓘ
I want to set up custom check function
ⓘ
×
Add new section
|
Remove current
Enter unique section id:
ⓘ
[Optional] Enter modifier:
ⓘ
Enter section alias:
ⓘ
[Optional] Enter data attributes:
ⓘ
Do not process images contained in src attribute
Process images set as background-image using css
Cache images within image records (might be useful if using custom checks)
I want to set up error checking
Do width check
Set width:
ⓘ
Do height check
Set height:
ⓘ
Do spaces check
Do flesize check
Set max filesize:
ⓘ
I want to set up custom check function
ⓘ


Pintxo Hopping in San Sebastían
Pais Vasco's version of classic Spanish tapas.
San Sebastián (Donostia), Spain is known for delicious food. The city has a high number of Michelin stars. However, we went there for the pintxos, which are a version of tapas in the Basque Country. Though small in individual size, you can certainly make an entire meal out of pintxos by hopping from one pintxo bar to the next.
In many pintxo bars in San Sebastián, you can ask for a small plate, un platito, and start adding tasty items from the bar to your plate.
You also can usually ask for something made to order from the menu, like this delicious beef cheek over a potato purée with a Rioja wine sauce and coarse salt sprinkled on top, or a small piece of perfectly medium-rare sirloin topped with seared foie gras and a Port wine reduction:
Our favorite pintxo bar was La Cuchara del San Telmo in the Old Town. Once we discovered it, we ate there every time it was open. The menus were almost always written in Basque, so you might need to ask questions to clarify what you are ordering.
The narrow bar serves pintxos to order, and you can sip the local white wine, Txakoli, as you find a space to set your plates. I was addicted to the aforementioned beef cheek and also their slow-cooked suckling pig. We tried several unique dishes, such as pig’s ear and octopus. While not things I typically order, I was impressed by the presentation and with being able to try so many different foods.
Despite the gourmet taste and appearance of the pintxos we ate, the quality-to-price ratio was amazing. All of the pintxos described above were each less than 4€. The drinks are also reasonably priced with small glasses of beer or wine costing around 1.50€.
During our half of a week trip, we did not eat any meals sitting or any in just one place. It’s marvelous to be able to stop, eat and drink a little bit, and continue on in search of more regional specialties and unique surprises.
My husband and I visited San Sebastián, Spain in August 2012 during the La Semana Grande festival week and also went to Bilbao, Figueres, Girona, and Barcelona. We ate a lot of pintxos, and our favorites in San Sebastián came from the following bars:
- La Cuchara del San Telmo – Calle del Treinta y Uno de Agosto, 28
- Dakara bi Taberna – Calle del Treinta y Uno de Agosto, 27
- Ramuntxo Berri – Calle Peña y Goñi, 10
- Aita Mari – Calle del Puerto, 23
- Bar Astelena – Calle Inigo 1
(Article from: https://thetravelingtimes.wordpress.com/2012/09/05/pintxo-hopping-in-san-sebastian/)


What Is Score Hero?
Score Hero is an Android game that will allow you to become a real football hero. Immerse yourself in the atmosphere of the game, feel the real drive; score goals, give passes, do everything to achieve victory. The game includes four hundred and sixty levels, each of which is original in structure and requires a certain approach.
No subscription fees. The game is absolutely free, but if you wish, you can purchase some
items for real money.
Levels, cups, awards. A variety of different levels, the possibility of winning cups and awards
all this inspires to go to the limit and maintain interest for many hours of hanging out in the
game.
Learning to play is simple; the interface is not complicated at all and can be studied even by a
child. However, to achieve this mastery is not so easy: you need to learn logical
constructions, instantaneous response and familiar with the application itself.
Software artists have done a great job because purely visually the game looks great. Due to a
high-quality drawing, you can really feel plunged into the world of a football game.
You can connect your profile from the social network Facebook and compare your progress
with the success of your friends.
There is an opportunity to create such a hero that will ideally satisfy your aesthetic
preferences.


Three men charged after ‘targeted’ shooting, evacuation at Alberta mall
The accused, who range in age from 25 to 37, were arrested Sunday and remain in custody
by The Canadian PressThree Calgary men are facing a charge of attempted murder following what police call a targeted shooting at a shopping mall that triggered an evacuation involving thousands of people.
Police and other emergency services from a wide area converged on the food court entrance at CrossIron Mills just north of the city on the evening of Sept. 16 after word of a shooting that seriously injured a man.
It took several hours to clear shoppers and store employees from the building and parking lot, but there were no reports of anyone being hurt during the evacuation.
The accused, who range in age from 25 to 37, were arrested Sunday and remain in custody.
Dakota Brandon Bolton, Carl James Schuyler and Jari Erkki Manner also face a number of other charges that include conspiracy to commit murder.
Manner was to appear in Airdrie provincial court Tuesday, while Bolton and Schuyler will appear via closed-circuit television in Airdrie on Nov. 14.
Police have previously said that a black 2019 Dodge Ram 4-door pickup truck carrying two people was seen fleeing from the mall following the shooting.
An update on the status of the injured man has not been released. The RCMP said in a statement that it cannot provide information about the motive behind the shooting.
The Canadian Press


Totals
Goal Calories
Calories Consumed
Remaining Calories
2000
Add selection
Choose a food from the list below then add it to a meal
Search by Name
New food
Foods
Name
Calories


Any schema paradigm imposes particular limitations on the constraints expressable by a schema. Thus SGML declarations refer to its grammar declarations as 'content models'; there is a difference between (the expectations we have of) a schema versus a model: the former defines canonically or exhaustively, whilst the latter describes as best it can according to its schematic paradigm.
[SGML] and [XML] have provided a large-scale example of a design-by-contract [Meyer] distributed system: the DTD has acted as the language for specifying the invariants of documents diring its life, but over-rideable (using parameter entities in the internal subset) to allow particular process-local invariants to be described. It is common practise in SGML shops to override and extend DTD ad hoc, in order to better describe and verify (validate) the data at various stages. The ability to flexibly alter DTDs as required seems to be one distinguishing feature of successful SGML-based production.
Conventionally, starting with SGML DTDs, schemas for markup languages
are defined in terms of grammars to regulate element containment, lists
to regulate attribute containment, augmented by datatype constraints on
various information elements. In XML, these additional constraints are
concerned with enabling graph structures to be represented, rather than
describing the semantics or types of information elements. In the
late 1990s, many schema languages were developed for XML in anticipation
of the development of the World Wide Web Consortium's [XML Schema] schema
language. All these schema languages used the grammar-founded approach
mentioned above, elaborating on them using objects [SOX], modules [RELAX],
production selectors [Assertion Grammars], etc.
But these approaches have certain deficiencies. For a start, SGML used grammars as its schematic paradigm because one does indeed define grammars with it, down to lexical level: a full-featured SGML parser can parse many tagged-data languages regardless of the delimiters used. The grammar paradigm is not necessary for schemas for XML. Secondly, the grammar approach is not sufficient to express any constraints between information items in different branches of the attribute-value tree which forms the primary view of an XML document. The mechanisms for declaring unique identifies and references do not alter this; mechanisms such as that of [XML Schema] and [RELAX] to introduce grammar non-terminals (termed the tag/type distinction) allow an element name to have a different datatype of content model depending on its parent, however this merely allows the type of an element to be constrained by its parent's type as well as by its generic identifier (i.e., by its tag).
More generally, there is no reason to expect an arbitrary web of information (think of an Entity-Relation diagram) to conform itself to a simple tree structures. Consequently there is no reason to expect that the information constraining one structure or value will always be found in the same branch. (Indeed, schema languages themselves may in part be attempts to move non-branch-local information to a separate tree, to simplify the markup, and structures).
These deficiencies are nothing more than schema paradigm limitations. However there are other pragmatic and policy considerations that may make a grammar-based schema paradigm unattractive.
Secondly, if a schematic paradigm has language or cultural affinities, that different schema languages may be doubly difficult for people with cognative impairments. I only need to take this point as far as saying the obvious that a complex schema paradigm may be more difficult than a simple one. And the difficulty of a schematic paradigm may be more than just its complexity to explain but also its complexity to use and implement.
Third, when considering the needs of schemas for constraints on documents which are needed to support accessibility by disabled people, we come up against what I regard as a fundamental shortfall in existing schema languages: they are designed to support definitional schemas which intend to specifiy exhaustively or canonically the required constraints on a document. However, acessibility constraints are typically policy constraints imposed on a document in addition to those constraints required to define that document. Yet these constraints are fundamentally schematic: they relate to invariants about what elements, etc. can be used and where.
Fourthly, after admitting that there can be important non-definitional constraints on a document, the question arises of what other non-definitional constraints can there be? The main one I identify is the requirements of workflow: that some constraints only may come into existence during some phase of a document's lifecycle. Without some notion of constraints that come into play during a phase, one must either weaken constraints on a schema, until the schema only contains the loosest unparameterized invariants, or arbitrarily switch schemas during the document's life cycle.
Fifthly, building on the notion that it is useful to be able to switch constrains in and out during formally defined phases of a document's life cycle, we can see that the ability to group and switch in and out constraints on an ad hoc basis during editing of a document would be useful. It is a common difficulty with validating editors of structured documents that otiose errors are reported for documents under construction and incomplete.
Sixthly, the other side to reporting extranous information is that a grammar-based schema language probably does not have any mechanism to explain the significance of particles and groups in its content model: if there is a repeating group of elements, surely it is more interesting to know why they are grouped and repeat rather than merely the bland fact that they are grouped and repeated. A group in a content model represents a kind of manditorily omitted element, where the schema designer has decided, perhaps for pragmatic reasons of markup minimisation, to not allow the structure to be named as an element.
Seventhly, the previous issue raises the further question of how information is to be provided for human interaction with a schema system. In the case of grammars, it is possible to synthesize many useful error massages or diagnostic hints from a content model; however grammar based systems have seemed weak in helping sort out how to fix in-progress or utterly wrong markup.
Thus one consideration leads to the next, and the result can be considerable doubt that grammars provide the optimal schema paradigm for documents for the World Wide Web. These are some of the needs and considerations underpinning development of the Schematron assertion language.
Which is not, of course, to say that grammars are not quite useful when appropriate.
A Schematron process does not augment the information set of the document per se. Instead, it is assumed to create an external document containing links or references (human or machine-readable) to the original document.
The <assert> element is used to tag positive assertions about a document. For example,
<assert>A 'dog' element should contain two 'ear' elements.</assert>This asssertion is something that is expected to be true of the document. If a document is validated against the schema, and the test for this assertion fails, an application can take some action. Schematron does not specify any actions: it only allows assertions to be tested, for the parts of assertions to be given roles, for the assertions to be grouped into rules, for the rules to be grouped into patterns, and for the patterns to be activated in various phases.
The <report> element is used to tag negative assertions about a document. For example,
<report>This dog has a bone.</report>
The test attribute on a <assert> or <report> element is an XPath expression evaluated to boolean: informally, XPath expressions are a simple expression language with functions on strings, numbers, booleans, document context, and nodes. The terms can be grouped using parentheses and |. Formally, they must match the production and semantics of production [14] Expr, s.3 Expressions in the [XPath] specification. (See Appendix D below for a combined listing of the various productions.)
<assert test="self::dog and child::bone" >A 'dog' element should contain two 'ear' elements.</assert>
Within these two elements, it is possible to use a <name> element, which gives the specific name of the context element for which the assert statement failed or the report statement succeeded. The <name> element can also have an attribute path in which an [XPath] expression can be given; this allows the name of an element or attribute different to the context element to be specified. Because some implementations of Schematron may format these names differently. For better formatting, an element <emph> is also allowed; its only use is to allow names of elements or attributes to be specified in assertions to have the same format as those provided by evaluating the <name> element. The <span> element is also allowed, with the same meaning as in HTML.
<assert test="child::bone" >A <name/> element should contain two <emph>ear</emph> elements.</assert>
Note that there is an abbreviated syntax possible for use in the test attribute. So the following example is equivalent to the previous one:
<assert test="bone" >A <name/> element should contain two <emph>ear</emph> elements.</assert>
For internationalization, the element <dir> can be used inside these two elements to support bidirectional written languages; the semantics are those of the dir element of [HTML]. The elements may also have an xml:dir attribute for tagging the written language of the contents of the element; the xml:lang attribute does not express the language of the target document.
For better formating of assertion reports, these two elements may also have an icon attribute, which is the [URL] of a small image that may provide visual clues to a user.
These two elements can also have a subject attribute. This is an [XPath] path which allows very direct specification of the subject of the assertion: this may be useful information for automatically generating [RDF] documents.
There is no prescribed order in which assertions must be checked. (By default, most implementations will probably check assertions in the same order they appear in the document.)
In the particular case of Schematron schemas which need to be very terse, and which are inteded for a yes/no validation result, the natural language assertions may be omitted.
The full declarations for the assertions above are
<rule context="dog"> <assert test="count(ear) = 2" >A 'dog' element should contain two 'ear' elements.</assert> <report test="bone" >This dog has a bone.</report> </rule>
The context attribute on a <rule> element is an XSLT pattern: informally, this allows XPath path expressions to be combined in or groups (using the keyword or and parentheses for grouping). Formally, they must match the production and semantics of production [1] Pattern, s.5.2 Patterns in the XSLT specification. (See Appendix D below for a combined listing of the various productions.) The functions available include those in XSLT s.12 Additional Functions. These can be extended using the methods in XSLT s14.2 Extension Methods; the function-available() function should be used before any extension function is called to allow some graceful behaviour on systems which do not support the functions. (It is anticipated that some more business-oriented functions may be developed at some later stage.)
These three elements are the operational core of Schematron. [XPath] expressions allow a very wide range of constraints to be expressed: based on element and attribute names, based on their position and occurrence, based on text values, and based on counts. In the example, the context is every element with a generic identifier 'dog': the test in the <assert> element counts the number of child elements with the generic identifer 'ear'. Neither assertion in this rule will fail for the following XML document:<dog><ear/><ear/></dog>The context attribute is an [XPath] as extended by [XSLT], allowing 'or' operations, for example. The test attributes are [XPath] expressions which allow various logical operators such as '|'.
The <rule>,<assert> and <report> elements can each have a role attribute. This is an identifier within the schema to identify the role that is played. Schematron 1.5 does not pre-define any roles; the <ns> attribute on the <schema> element can be used to specify some URL to which this controlled vocabulary belongs. These elements can also have id attributes.
<rule context="dog" role="animal" id="doggy"> <assert test="count(ear) = 2" role="internalProperty" >A 'dog' element should contain two 'ear' elements.</assert> <report test="bone" role="externalProperty" >This dog has a bone.</report> </rule>
This jointed-leg path system is reminiscent of SQL queries: one could consider a query SELECT x FROM y WHERE z IS a to be a context statement (i.e., 'WHERE x IS y') and a test (i.e., 'x FROM y).
A <rule> element can also contain <key> elements, which allows [XPath]'s key mechanism to be used. This allows various testing of reference constraints; it is more powerful than the [XML] ID/IDREF mechanism. The path attribute is an [XPath] path; the name attribute is a token naming the key. The icon attribute allows specification of an icon.
An important feature to note is that, because of [XSLT]'s document() function, a Schematron assertion test can refer to data in a different document from the context document. This allows Schematron schemas to be used for two important uses: to validate against a controlled vocabulary located externally to the schema (indeed, this can be in any XML document type, not just using a Schematron schema), and to validate the output of some programs function against data found in its input (or vice versa) as a form of black-box testing.
It is also useful to note that Schematron lends itself to analysis of information sets using cohesion and coupling ideas [Constantine]. The coupling of one information item to another often is not symetrical: DTDs force all coupling contstraints to be expressed in terms of the parent to the child, whereas some coupling may be better expressed from child to parent. This is a typical way of specifying optional elements in a Schematron schema.
A simple macro mechanism is allowed on rules. A <rule> element can have one or more <extends> elements. These have a rule attribute, which is the identifier of an abstract rule. This allows you to bring the assertions of that anbstract rule into the current rule. An abstract rule is specified with an abstract attribute with a value "true". An abstract rule element cannot have a context attribute. As an example, this constraint can be specified as follows (in [XPath} paths
<rule context="sch:rule"> <assert test="(attribute::abstract='true') and not(attribute::context)" >An abstract rule cannot have a context attribute.</assert> <assert test="(attribute::abstract='false') and attribute::context" >A rule should have a context attribute (except for abstract rules.)</assert> <assert test="not(attribute::abstract) and attribute::context" >A rule should have a context attribute (except for abstract rules.)</assert> <report test="attribute::abstract and not(attribute::abstract='true') and not(attribute::abstract='false')" >In a rule, the abstract attribute is optional, and can have values 'true' or 'false'</report> </rule>Note in this example that Schematron schemas are very specific. It is quite probable that a simpler schema would be just as effective, or the various assertions could be combined into a larger test with a more general statement.
One abstract rule can extend another. XML Entities can also be used for various macro effects, as desired.
There is no prescribed order in which rules must be checked. (By default, most implementations will probably check rules in the same order they appear in the document.) Note, however, that if rules are checked in a different order, they still must implement the order-dependent semantic that each context attribute is a shortened form of the full context attribute, such that the context is really formed by first testing negative of or-ing all previous contexts in the same pattern; only nodes which pass that seive are tested by the rule.
Pattern elements have various attributes. The name attribute allows specification of a simple human-readable string to identify the pattern. The id attribute allows a unique identifier to be assigned. for reference purposes. The fpi attribute allows an [SGML] Formal Public Identifier to be attached. The see attribute allows a [URL] to be specified which gives some human readable documentation for the pattern; a hypertext presentation of the schema results can link to that resource.
A pattern is the nearest equivalent in Schematron to a type; except that Schematron is concerned with providing as direct as possible specification of the relationships between information items rather than trying to fit them into an abstract mold such as type. Which is not, of course, to say that notions of type are not quite useful where appropriate.
A <pattern> element can have an icon element.
There is no prescribed order in which patterns must be checked. (By default, most implementations will probably check patterns in the same order they appear in the document, and schema-writers may put important patterns before less important patterns in the document to present the most useful information to the user.) Note, however, that if the pattern is activated in the current phase, it should not be checked.
Typically the schema will be declared using XML [Namespace] conventions. The preferred prefix is sch and the appropriate namespace URI is
http://www.ascc.net/xml/schematronThus a complete XML schema document is as follows:
<?xml version="1.0" encoding="US-ASCII"?> <sch:schema xmlns:sch="http://www.ascc.net/xml/schematron"> <sch:title>Example Schematron Schema</sch:title> <sch:pattern> <sch:rule context="dog"> <sch:assert test="count(ear) = 2" >A 'dog' element should contain two 'ear' elements.</sch:assert> <sch:report test="bone" >This dog has a bone.</sch:report> </sch:rule> </sch:pattern> </sch:schema>The <schema> element can have a ns attribute which gives the namespace URI that role attributes will have, if the role is used to externally mark up the target document.
The <schema> element also allows explicit declaration of namespace prefixes and URLs that are used in the schema, using the <ns> subelements. The usual XML [Namespaces] mechanism can be used, however, then the prefix and URL data is not available for diagnostic reporting or application processing; furthermore, some implementations may require that the information is made available in that form. For example:
<sch:schema xmlns:sch="http://www.ascc.net/xml/schematron"> <sch:title>Screen-scraper for XHTML data</sch:title> <sch:ns prefix="xhtml" uri="http://www.w3.org/1999/xhtml" /> ...
A <schema> can have an icon attribute. It can also contain <p> elements, allowing some modest end-user-oriented documentation to be given: this allows the user to know what kind of validation or constraints the schema specifies, to aid them in interpreting any results usefully. The <p> element can have an icon attribute.
The <phase> element has subelements active which provide the identifier of a <pattern> in an attribute pattern.
<phase id="basicValidation"> <active pattern="text" /> <active pattern="tables" /> <active pattern="attributePresence" /> </phase> <phase id="fullValidation"> <active pattern="metadata" /> <active pattern="text" /> <active pattern="tables" /> <active pattern="attributePresence" /> <active pattern="attributeValueChecks" /> </phase>
By default, all patterns in a document are active. However, an application may provide a way to allow the user to select the phase to be used: for example, a command line option when invoked from the command line, a preferences dialog box in a GUI, or a parameter on the function invocation when called as a precondition-checker in a programming language (such as C's assert(), from which Schematron's assert takes its name, or the pre and post-condition statements in Eiffel.)
Users have reported that a common use of Schematron schemas is to allow specific diagnostics to be given. However, it is desirable to keep <assert> and <report> statements as general assertions rather than diagnostic messages. To support this, the <assert> and <report> elements have a diagnostics attribute which is a reference to one or more <diagnostic> elements. These are allowed in a <diagnostics> section at the end of the document. The value of the diagnostics attribute can be a list of references to <diagnostic> elements.
A <diagnostic> element is general text. It can trivially be converted into HTML. It can contain <dir> (for bidirectional languages), <span> and <emph> subelements with the same meanings as HTML. It must have an id attribute to allow references to it. The <diagnostic> element can have <value-of> sub-elements, which have the same semantics as in [XSLT]. These allow insertion of value information as well as name details. A <diagnostic> element can have an icon attribute.
<rule context="dog" > <assert test="nose | @exceptional='true'" diagnostics="d1 d2" >A dog should have a nose.</assert> </rule> ... <diagnostics> <diagnostic id="d1" >Your dog <value-of select="@petname" /> has no nose. How does he smell? Terrible. Give him a nose element, putting it after the <name path="child::*[2]"/> element. </diagnostic> <diagnostic id="d2" >Animals such as <name/> usually come with a full complement of legs, ears and noses, etc. However, exceptions are possible. If your dog is exceptional, provide an attribute <emph>exceptional='true'</emph> </diagnostic> </diagnostics>
There is no prescribed order in which diagnostics must be given. (By default, most implementations will probably give diagnostics in the same order they appear in the document, and schema-writers may try to use this by putting more likely diagnostics before unlikely ones.)
Because of the emphasis that the natural language text of an assert or report element is the definition of an assertion, wi the tests being models of the assertion, even undocumented Schematron schemas should be more comprensible than other schema languages. The documentation features are designed to extend these, and in particular to be able to generate pleasant print or hypertext versions of a schema.
A <p> element is general text. It can be trivially converted into HTML. It can contain <dir> (for bidirectional languages), <span> and <emph> subelements with the same meanings as HTML. It can have an id attribute to allow references to it. The optional class attribute is provided to help generation of styled HTML, The xml:lang attribute can be used to specify the language of the paragraph. A <p> element can have an icon attribute, which is not an HTML attribute.
Other useful validation languages can be built by merely using the Schematron framework and substituting other query languages. For a language to be Schematron-like it must be
A Schematron-like assertion language does not require backtracking or a theoretically complex implementation. Other higher and lower layers may be added, for instance the phase mechanism (which could in turn be generalized into a finite state machine.) However, schema language designers should note that there seems to be good usability reasons to stick with a fairly fixed hierarchy, rather than, say, adding an extra leg between context and the assertions: for a start, it means that Schematron schemas can be entered using simple forms.
Another distinctive that may make a language Schematron-like is the decision to partition the query components to a separate, embedded query language. This seems to have helped the readability, comprehesibility and learnability of the language; it adds a terseness which makes hand-editing of schemas completely viable.
Schematron lends itself to being embedded in other schema languages. In such a use, an extractor program (perhaps an XSLT stylesheet) typically extracts and creates the separate Schematron schema. Even though only fragments of Schematron are being used, such as just the assert elements, it is still appropriate to use the Schematron namespace.
For a relevant discussion on the role of primacy of natural language descriptions over formal descriptions and the nature of declarative specifications, which are surely applicable to schemas, see [LeCharlier]. Note their comments that a specification should always have 1) a statement indicating purpose, and 2) a list of representation conventions that must be satisfied.
Schematron can be considered a front-end for specifying the targets of a transformation system (see [CIP].) Indeed, Schematron also may be considered to split the front-end into a rule-based framework (see [Schemarama] for an implementation of this) and a query language (in Schematron's case, XPath.)
The element name assert was chosen for familiarity to C programmers from the C assert(). See ???
The XLinkIt language is a similar assertion language to Schematron, but invented independently and with different usage goals and design rationales. See [Finkelstein]. Note the existance of the Patent ???? which relates to generating links between a schema document and an instance for consistancy checking using a rules-based system. con>
A phase can be regarded as a state in a Finite State Machine (see [Etessami] for a comparison of rules-based and state-machine-based approaches.)
<!-- +//IDN sinica.edu.tw//DTD Schematron 1.5//EN --> <!-- http://www.ascc.net/xml/schematron/schematron1-5.dtd --> <!-- version of 2001/01/31 --> <!-- All names are given indirectly, to allow explicit use of a namespace prefix if desired. In that case, in the internal subset of the doctype declaration, define <!ENTITY % sp "sch:" > --> <!ENTITY % sp ""> <!ENTITY % schema "%sp;schema"> <!ENTITY % active "%sp;active"> <!ENTITY % assert "%sp;assert"> <!ENTITY % dir "%sp;dir"> <!ENTITY % emph "%sp;emph"> <!ENTITY % extends "%sp;extends"> <!ENTITY % diagnostic "%sp;diagnostic"> <!ENTITY % diagnostics "%sp;diagnostics"> <!ENTITY % key "%sp;key"> <!ENTITY % name "%sp;name"> <!ENTITY % ns "%sp;ns"> <!ENTITY % p "%sp;p"> <!ENTITY % pattern "%sp;pattern"> <!ENTITY % phase "%sp;phase"> <!ENTITY % report "%sp;report"> <!ENTITY % rule "%sp;rule"> <!ENTITY % span "%sp;span"> <!ENTITY % title "%sp;title"> <!ENTITY % value-of "%sp;value-of"> <!-- Data types --> <!ENTITY % URI "CDATA"> <!ENTITY % PATH "CDATA"> <!ENTITY % EXPR "CDATA"> <!ENTITY % FPI "CDATA"> <!-- Element declarations --> <!ELEMENT %schema; ((%title;)?, (%ns;)*, (%p;)*, (%phase;)*, (%pattern;)+, (%p;)*, (%diagnostics;)?)> <!ELEMENT %active; (#PCDATA | %dir; | %emph; | %span;)*> <!ELEMENT %assert; (#PCDATA | %name; | %emph; | %dir; | %span;)*> <!ELEMENT %dir; (#PCDATA)> <!ELEMENT %emph; (#PCDATA)> <!ELEMENT %extends; EMPTY> <!ELEMENT %diagnostic; (#PCDATA | %value-of; | %emph; | %dir; | %span;)*> <!ELEMENT %diagnostics; (%diagnostic;)*> <!ELEMENT %key; EMPTY> <!ELEMENT %name; EMPTY> <!ELEMENT %ns; EMPTY> <!ELEMENT %p; (#PCDATA | %dir; | %emph; | %span;)*> <!ELEMENT %pattern; ((%p;)*, (%rule;)*)> <!ELEMENT %phase; ((%p;)*, (%active;)*)> <!ELEMENT %report; (#PCDATA | %name; | %emph; | %dir; | %span;)*> <!ELEMENT %rule; (%assert; | %report; | %key; | %extends;)+> <!ELEMENT %span; (#PCDATA)> <!ELEMENT %title; (#PCDATA | %dir;)*> <!ELEMENT %value-of; EMPTY> <!-- Attribute declarations --> <!ATTLIST %schema; xmlns %URI; #FIXED "http://www.ascc.net/xml/schematron" xmlns:sch %URI; #FIXED "http://www.ascc.net/xml/schematron" xmlns:xsi %URI; #FIXED "http://www.w3.org/2000/10/XMLSchema-instance" xsi:schemaLocation %URI; " http://www.ascc.net/xml/schematron http://www.ascc.net/xml/schematron/schematron.xsd" id ID #IMPLIED fpi %FPI; #IMPLIED schemaVersion CDATA #IMPLIED defaultPhase IDREF #IMPLIED icon %URI; #IMPLIED version CDATA "1.5" xml:lang NMTOKEN #IMPLIED > <!ATTLIST %active; pattern ID #REQUIRED > <!ATTLIST %assert; test %EXPR; #REQUIRED role NMTOKEN #IMPLIED id ID #IMPLIED diagnostics IDREFS #IMPLIED icon %URI; #IMPLIED subject %PATH; #IMPLIED xml:lang NMTOKEN #IMPLIED > <!ATTLIST %dir; value (ltr | rtl) #IMPLIED > <!ATTLIST %extends; rule IDREF #REQUIRED > <!ATTLIST %diagnostic; id ID #REQUIRED icon %URI; #IMPLIED xml:lang NMTOKEN #IMPLIED > <!ATTLIST %key; name NMTOKEN #REQUIRED path %PATH; #REQUIRED icon %URI; #IMPLIED > <!ATTLIST %name; path %PATH; "." > <!-- Schematrons should implement '.' as the default value for path in sch:name --> <!ATTLIST %p; xml:lang CDATA #IMPLIED id ID #IMPLIED class CDATA #IMPLIED icon %URI; #IMPLIED > <!ATTLIST %pattern; name CDATA #REQUIRED see %URI; #IMPLIED id ID #IMPLIED icon %URI; #IMPLIED > <!ATTLIST %ns; uri %URI; #REQUIRED prefix NMTOKEN #IMPLIED > <!ATTLIST %phase; id ID #REQUIRED fpi %FPI; #IMPLIED icon %URI; #IMPLIED > <!ATTLIST %span; class CDATA #IMPLIED > <!ATTLIST %report; test %EXPR; #REQUIRED role NMTOKEN #IMPLIED id ID #IMPLIED diagnostics IDREFS #IMPLIED icon %URI; #IMPLIED subject %PATH; #IMPLIED > <!ATTLIST %rule; context %PATH; #IMPLIED abstract (true | false) "false" role NMTOKEN #IMPLIED id ID #IMPLIED > <!-- Schematrons should implement 'false' as the default value of abstract --> <!ATTLIST %value-of; select %PATH; #REQUIRED >
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE schema PUBLIC "http://www.ascc.net/xml/schematron" "http://www.ascc.net/xml/schematron/schematron1-5.dtd"> <schema xmlns="http://www.ascc.net/xml/schematron" xmlns:sch="http://www.ascc.net/xml/schematron" xml:lang="en" xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance" xsi:schemaLocation="http://www.ascc.net/xml/schematron http://www.ascc.net/xml/schematron/schematron1-5.xsd" fpi="+//IDN ascc.net//SGML XML Schematron 1.5 Schema for Schematron 1.5//EN" schemaVersion="2001/01/31" version="1.5" defaultPhase="New" icon="http://www.ascc.net/xml/resource/schematron/bilby.jpg"> <title>Schematron 1.5</title> <ns uri="http://www.ascc.net/xml/schematron" prefix="sch"/> <p>Copyright (C) 2001 Rick Jellife. Freely and openly available under zlib/libpng license.</p> <p>This schema is open: it only considers elements in the Schematron namespce. Elements and attributes from other namespaces can be used freely. This schema does not assume that the Schematron schema is the top-level element. </p> <p>This schema uses conservative rules (e.g. no use of key()) to work with incomplete XSLT-based implementations.</p> <phase id="New"> <p>For creating new documents.</p> <active pattern="mini"/> </phase> <phase id="Draft"> <p>For fast validation of draft documents.</p> <active pattern="required" /> </phase> <phase id="Full"> <p>For final validation and tracking some tricky problems.</p> <active pattern="mini" /> <active pattern="required" /> <active pattern="attributes" /> </phase> <pattern name="Minimal Schematron" id="mini"> <p>These rule establish the smallest possible Schematron document. These rules may be handy for beginners with starting documents.</p> <rule context="/"> <assert test="//sch:schema" >A Schematron schema should have a schema element. </assert> <report test="count(//sch:schema) > 1" >There should only be one schema per document.</report> <assert test="//sch:schema/sch:pattern " >A Schematron schema should have pattern elements inside the schema element</assert> <assert test="//sch:schema/sch:pattern/sch:rule[@context]" >A Schematron schema should have rule elements inside the pattern elements. Rule elements should have a context attribute.</assert> <assert test="//sch:schema/sch:pattern/sch:rule/sch:assert[@test] or //sch:schema/sch:pattern/sch:rule/sch:report[@test]" >A Schematron schema should have assert or report elements inside the rule elements. Assert and report elements should have a test attribute.</assert> </rule> </pattern> <pattern name="Schematron Elements and Required Attributes" id="required"> <p>Rules defining occurrence rules for Schematron elements and their required attributes. Note that for attributes, it is not that the attribute is being tested for existance, but whether it has a value.</p> <p>Some elements require certain children or attributes. Other elements require certain parents. Schematron can represent both these kinds of coupling. </p> <rule context="sch:schema"> <assert test="count(sch:*) = count(sch:title|sch:ns|sch:phrase|sch:p|sch:pattern|sch:diagnostics|sch:phase)" >The element <name/> should contain only the elements title, ns, phrase, p, pattern, diagnostics or phase from the Schematron namespace.</assert> <assert test="sch:pattern" >A schema element should contain at least one pattern element.</assert> <report test="ancestor::sch:*" >A Schematron schema should not appear as a child of another Schematron schema.</report> <report test="@defaultPhase and sch:phase and not(defaultPhase='#ALL') and not(sch:phase[@id= current()/@defaultPhase])" >The value of the defaultPhase attribute must match the id of a phase element.</report> </rule> <rule context="sch:title"> <assert test="parent::sch:schema" diagnostics="bad-parent" >The element <name/> should only appear inside the Schematron element schema.</assert> <assert test="count(preceding-sibling::sch:*) = 0" >The element <name/> should only appear as the first element from the Schematron namespace in the schema element.</assert> </rule> <rule context="sch:ns"> <assert test="parent::sch:schema" diagnostics="bad-parent" >The element <name/> should only appear inside the Schematron element schema.</assert> <assert test="string-length(normalize-space(@prefix)) > 0" >The element <name/> must have a value for the attribute prefix.</assert> <assert test="string-length(normalize-space(@uri)) > 0" >The element <name/> must have a value for the attribute uri.</assert> <assert test="count(preceding-sibling::sch:*) = count(preceding-sibling::sch:title)" >The <name/> element must come before any other Schematron elements, except the title</assert> <report test="*" >The <name/> element should be empty.</report> </rule> <rule context="sch:phase"> <assert test="parent::sch:schema" diagnostics="bad-parent" >The element <name/> should only appear inside the Schematron element schema.</assert> <assert test="count(preceding-sibling::sch:*) = count(preceding-sibling::sch:phase) + count(preceding-sibling::sch:title) + count(preceding-sibling::sch:ns) + count(preceding-sibling::sch:p)" >The <name/> elements must come before any other Schematron elements, except the title, ns and p elements</assert> </rule> <rule context="sch:active"> <assert test="parent::sch:phase" diagnostics="bad-parent" >The element <name/> should only appear inside the Schematron element phase.</assert> <assert test="string-length(normalize-space(@pattern)) > 0" >The element <name/> must have a value for the attribute pattern.</assert> </rule> <rule context="sch:pattern"> <assert test="parent::sch:schema" diagnostics="bad-parent" >The element <name/> should only appear inside the Schematron element schema.</assert> <assert test="count(sch:*) = count(sch:rule|sch:p)" >The element <name/> should contain only rule and p elements from the Schematron namespace.</assert> <assert test="sch:rule" >The element <name/> should contain at least one rule element.</assert> <assert test="string-length(normalize-space(@name)) > 0" >The element <name/> must have a value for the attribute name.</assert> <assert test="count(sch:title) < 2" >A Schematron schema cannot have more than one title element.</assert> </rule> <rule context="sch:rule[@abstract='true']"> <assert test="parent::sch:pattern" diagnostics="bad-parent" >The element <name/> should only appear inside the Schematron element pattern.</assert> <assert test="count(sch:*) = count(sch:assert |sch:report|sch:key|sch:extends ) " >The element <name/> should contain only the elements assert, report, key or extends from the Schematron namespace.</assert> <assert test="sch:assert | sch:report | sch:extends" >The element <name/> should contain at least one assert, report or extends elements.</assert> <report test="@test" >The <name/> element cannot have a test attribute: that should go on a report or assert element.</report> <report test="@context" >An abstract rule cannot have a context attribute.</report> <assert test="string-length(normalize-space(@id)) > 0" >An rule should have an id attribute. </assert> </rule> <rule context="sch:rule"> <assert test="parent::sch:pattern" diagnostics="bad-parent" >The element <name/> should only appear inside the Schematron element pattern.</assert> <assert test="count(sch:*) = count(sch:assert |sch:report|sch:key|sch:extends ) " >The element <name/> should contain only the elements assert, report, key or extends from the Schematron namespace.</assert> <assert test="sch:assert | sch:report | sch:extends" >The element <name/> should contain at least one assert, report or extends elements.</assert> <report test="@test" >The <name/> element cannot have a test attribute: that should go on a report or assert element.</report> <assert test="string-length(normalize-space(@context)) > 0" >A rule should have a context attribute. This should be an XSLT pattern for selecting nodes to make assertions and reports about. (Abstract rules do not require a context attribute.)</assert> <assert test="not(@abstract) or (@abstract='false') or (@abstract='true')" >In a rule, the abstract attribute is optional, and can have values 'true' or 'false'</assert> </rule> <rule context="sch:assert "> <assert test="parent::sch:rule" diagnostics="bad-parent" >The element <name/> should only appear inside the Schematron element rule.</assert> <assert test="string-length(normalize-space(text())) > 0" >A <name/> element should contain a natural language sentence.</assert> <assert test="string-length(normalize-space(@test)) > 0" >The element <name/> must have a value for the attribute test. This should be an XSLT expression.</assert> <report test="@context" >The <name/> element cannot have a context attribute: that should go on the rule element.</report> </rule> <rule context=" sch:report"> <assert test="parent::sch:rule" diagnostics="bad-parent" >The element <name/> should only appear inside the Schematron element rule.</assert> <assert test="string-length(normalize-space(text())) > 0" >A <name/> element should contain a natural language sentence.</assert> <assert test="string-length(normalize-space(@test)) > 0" >The element <name/> must have a value for the attribute test. This should be an XSLT expression.</assert> <report test="@context" >The <name/> element cannot have a context attribute: that should go on the rule element.</report> </rule> <rule context="sch:diagnostics"> <assert test="parent::sch:schema" diagnostics="bad-parent" >The element <name/> should only appear as a child of the schema element</assert> <report test="following-sibling::sch:*" >The element <name/> should be the last element in the schema.</report> </rule> <rule context="sch:diagnostic"> <assert test="parent::sch:diagnostics" diagnostics="bad-parent" >The element <name/> should only appear in the diagnostics section.</assert> <assert test="string-length(normalize-space(@id)) > 0" >The element <name/> must have a value for the attribute id. </assert> </rule> <rule context="sch:key"> <assert test="parent::sch:rule" diagnostics="bad-parent" >The element <name/> should only appear in a rule.</assert> <assert test="string-length(normalize-space(@name)) > 0" >The element <name/> must have a value for the attribute name. </assert> <assert test="string-length(normalize-space(@path)) > 0" >The element <name/> must have a value for the attribute path. This should be an XPath expression.</assert> <report test="*" >The <name/> element should be empty.</report> </rule> <rule context="sch:extends"> <assert test="parent::sch:rule" diagnostics="bad-parent" >The element <name/> should only appear in a rule.</assert> <assert test="string-length(normalize-space(@rule)) > 0" >The element <name/> must have a value for the attribute rule. </assert> <report test="*" >The <name/> element should be empty.</report> <assert test="/*//sch:rule[@abstract='true'][@id = current()/@rule]" >The <name/> element should have an attribute rule which gives the id of an abstract rule.</assert> </rule> <rule context="sch:p"> <assert test="parent::sch:*" diagnostics="bad-parent" >The element <name/> should only appear inside an element from the Schematron namespace. It is equivalent to the HTML element of the same name.</assert> </rule> <rule context="sch:name"> <assert test="parent::sch:assert | parent::sch:report |parent::sch:p | parent::sch:diagnostic" diagnostics="bad-parent" >The element <name/> should only appear inside a Schematron elements p (paragraph) or diagnostic.</assert> <report test="*" >The <name/> element should be empty.</report> </rule> <rule context="sch:emph"> <assert test="parent::sch:p | parent::sch:diagnostic" diagnostics="bad-parent" >The element <name/> should only appear inside a Schematron elements p (paragraph) or diagnostic. It is equivalent to the HTML element of the same name.</assert> </rule> <rule context="sch:dir"> <assert test="parent::sch:p | parent::sch:diagnostic" diagnostics="bad-parent" >The element <name/> should only appear inside a Schematron elements p (paragraph) or diagnostic.</assert> <assert test="@value and (@value='rtl' or @value='ltr')" >The attribute value of the <name/> element must be lowercase "rtl" or "ltr". It is equivalent to the HTML element of the same name.</assert> </rule> <rule context="sch:span"> <assert test="parent::sch:p | parent::sch:diagnostic" diagnostics="bad-parent" >The element <name/> should only appear inside a Schematron elements p (paragraph) or diagnostic. It is equivalent to the HTML element of the same name.</assert> </rule> <rule context="sch:value-of"> <assert test="parent::sch:diagnostic" diagnostics="bad-parent" >The element <name/> should only appear inside the Schematron element diagnostic.</assert> <assert test="string-length(normalize-space(@select)) > 0" >The element <name/> must have a value for the attribute select. The value should be an XPath expression.</assert> <report test="*" >The <name/> element should be empty.</report> </rule> <rule context="sch:*"> <report test="1=1" diagnostics="spelling" >The <name/> element is not an element from the Schematron 1.5 namespace</report> </rule> </pattern> <pattern name="Schematron Attributes" id="attributes" > <p>These rules specify which elements each attribute can belong to, and what they mean.</p> <rule context="sch:*"> <report test="@abstract and not(self::sch:rule)" >The boolean attribute abstract can only appear on the element rule. An abstract rule can be used to extend other rules.</report> <report test="@class and not(self::sch:span or self::sch:p)" >The attribute class can only appear on the elements span and p. It gives a name that can be used by CSS stylesheets.</report> <report test="@context and not(self::sch:rule)" >The attribute context can only appear on the element rule. It is an XPath pattern.</report> <report test="@defaultPhase and not(self::sch:schema)" >The attribute defaultPhase can only appear on the element schema. It is the id of the phase that will initially be active.</report> <report test="@diagnostics and not(self::sch:assert or self::sch:report)" >The attribute diagnostics can only appear on the elements report and report. It is the id of some relevent diagnostic or hint.</report> <report test="@fpi and not(self::sch:schema or self::sch:phase)" >The attribute fpi can only appear on the elements schema and phase. It is an ISO Formal Public Identifier.</report> <report test="@icon and not(self::sch:schema or self::sch:report or self::sch:diagnostic or self::sch:key or self::sch:p or self::sch:pattern or self::sch:phase or self::sch:report )" >The attribute icon can only appear on the elements schema, report, diagnostic, key, p, pattern, phase and report. It is the URL of a small image. </report> <report test="@id and not(self::sch:schema or self::sch:report or self::sch:p or self::sch:pattern or self::sch:phase or self::sch:report or self::sch:rule or self::sch:diagnostic)" >The attribute id can only appear on the elements schema, report, p, pattern, phase, report, rule and diagnostic. It is a name, it should not start with a number or symbol.</report> <report test="@name and not(self::sch:key or self::sch:pattern)" >The attribute name can only appear on the elements pattern and key.</report> <report test="@path and not(self::sch:key | self::sch:name)" >The attribute path can only appear on the element key. It is an XPath path.</report> <report test="@pattern and not(self::sch:active)" >The attribute pattern can only appear on the element active. It gives the id of a pattern that should be activated in that phase.</report> <report test="@prefix and not(self::sch:ns)" >The attribute prefix can only appear on the element ns.</report> <report test="@role and not(self::sch:report or self::sch:report or self::sch:rule)" >The attribute role can only appear on the element report, report or rule. It is a simple name, not a phrase.</report> <report test="@rule and not(self::sch:extends)" >The attribute rule can only appear on the element extends. It is the id of an abstract rule declared elsewhere in the schema.</report> <report test="@see and not(self::sch:pattern)" >The attribute see can only appear on the element pattern. It is the URL of some documentation for the schema.</report> <report test="@select and not(self::sch:value-of)" >The attribute select can only appear on the element value-of, with the same meaning as in XSLT. It is an XSLT pattern.</report> <report test="@schemaVersion and not(self::sch:schema)" >The attribute schemaVersion can only appear on the element schema. It gives the version of the schema.</report> <report test="@subject and not(self::sch:report or self::sch:report)" >The attribute subject can only appear on the elements report and report. It is an XSLT pattern. </report> <report test="@test and not(self::sch:assert or self::sch:report)" >The attribute test can only appear on the elements report and report. It is an XPath expression with the XSLT additional functions.</report> <report test="@uri and not(self::sch:ns)" >The attribute uri can only appear on the element ns. It is a URI.</report> <report test="@value and not(self::sch:dir)" >The attribute value can only appear on the element dir. It sets the directionality of text: 'rtl' is right-to-left and 'ltr' is left-to-right.</report> <report test="@version and not(self::sch:schema)" >The attribute version can only appear on the element schema. It gives the version of Schematron required as major number "." minor number.</report> <assert test="not(attribute::*) or attribute::*[string-length(normalize-space(text()))=0]" >Every attribute on a Schematron element must have a value if it is specified.</assert> </rule> </pattern> <diagnostics> <diagnostic id="spelling" >Check this is not a spelling error.  Schematron implementations should track the most recent W3C specifications.
AbbreviatedAbsoluteLocationPath ::= '//' RelativeLocationPath AbbreviatedRelativeLocationPath ::= RelativeLocationPath '//' Step AbbreviatedStep ::= '.' | '..' AbbreviatedAxisSpecifier ::= '@'? AbsoluteLocationPath ::= '/' RelativeLocationPath? | AbbreviatedAbsoluteLocationPath AdditiveExpr ::= MultiplicativeExpr | AdditiveExpr '+' MultiplicativeExpr | AdditiveExpr '-' MultiplicativeExpr AndExpr ::= EqualityExpr | AndExpr 'and' EqualityExpr Argument ::= Expr AxisSpecifier ::= AxisName '::' | AbbreviatedAxisSpecifier AxisName ::= 'ancestor' | 'ancestor-or-self' | 'attribute' | 'child' | 'descendant' | 'descendant-or-self' | 'following' | 'following-sibling' | 'namespace' | 'parent' | 'preceding' | 'preceding-sibling' | 'self' ChildOrAttributeAxisSpecifier ::= AbbreviatedAxisSpecifier | ('child' | 'attribute') '::' Digits ::= + EqualityExpr ::= RelationalExpr | EqualityExpr '=' RelationalExpr | EqualityExpr '!=' RelationalExpr Expr ::= OrExpr ExprToken ::= '(' | ')' | '' | '.' | '..' | '@' | ',' | '::' | NameTest | NodeType | Operator | FunctionName | AxisName | Literal | Number | VariableReference FilterExpr ::= PrimaryExpr | FilterExpr Predicate FunctionCall ::= FunctionName '(' ( Argument ( ',' Argument )* )? ')' FunctionName ::= 'last' | 'position' | 'ount' | 'id' | 'local-name' | 'namespace-uri' | 'name' | 'string' | 'concat' | 'starts-with' | 'contains' | 'substring-before' | 'substring-after' | 'substring' | 'string-length' | 'normalize-space' | 'translate' | 'boolean' | 'not' | 'true' | 'fals' | 'lang' | 'number' | 'sum' | 'floor' | 'ceiling' | 'round' | 'document' | 'key' | 'format-number' | 'current' | 'system-property' (Caution: system-roperty() available with XSLT 1.1 only) IdKeyPattern ::= 'id' '(' Literal ')' | 'key' '(' Literal ',' Literal ')' LocalPart ::= NCName LocationPath ::= RelativeLocationPath | AbsoluteLocationPath LocationPathPattern ::= '/' RelativePathPattern? | '//'? RelativePathPattern Literal ::= '"' * "'" MultiplicativeExpr ::= UnaryExpr | MultiplicativeExpr MultiplyOperator UnaryExpr | MultiplicativeExpr 'div' UnaryExpr | MultiplicativeExpr 'mod' UnaryExpr MultiplyOperator ::= '*' NameTest ::= '*' | NCName ':' '*' | QName NCName ::= (Letter | '_') (NCNameChar)* NCNameChar ::= Letter | Digit | '.' | '-' | '_' | CombiningChar | Extender NodeTest ::= NameTest | NodeType '(' ')' | 'processing-instruction' '(' Literal ')' NodeType ::= 'comment' | 'text' | 'processing-instruction' | 'node' Number ::= Digits ('.' Digits?)? | '.' Digits Operator ::= OperatorName | MultiplyOperator | '/' | '//' | '|' | '+' | '-' | '=' | '!=' | '<' | '<=' | '>' | '>=' OperatorName ::= 'and' | 'or' | 'mod' | 'div' PathExpr ::= LocationPath | FilterExpr | FilterExpr '/' RelativeLocationPath | FilterExpr '//' RelativeLocationPath Pattern ::= LocationPathPattern | Pattern '|' LocationPathPattern | IdKeyPattern (('/' | '//') RelativePathPattern)? Predicate ::= '' PredicateExpr ::= Expr Prefix ::= NCName PrimaryExpr ::= VariableReference | '(' Expr ')' | Literal | Number | FunctionCall QName ::= (Prefix ':')? LocalPart RelativeLocationPath ::= Step | RelativeLocationPath '/' Step | AbbreviatedRelativeLocationPath RelativePathPattern ::= StepPattern | RelativePathPattern '/' StepPattern | RelativePathPattern '//' StepPattern RelationalExpr ::= AdditiveExpr | RelationalExpr '<' AdditiveExpr | RelationalExpr '>' AdditiveExpr | RelationalExpr '<=' AdditiveExpr | RelationalExpr '>=' AdditiveExpr S ::= (#x20 | #x9 | #xD | #xA)+ Step ::= AxisSpecifier NodeTest Predicate* | AbbreviatedStep StepPattern ::= ChildOrAttributeAxisSpecifier NodeTest Predicate* UnaryExpr ::= UnionExpr | '-' UnaryExpr UnionExpr ::= PathExpr | UnionExpr '|' PathExpr VariableReference ::= '$' QName
Following is a reference implementation for an earlier version of Schematron. It shows how simple a basic implementation can be. For reference and other implementations of Schematron 1.5, visit the website http://www.ascc.net/xml/schematron
<?xml version="1.0" ?> <!-- Preprocessor for the Schematron XML Schema Language. http://www.ascc.net/xml/resource/schematron/schematron.html Copyright (c) 1999, 2000 Rick Jelliffe and Academia Sinica Computing Center, Taiwan This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. History: 1999-10-18 Created RJ 1999-10-25 In report and assert should use apply-template not value-of Thanks to James Clark for this fix 1999-11-2 Add key element 1999-12-21 Add ns element: thanks Dave Carlisle for the code 2000-03-26 Add axsl:output and version- well spotted Oliver Becker 2000-10-20 Add select to do-all-patterns: thanks Uche Obbuji --> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:axsl="http://www.w3.org/1999/XSL/TransformAlias"> <xsl:namespace-alias stylesheet-prefix="axsl" result-prefix="xsl"/> <!-- Category: top-level-element --> <xsl:output method="xml" omit-xml-declaration="no" standalone="yes" indent="yes" /> <xsl:template match="schema"> <axsl:stylesheet version="1.0"> <axsl:output method="text" /> <xsl:for-each select="ns"> <xsl:attribute name="{concat(@prefix,':dummy-for-xmlns')}" namespace="{@uri}"/> </xsl:for-each> <xsl:attribute name="version">1.0</xsl:attribute> <xsl:apply-templates mode="do-keys" /> <axsl:template match='/'> <xsl:value-of select="title" /> <xsl:apply-templates mode="do-all-patterns" /> </axsl:template> <xsl:apply-templates /> <axsl:template match="text()" priority="-1"> <!-- strip characters --> </axsl:template> </axsl:stylesheet> </xsl:template> <xsl:template match="pattern" mode="do-all-patterns" > <axsl:apply-templates select="/" mode='M{count(preceding-sibling::*)}' /> </xsl:template> <xsl:template match="pattern"> <xsl:apply-templates /> <axsl:template match="text()" priority="-1" mode="M{count(preceding-sibling::*)}"> <!-- strip characters --> </axsl:template> </xsl:template> <xsl:template match="rule"> <axsl:template match='{@context}' priority='{4000 - count(preceding-sibling::*)}' mode='M{count(../preceding-sibling::*)}'> <xsl:apply-templates /> <axsl:apply-templates mode='M{count(../preceding-sibling::*)}'/> </axsl:template> </xsl:template> <xsl:template match="name" mode="text"> <xsl:choose> <xsl:when test='@path' > <axsl:value-of select="name({@path})" /> </xsl:when> <xsl:otherwise> <axsl:value-of select="name(.)" /> </xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template match="assert"> <axsl:choose> <axsl:when test='{@test}'/> <axsl:otherwise> <xsl:if test="@role">(<xsl:value-of select="@role"/>) </xsl:if> In pattern <xsl:value-of select="ancestor::pattern/@name"/>: <xsl:apply-templates mode="text" /> </axsl:otherwise> </axsl:choose> </xsl:template> <xsl:template match="report"> <axsl:if test='{@test}'> <xsl:if test="@role">(<xsl:value-of select="@role"/>) </xsl:if> In pattern <xsl:value-of select="ancestor::pattern/@name"/>: <xsl:apply-templates mode="text"/> </axsl:if> </xsl:template> <xsl:template match="rule/key" mode="do-keys"> <axsl:key match="{../@context}" name="@name" path="@use" /> </xsl:template> <xsl:template match="text()" priority="-1" mode="do-keys" > <!-- strip characters --> </xsl:template> <xsl:template match="text()" priority="-1" mode="do-all-patterns"> <!-- strip characters --> </xsl:template> <xsl:template match="text()" priority="-1"> <!-- strip characters --> </xsl:template> </xsl:stylesheet>
This specification is a much updated version of a paper delivered at the Pacific Neighbourhood Consortium/Electronic Cultural Atlas Initiative/Electronic Buddhist Text Initiative joint conference, University of California, Berkeley, Feb. 2000.
[2] The Schematron project website is at
http://www.ascc.net/xml/resource/schematron/schematron.htmlA new website to encourage open source contributions is being established for full operation 1Q/20001 at
http://sourceforge.net/projects/schematron
[CIP] F.L. Bauer, M. Broy, B. Moller, P. Pepper, M. Wirsing, et al. The Munich Project CIP. Vol. I: The Wide Spectrum Language CIP-L, volume I of Lecture Notes on Computer Science. Springer Verlag, Berlin, Heidelberg, New York, Berlin, 1985.
[deFrancis] The Chinese Language
[Etessami] K. Etessami and M. Yannakakis, From Rule-based to Automata-based testing, Proceedings of FORTE/PSTV'2000, 20th IFIP Int. Conf. on Formal Description Techniques/Protocol Specification, Testing, and Verification, 2000, http://citeseer.nj.nec.com/410961.html
[Finkelstein]
[HTML]
[LeCarlier]Baudouin Le Charlier and Pierre Flener, Specifications Are Necessarily Informal or: Some More Myths of Formal Methods, The Journal of Systems and Software Vol. 40", No."3", March, 1998 citeseer.nj.nec.com/190011.html
[Namespace]
[SGML]
[Schemarama]
[SOX]
[RDF]
[RELAX] Murata M.
[URL]
[XLink]
[XML]
[XML Schema]
[XSL-FO]
[XSLT]